IME (カスタム入力方式エディター) の要件Custom Input Method Editor (IME) requirements

これらのガイドラインと要件は、カスタム入力方式エディター (IME) を開発して、標準の QWERTY キーボードでは簡単に表現できない言語のテキストをユーザーが入力できるようにするために役立ちます。These guidelines and requirements can help you to develop a custom Input Method Editor (IME) to help a user input text in a language that can't be represented easily on a standard QWERTY keyboard.

Ime の概要については、「 Input Method Editor (ime)」を参照してください。For an overview of IMEs, see Input Method Editor (IME).

既定の IMEDefault IME

ユーザーは任意のアクティブな Ime を選択できます (設定 > 時刻 & 言語-> 言語-> 優先 > 言語-言語パック-オプション)。優先する言語の既定の ime になります。A user can select any of their active IMEs (Settings -> Time & Language -> Language -> Preferred languages -> Language pack - Options) to be the default IME for their preferred language.

優先する言語設定

[言語オプション] の [設定] 画面で、優先する言語の既定のキーボードを選択します。Select the default keyboard on the Language options settings screen for the preferred language.

優先言語キーボード

重要

カスタム IME の既定のキーボードを設定するために、レジストリに直接書き込むことはお勧めしません。We do not recommend writing directly to the registry to set the default keyboard for your custom IME.

互換性の要件Compatibility requirements

カスタム IME の基本的な互換性要件は次のとおりです。The following are the basic compatibility requirements for a custom IME.

IME は Windows アプリと互換性がある必要がありますIME must be compatible with Windows apps

テキストサービスフレームワーク (TSF)を使用して、ime を実装します。Use the Text Services Framework (TSF) to implement IMEs. 以前は、入力サービスに対して 入力方式マネージャー (IMM32) を使用するオプションがありました。Previously, you had the option of using the Input Method Manager (IMM32) for input services. これで、入力方式マネージャー (IMM32) を使用して実装された Ime がシステムによってブロックされるようになりました。Now the system blocks IMEs that are implemented by using Input Method Manager (IMM32).

アプリが起動すると、TSF は、ユーザーが現在選択している IME の IME DLL を読み込みます。When an app starts, TSF loads the IME DLL for the IME that's currently selected by the user. IME が読み込まれると、アプリと同じアプリコンテナーの制限が適用されます。When an IME is loaded, it's subject to the same app container restrictions as the app. たとえば、アプリがマニフェストでインターネットアクセスを要求していない場合、IME はインターネットにアクセスできません。For example, an IME can't access the Internet if an app hasn't requested Internet access in its manifest. この動作により、Ime がセキュリティコントラクトに違反しないようにします。This behavior ensures that IMEs can't violate security contracts.

TSF は、アプリと IME の仲介です。TSF is the intermediary between the app and your IME. TSF は入力イベントを IME に伝え、ユーザーが文字を選択した後、IME から入力文字を受け取ります。TSF communicates input events to the IME and receives input characters back from the IME after the user has selected a character.

この動作は、以前のバージョンの Windows と同じですが、Windows アプリに読み込まれると、IME の機能に影響します。This behavior is the same as previous versions of Windows, but being loaded into a Windows app affects the potential capabilities of an IME.

IME が Windows アプリとデスクトップアプリ間で異なる機能または UI を提供する必要がある場合は、TSF によって読み込まれる DLL が、読み込まれているアプリの種類を確認するようにしてください。If your IME needs to provide different functionality or UI between Windows apps and desktop apps, ensure that the DLL that’s loaded by TSF checks which type of app it's being loaded into. IME で Itfthreadmグリーン x:: GetActiveFlags メソッドを呼び出し、TF_TMF_IMMERSIVEMODE フラグをチェックします。これにより、結果に応じて、ime で異なるアプリケーションロジックがトリガーされます。Call the ITfThreadMgrEx::GetActiveFlags method in your IME and check the TF_TMF_IMMERSIVEMODE flag, so your IME triggers different application logic depending on the result.

Windows アプリでは、表テキストサービス (TTS) の Ime はサポートされていません。Windows apps do not support Table Text Service (TTS) IMEs.

注意

TTS Ime を生成するための一部のツールでは、Windows によってマルウェアとしてマークされた Ime が生成されます。Some tools for generating TTS IMEs produce IMEs that are marked as malware by Windows.

IME はシステムトレイと互換性がある必要がありますIME must be compatible with the system tray

IME アイコンをホストする言語バーはありません。There is no language bar to host IME icons. 代わりに、現在の入力オプションを示す入力インジケーターがシステムトレイに表示されます。Instead, an Input Indicator shows on the system tray that indicates the current input option. 入力インジケーターには、現在実行中の IME を示す IME ブランド化アイコンのみが表示されます。The Input Indicator shows only the IME branding icon to indicate the currently running IME. また、ime をオンまたはオフにするなど、最も一般的に使用される IME モードスイッチをユーザーが実行するために、IME ブランド化アイコンの左側に表示される IME モードアイコンが1つあります。Also, there's one IME mode icon that shows on the left of the IME branding icon for users to perform the most commonly used IME mode switch, like turning the IME on or off.

入力インジケーターには、互換性のある Ime に対してのみ、IME ブランドアイコンとモードアイコンが表示されます。The Input Indicator shows the IME branding icon and mode icon only for compatible IMEs. 互換性のない Ime には、ブランドアイコンとモードアイコンがシステムトレイに表示されません。IMEs that aren't compatible don't have the branding icon and mode icon displayed in the system tray. 代わりに、IME のブランド化アイコンではなく、言語の省略形が入力インジケーターに表示されます。Instead, the Input Indicator shows the language abbreviation instead of the IME branding icon.

IME アイコンは、スタンドアロンの .ico ファイルではなく、DLL または EXE ファイルに格納します。Store the IME icons in a DLL or EXE file, instead of a standalone .ico file. IME アイコンのデザインは、次の「UI デザインガイドライン」セクションで説明されているガイドラインに従う必要があります。The design of IME icons must follow the guidelines described in the following UI design guidelines section.

IME のブランド化アイコンIME branding icon

入力インジケーターは、ime がシステムに登録されたときに ime によって定義されたリソース ID を使用して、ime DLL から IME ブランド化アイコンを取得します。The Input Indicator gets the IME branding icon from the IME DLL by using the resource ID defined by the IME when it was registered on the system.

IME モードアイコンIME mode icon

Ime モードアイコンを表示するには、システムトレイに表示されている入力インジケーターに依存している必要がある場合があります。Some IMEs may need to rely on the Input Indicator showing on the system tray to display the IME mode icon. この場合、IME は GUID_LBI_INPUTMODE を使用して IME モードアイコンを入力インジケーターに渡します。In this case, the IME passes the IME mode icon to the Input Indicator by using GUID_LBI_INPUTMODE.

IME モードアイコンをシステムトレイの入力インジケーターに渡すと、IME モードアイコンの既定のサイズは16x16 ピクセルになります。When passing the IME mode icons to the Input Indicator on the system tray, the default size of the IME mode icon is 16x16 pixels. UI のスケーリングは DPI に従います。The UI scaling follows DPI.

IME モードアイコンを UAC の入力インジケーター (セキュリティで保護されたデスクトップのユーザーアカウント制御) に渡すと、IME モードアイコンの既定のサイズは20x20 ピクセルになります。When passing the IME mode icon to the Input Indicator on UAC (User Account Control in Secure Desktop), the default size of the IME mode icon is 20x20 pixels. UAC の [IME モードの UI スケーリング] アイコンは、PPI に従います。The UI scaling for IME mode icon on UAC follows PPI.

アプリコンテナーで IME を使用する必要があるIME must work in app container

一部の IME 関数は、アプリコンテナーで影響を受けます。Some IME functions are affected in an app container.

  • Dictionary ファイル -多くの場合、ime には、ユーザー入力を特定の文字にマップするための読み取り専用の辞書ファイルがあります。Dictionary Files - Frequently, IMEs have read-only dictionary files to map user input to specific characters. アプリコンテナー内からこれらのファイルにアクセスするには、プログラムファイルまたは Windows ディレクトリの下に IME を配置する必要があります。To access these files from inside an app container, your IME must place them under the Program Files or Windows directories. 既定では、これらのディレクトリはアプリコンテナーから読み取ることができるため、これらの場所に格納されているディクショナリファイルには、Ime がアクセスできます。By default, these directories can be read from an app container, so IMEs can access dictionary files that are stored in these locations. IME で辞書ファイルを別の場所に保存する必要がある場合は、辞書ファイルの Access Control リスト (ACL) を明示的に操作して、アプリコンテナーからのアクセスを許可する必要があります。If your IME must store the dictionary file somewhere else, it must explicitly manipulate the Access Control Lists (ACL) of the dictionary files to allow access from app containers.
  • インターネット更新 -IME でインターネットからのデータを使用してディクショナリを更新する必要がある場合、インターネットアクセスは常に許可されていないため、アプリコンテナー内では信頼できません。Internet Updating - If your IME needs to update its dictionaries using data from the Internet, it can't reliably do so inside an app container, because Internet access isn't always permitted. 代わりに、IME は、インターネットからのデータで辞書ファイルを更新する独立したデスクトッププロセスを実行する必要があります。Instead, your IME should run a separate desktop process that's responsible for updating the dictionary files with data from the Internet.
  • オンザフライの学習 -Ime がインターネットにアクセス可能なアプリコンテナーで実行されている場合、ime が通信できるエンドポイントに制限はありません。On-the-fly learning - If an IME is running in an app container that has Internet access, there's no restriction on the endpoints that the IME can communicate with. この場合、IME はクラウドサーバーを使用して、オンザフライのラーニングサービスを提供できます。In this case, an IME can use a cloud server to provide on-the-fly learning services. 一部の Ime は、ユーザーが入力している間にユーザー入力をダウンロードしてアップロードします。Some IMEs download and upload user input on the fly, while the user is typing. インターネットアクセスはアプリコンテナーでは保証されないため、常に許可されるとは限りません。Since Internet access is not guaranteed in an app container, this may not always be allowed.
  • プロセス間 での情報の共有-ime は、異なるアプリコンテナー内のアプリ間で、ユーザーの入力設定に関するデータを共有する必要がある場合があります。Sharing information between processes - IMEs may need to share data about the user’s input preferences between apps that are in different app containers. Web サービスを使用して、アプリ間でデータを共有します。Use a web service to share data between apps.

重要

アプリコンテナーのセキュリティ規則を回避しようとすると、IME はマルウェアとして扱われ、ブロックされる可能性があります。If you try to circumvent app container security rules, your IME may be treated as malware and blocked.

IME とタッチキーボードIME and touch keyboard

IME は、候補ウィンドウの UI とその他の UI 要素がタッチキーボードの下に描画されないようにする必要があります。Your IME must ensure that its candidate pane's UI, and other UI elements, aren't drawn underneath the touch keyboard. タッチキーボードは、すべてのアプリよりも高い z オーダーバンドで表示され、IME UI は、アクティブになっているアプリと同じ z オーダーバンドで表示されます。The touch keyboard is displayed in a higher z-order band than all apps, and the IME UI is displayed in the same z-order band as the app it's active in. その結果、タッチキーボードは、IME UI を重複したり非表示にしたりすることができます。As a result, the touch keyboard can overlap and hide the IME UI. ほとんどの場合、タッチキーボードを考慮して、アプリのウィンドウのサイズを変更する必要があります。In most cases, the app should resize its window to account for the touch keyboard. アプリのサイズが変更されない場合でも、IME は Inputpane API を使用してタッチキーボードの位置を取得できます。If an app doesn't resize, the IME still can use the InputPane API to get the position of the touch keyboard. IME は、 Location プロパティを照会するか、タッチキーボードの Show イベントと Hide イベントのハンドラーを登録します。The IME queries the Location property, or it registers a handler for the touch keyboard's Show and Hide events. Show イベントは、現在タッチキーボードが表示されている場合でも、ユーザーが編集フィールドをタップするたびに発生します。The Show event is raised every time the user taps in an edit field, even if the touch keyboard is displayed currently. Ime は、この API を使用して、タッチキーボードで使用される画面領域を取得します。これにより、IME は、候補 (または他の) UI を描画したり、タッチキーボードの下に描画しないように Ime UI をリフローしたりします。Your IME can use this API to get the screen space used by the touch keyboard before the IME draws candidate (or other) UI, and to reflow the IMEs UI to avoid drawing beneath the touch keyboard.

優先するタッチキーボードレイアウトの指定Specifying the preferred touch keyboard layout

IME は、使用するタッチキーボードレイアウトを指定でき、IME はタッチに最適化されたレイアウトで動作するように有効になっています。The IME can specify which touch keyboard layout to use, and the IME is enabled to work with touch-optimized layouts. この機能は、韓国語、日本語、簡体字中国語、繁体字中国語の入力言語の Ime に限定されています。This functionality is limited to IMEs for the Korean, Japanese, Chinese Simplified, and Chinese Traditional input languages.

タッチキーボードでサポートされているレイアウトは7つあります。3つはクラシックレイアウト、4つはタッチ最適化レイアウトです。There are seven layouts supported by the touch keyboard, three of which are classic layouts and four of which are touch-optimized layouts. クラシックレイアウトは、物理キーボードのように見え、動作します。The classic layouts look and behave like a physical keyboard.

次の3つのクラシックレイアウトは、繁体字中国語を異なる形式で入力するためのものです。All of the three classic layouts are for inputting traditional Chinese in different forms:

  • 発音に基づく入力Phonetic-based input
  • Changjie 入力Changjie input
  • Dayi 入力Dayi input

従来のレイアウトに加えて、韓国語、日本語、簡体字中国語、および繁体字中国語の各入力言語に対して、タッチに最適化されたレイアウトが1つあります。In addition to the classic layouts, there is one touch-optimized layout for each of the Korean, Japanese, Simplified Chinese, and Traditional Chinese input languages.

この機能を使用するには、IME で ITfFnGetPreferredTouchKeyboardLayout インターフェイスを実装する必要があります。これは、テキストサービスフレームワーク Itff tionprovider API を使用して ime によってエクスポートされます。To use this functionality, your IME must implement the ITfFnGetPreferredTouchKeyboardLayout interface, which is exported by the IME by using the Text Services Framework ITfFunctionProvider API.

IME で ITfFnGetPreferredTouchKeyboardLayout インターフェイスがサポートされていない場合、IME を使用すると、タッチキーボードによって表示される言語の既定のクラシックレイアウトが生成されます。If your IME doesn't support the ITfFnGetPreferredTouchKeyboardLayout interface, using the IME results in the default classic layout for the language that is displayed by the touch keyboard.

IME で、いずれかのクラシックレイアウトを優先レイアウトとして設定する必要がある場合、ITfFnGetPreferredTouchKeyboardLayout および Itff Tionprovider インターフェイスをサポートするだけでなく、IME 側で追加の作業を行う必要はありません。If your IME needs to set one of the classic layouts as the preferred layout, no additional work is required on the IME side beyond supporting the ITfFnGetPreferredTouchKeyboardLayout and ITfFunctionProvider interfaces. ただし、タッチに最適化されたレイアウトを操作するには、IME で追加の作業が必要です。これについては、次のセクションで説明します。But additional work is required in the IME to work with the touch-optimized layouts, and this is described in the next section.

タッチに最適化されたレイアウトTouch-optimized layout

韓国語、日本語、簡体字中国語、および繁体字中国語入力言語用のタッチに最適化されたキーボードでは、IME でのさまざまなレイアウトと、IME オフ変換モードが表示されます。The touch-optimized keyboards for the Korean, Japanese, Simplified Chinese, and Traditional Chinese input languages display a different layout for IME On and IME Off conversion modes. タッチキーボードには、IME 変換モードをオンまたはオフに設定するためのキーがありますが、キーボードの IME モードも、エディットコントロール間でフォーカスが変更されると変更される可能性があります。There's a key on the touch keyboard to set the IME conversion mode to On or Off, but the IME mode of the keyboard also may change as focus changes among edit controls.

日本語、簡体字中国語、および繁体字中国語入力言語のタッチに最適化されたキーボードには、候補ページ間を移動するために IME が使用するキー (キー) が含まれています。The touch-optimized keyboards for the Japanese, Simplified Chinese, and Traditional Chinese input languages contain a key, or keys, which the IME uses to navigate through candidate pages. 日本語および簡体字中国語の場合、タッチに最適化されたレイアウトで候補ページキーが表示されます。For Japanese and Simplified Chinese, the candidate page key displays on the touch-optimized layout. 繁体字中国語の場合は、前の候補ページと次の候補ページに個別のキーがあります。For Traditional Chinese, there are separate keys for the previous and next candidate pages.

これらのキーが押されると、タッチキーボードは SendInput 関数を呼び出して、次の Unicode プライベート使用領域文字をフォーカスされたアプリケーションに送信します。これは、IME がインターセプトして操作できます。When these keys are pressed, the touch keyboard calls the SendInput function to send the following Unicode Private Use Area characters to the focused application, which the IME can intercept and act on:

  • 次のページ (0xF003) -候補ページキーが、日本語と簡体字中国語のタッチ最適化キーボードで押されたとき、または、繁体字中国語用タッチ最適化キーボードで次のページキーが押されたときに送信されます。Next page (0xF003) - Sent when the candidate page key is pressed on the touch-optimized keyboard for Japanese and Simplified Chinese, or when the next page key is pressed on the touch-optimized keyboard for Traditional Chinese.
  • 前のページ (0xF004) -[候補ページ] キーが、日本語と簡体字中国語のタッチ最適化キーボードの Shift キーと同時に押されたとき、または前のページキーが繁体字中国語のタッチ最適化キーボードで押されたときに送信されます。Previous page (0xF004) - Sent when either the candidate page key is pressed at the same time as the Shift key on the touch-optimized keyboard for Japanese and Simplified Chinese, or when the previous page key is pressed on the touch-optimized keyboard for Traditional Chinese.

これらの文字は、Unicode 入力として送信されます。These characters are sent as Unicode input. 次の段落では、テキストサービスフレームワーク IME によって受信される主要なイベントシンク通知中に文字情報を抽出する方法について詳しく説明します。The next paragraph details how to extract the character information during the key event sink notifications that the Text Services Framework IME will receive. これらの文字値は、どのヘッダーファイルでも定義されていないため、コードで定義する必要があります。These character values are not defined in any header file, so you will need to define them in your code.

キーボード入力を受け取るには、IME がキーイベントシンクとして登録されている必要があります。To intercept keyboard input, your IME must register as a key event sink. SendInput 関数を使用して生成された Unicode 入力の場合、 ITfKeyEventSink コールバックの WPARAM パラメーター (OnKeyDown、OnKeyUp、OnTestKeyDown、Ontestkeydown) は常に仮想キー VK_PACKET を含み、文字を直接識別しません。For Unicode input that is generated by using the SendInput function, the WPARAM parameter of the ITfKeyEventSink callbacks (OnKeyDown, OnKeyUp, OnTestKeyDown, OnTestKeyUp) always contains the virtual key VK_PACKET and doesn't identify the character directly.

文字にアクセスするには、次の呼び出しシーケンスを実装します。Implement the following call sequence to access the character:

// Keyboard state
BYTE abKbdState[256];
if (!GetKeyboardState(abKbdState))
{
   return 0;
}

// Map virtual key to character code
WCHAR wch;
if (ToUnicode(VK_PACKET, 0, abKbdState, &wch, 1, 0) == 1)
{
   return wch;
}

IME 検索の統合IME search integration

検索機能を使用して検索機能をユーザーに提供し、検索ウィンドウと統合します。Provide users with search features through the search contract and integration with the search pane.

検索ウィンドウと IME の候補
検索ウィンドウと IME の候補Search pane and IME suggestions

検索ウィンドウは、ユーザーがすべてのアプリで検索を実行できるようにするための一元的な場所です。The search pane is a central location for users to perform searches across all of their apps. IME ユーザーの場合、Windows は、互換性のある Ime を Windows と統合して効率と使いやすさを向上させるための一意の検索エクスペリエンスを提供します。For IME users, Windows provides a unique search experience that lets compatible IMEs integrate with Windows for greater efficiency and usability.

検索と互換性のある IME を入力したユーザーには、次の2つの主な利点があります。Users who type with an IME that's compatible with search get two main benefits:

  • IME と検索エクスペリエンスのシームレスな相互作用。Seamless interaction between the IME and the search experience. IME 候補は検索ボックスの下にインラインで表示され、occluding 検索候補は表示されません。IME candidates are shown inline under the search box without occluding search suggestions. ユーザーはキーボードを使用して、検索ボックス、IME 変換候補、および検索候補の間をシームレスに移動できます。The user can use the keyboard to navigate seamlessly between the search box, the IME conversion candidates, and the search suggestions.
  • アプリケーションによって提供される、関連する結果や提案にすばやくアクセスできます。Faster access to relevant results and suggestions provided by applications. アプリは、現在のすべての変換候補にアクセスして、より関連性の高い候補を提供します。The app has access to all current conversion candidates to provide more relevant suggestions. 検索候補の優先順位を向上させるために、変換は関連性の高い順にアプリに与えられます。To better prioritize search suggestions, conversions are given to apps in order of relevance. ユーザーは、[発音] を入力するだけで、変換せずに必要な結果を検索して選択します。Users find and select the result they want without converting, just by typing in phonetic.

IME は、次の条件を満たしている場合、統合された検索エクスペリエンスと互換性があります。An IME is compatible with the integrated search experience if it meets the following criteria:

検索ウィンドウでアクティブ化すると、互換性のある IME は UIless モードで配置され、UI を表示できません。When activated in the search pane, a compatible IME is placed in UIless mode and can't show its UI. 代わりに、前のスクリーンショットに示したように、変換候補を Windows に送信して、インライン候補リストコントロールに表示します。Instead, it sends conversion candidates to Windows, which displays them in the inline candidate list control, as shown in the previous screenshot.

また、IME は、現在の検索を実行するために使用する候補を送信します。Also, the IME sends candidates that should be used to run the current search. これらの候補は、変換の候補と同じにすることも、検索用にカスタマイズすることもできます。These candidates could be the same as the conversion candidates, or they could be tailored for search.

適切な検索候補は、次の条件を満たしています。Good search candidates meet the following criteria:

  • プレフィックスが重複していません。No prefix overlap. たとえば、北京大学 and北京は、もう一方のプレフィックスであるため、冗長です。For example, 北京大学 and北京 are redundant because one is a prefix of the other.
  • 重複候補はありません。No redundant candidates. 重複候補は、結果のフィルター処理に役立たないので、検索には役立ちません。Any redundant candidate isn't useful for search because it doesn't help filter results. たとえば、北京大学に一致する結果も北京に一致します。For example, any result that matches 北京大学 also matches 北京.
  • 予測候補はありません。変換のみです。No prediction candidate, only conversion. たとえば、ユーザーが「be」と入力した場合、IME は北を候補として返すことができますが、北京大学は返しません。For example, if the user types "be", the IME can return 北 as a candidate, but not 北京大学. 通常、予測候補には制限があります。Usually, prediction candidates are too restrictive.

条件を満たしていない Ime は、他のコントロールと同じように検索の表示と互換性がありません。また、UI の統合と検索候補を利用することもできません。IMEs that don't meet the criteria aren't compatible with search display in the same way as other controls, and can't take advantage of UI integration and search candidates. アプリは、ユーザーの作成が完了した後にのみクエリを受信します。Apps receive queries only after the user has finished composing.

検索コントラクトをサポートするアプリがクエリを受け取ると、クエリイベントには "queryTextAlternatives" 配列が含まれます。この配列には、最も関連性の高いものから最も関連性が低いものから順に順位付けされた既知の代替候補がすべて含まれています。When an app that supports the search contract receives a query, the query event contains a "queryTextAlternatives" array that contains all known alternatives, ranked from the most relevant (likely) to least relevant (unlikely).

代替手段が提供されている場合、アプリは各代替手段をクエリとして処理し、任意の代替候補に一致するすべての結果を返す必要があります。When alternatives are provided, the app should treat each alternative as a query and return all results that match any of the alternatives. アプリは、ユーザーが同時に複数のクエリを発行した場合と同じように動作し、結果を提供するサービスに対して "or" クエリを本質的に発行します。The app should behave as if the user had issued multiple queries at the same time, essentially issuing an "or" query to the service providing the results. パフォーマンス上の考慮事項として、アプリでは、最も関連性の高い代替手段のうちの 5 ~ 20 までの一致を制限することがよくあります。For performance considerations, apps often limit matching to between 5 and 20 of the most relevant alternatives.

UI デザインのガイドラインUI design guidelines

すべての Ime は、「 Windows アプリの設計とコーディング」で説明されているユーザーエクスペリエンスガイドラインに従う必要があります。All IMEs must follow the user experience guidelines described in Design and code Windows apps.

固定ウィンドウを使用しないDon't use sticky windows

IME ウィンドウは、必要なときにのみ表示され、常に表示されるはずではありません。Your IME windows should appear only when needed, and they shouldn't be visible all the time. ユーザーが入力する必要がない場合、IME ウィンドウは表示されません。When users don't need to type, IME windows shouldn't show. IME ウィンドウを全画面表示ウィンドウにすることはできません。The IME window shouldn't be a full screen window. IME ウィンドウが互いに重ならないようにします。IME windows shouldn't overlap each other. Windows は、Windows スタイルで設計し、UI のスケーリングに従う必要があります。The windows should be designed in a Windows style and follow UI scaling.

IME アイコンIME icons

IME アイコンには、ブランドアイコンとモードアイコンの2種類があります。There are two kinds of IME icons, branding icons and mode icons. すべての IME アイコンは、黒と白の色のみで設計する必要があります。All IME icons must be designed with black and white colors only. 新しい IME アイコンは、システムトレイアイコンの glyphic の外観から借用します。The new IME icons borrow from the glyphic look of the system tray icons. このスタイルは、すべての言語で、familial の外観を補完するために使用できるように作成されています。また、相互に区別することもできます。This style has been created so all languages can use it to complement the familial look while also differentiating from each other.

IME アイコンのファイル形式は ICO です。The file format for IME icons is ICO. 次のアイコンのサイズを指定する必要があります。You must provide the following icon sizes.

  • 16x16 ピクセル16x16 pixels
  • 20x20 ピクセル20x20 pixels
  • 24 x 24 ピクセル24x24 pixels
  • 32x32 ピクセル32x32 pixels
  • 40 x 40 ピクセル40x40 pixels
  • 48 x 48 ピクセル48x48 pixels

すべての解像度で、アルファチャネルを含む32ビットのアイコンが提供されていることを確認します。Ensure that 32-bit icons with alpha channel are provided in all resolutions.

IME ブランドアイコンは、最新のタイプフェイスでレンダリングされるタイポグラフィグリフが配置されている白いボックスで定義されます。IME brand icons are defined by a white box in which a typographic glyph rendered in a modern typeface is placed. それぞれの定義グリフは、各言語チームによって選択されます。Each defining glyph is chosen by each language team. グリフが黒です。The glyph is black. ボックスには、1ピクセルの外側のストロークが50% の不透明度で黒で表示されます。The box includes an outer stroke of 1 pixel in black at 50% opacity. "新しい" バージョンは、ボックスの左上に丸い角が付いています。"New" versions are defined by a rounded corner in the upper left of the box.

IME モードのアイコンは、50% の不透明度で黒で1ピクセルの外側のストロークを含む、最新のタイプフェイスのホワイトタイポグラフィグリフによって定義されます。IME mode icons are defined by a white typographic glyph in a modern typeface which includes an outer stroke of 1 pixel in black at 50% opacity.

アイコンIcon 説明Description
繁体字中国語 ChangeJie のサンプル IME ブランドアイコン。 繁体字中国語 ChangeJie のサンプル IME ブランドアイコン。Example IME brand icon for Traditional Chinese ChangeJie.
繁体字中国語の新しい ChangeJie のサンプル IME ブランドアイコン。 繁体字中国語 ChangeJie のサンプル IME ブランドアイコン。Example IME brand icon for Traditional Chinese ChangeJie.
中国語モードアイコン IME モードの例のアイコン。Example IME mode icon.

所有ウィンドウOwned window

候補となる UI を表示するには、IME がウィンドウを所有ウィンドウに設定する必要があります。これにより、現在実行中のアプリで表示できるようになります。To display candidate UI, an IME must set its window to be owned-window, so it can display over the currently running app. Itfcontextview:: GetWndメソッドを使用して、所有するウィンドウを取得します。Use the ITfContextView::GetWnd method to retrieve the window to own to. GetWnd がエラーまたは NULLHWND を返した場合は、 GetFocus 関数を呼び出します。If GetWnd returns an error or a NULLHWND, call the GetFocus function.

if (FAILED(pView->GetWnd(&parentWndHandle)) || (parentWndHandle == nullptr)) { parentWndHandle = GetFocus(); }

IME 候補ウィンドウとライト消去サーフェイスの相互作用IME candidate window interaction with light dismiss surfaces

ポップアップウィンドウの無視モデルは、ユーザーが簡単にこのようなウィンドウを閉じることができるため、"ライトの破棄" と呼ばれます。The dismissal model for popup windows is called "light dismiss" because it's easy for a user to close such windows. Ime を Windows 相互作用モデルで適切に機能させるには、IME ウィンドウを明るい破棄モデルに含める必要があります。For IMEs to function well in the Windows interaction model, the IME windows must participate in the light dismiss model.

ライトの破棄モデルに参加するには、 Notifywinevent 関数または同様の関数を使用して、3つの新しい Windows イベントを IME で発生させる必要があります。In order to participate in the light dismiss model, your IME must raise three new Windows events by using the NotifyWinEvent function or a similar function. これらの新しいイベントは次のとおりです。These new events are:

  • EVENT_OBJECT_IME_SHOW -IME が表示されたときに、このイベントを発生させます。EVENT_OBJECT_IME_SHOW - Raise this event when the IME becomes visible.
  • EVENT_OBJECT_IME_HIDE -IME が非表示のときにこのイベントを発生させます。EVENT_OBJECT_IME_HIDE - Raise this event when the IME is hidden.
  • EVENT_OBJECT_IME_CHANGE -IME がサイズを移動または変更したときに、このイベントを発生させます。EVENT_OBJECT_IME_CHANGE - Raise this event when the IME moves or changes size.

互換性の宣言Declaring compatibility

Ime は、 ITfCategoryMgr:: RegisterCategoryを使用して、ime のカテゴリ GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT を登録することによって、互換性があることを宣言します。IMEs declare that they are compatible by registering the category GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT for their IME using ITfCategoryMgr::RegisterCategory.

既定の IME モードをオンに設定します。Set the default IME mode to on

Ime に適した UX を提供しています。We provide a better UX for IMEs.

DPI スケーリングによるデスクトップアプリケーションのサポートDPI scaling support for desktop applications

拡張された DPI スケーリングサポートにより、各デスクトッププロセスの宣言された DPI 認識レベルに対してクエリを実行し、UI を拡張する必要があるかどうかを判断できます。Enhanced DPI scaling support enables querying the declared DPI awareness level of each desktop process to determine if it needs to scale the UI. マルチモニターのシナリオでは、各モニターのさまざまな DPI 設定に合わせて UI が適切にスケールされます。In a multi-monitor scenario, Windows scales the UI appropriately for different DPI settings on each monitor.

IME は各アプリケーションのプロセスのコンテキストで実行されるため、IME の DPI 認識レベルを宣言しないでください。Because your IME runs in the context of each application's process, you shouldn't declare a DPI awareness level for your IME. これにより、IME は現在のプロセスの DPI 認識レベルで実行されます。This ensures that your IME runs at the DPI awareness level of the current process.

すべての IME UI 要素に、実行中のプロセスの UI 要素とのスケーリングパリティがあることを確認するには、異なる DPI 値に適切に応答する必要があります。To ensure that all IME UI elements have scaling parity with the UI elements of the process in which you are running, you must respond appropriately to different DPI values.

注意

新しいデスクトップアプリケーションとの同等性を確保するために、IME はモニターごとの DPI 認識をサポートする必要がありますが、認識のレベルを宣言しないでください。To ensure parity with new desktop applications, your IME should support per monitor–DPI awareness, but shouldn't declare a level of awareness itself. 各シナリオで、システムによって適切なスケーリング要件が決定されます。The system determines the appropriate scaling requirements in each scenario.

デスクトップアプリケーションの DPI スケーリングサポート要件の詳細については、「 高 dpi」を参照してください。For details about DPI scaling support requirements for Desktop applications, see High DPI.

IME のインストールIME installation

Microsoft Visual Studio を使用して IME を構築する場合は、Flexera Software のようなサードパーティのインストーラーを使用して、IME のインストールエクスペリエンスを作成します。If you build your IME by using Microsoft Visual Studio, create an installation experience for your IME by using a third-party installer, like InstallShield from Flexera Software.

次の手順は、InstallShield を使用して、IME DLL のセットアッププロジェクトを作成する方法を示しています。The following steps show how to use InstallShield to create a setup project for your IME DLL.

  • Visual Studio をインストールします。Install Visual Studio.
  • Visual Studio を起動します。Start Visual Studio.
  • [ ファイル ] メニューの [ 新規作成 ] をポイントし、[ プロジェクト] をクリックします。On the File menu, point to New and select Project. [ 新しいプロジェクト ] ダイアログボックスが開きます。The New Project dialog opens.
  • 左側のウィンドウで、[ テンプレート] > 他のプロジェクトの種類 > セットアップと配置] に移動し、[ InstallShield の制限付きエディションを有効にする] をクリックして、[ OK] をクリックします。In the left pane, navigate to Templates > Other Project Types > Setup and Deployment, click Enable InstallShield Limited Edition, and click OK. インストール手順に従います。Follow the installation instructions.
  • Visual Studio を再起動します。Restart Visual Studio.
  • IME ソリューション (.sln) ファイルを開きます。Open the IME solution (.sln) file.
  • ソリューションエクスプローラーで、ソリューションを右クリックして [ 追加] をポイントし、[ 新しいプロジェクト] をクリックします。In Solution Explorer, right-click the solution, point to Add, and select New Project. [ 新しいプロジェクトの追加 ] ダイアログボックスが表示されます。The Add New Project dialog opens.
  • 左側のツリービューコントロールで、[ テンプレート] > その他のプロジェクトの種類 > [InstallShield 限定版] の順に移動します。In the left tree view control, navigate to Templates > Other Project Types > InstallShield Limited Edition.
  • 中央のウィンドウで、[ InstallShield の制限付きエディションプロジェクト] をクリックします。In the center window, click InstallShield Limited Edition Project.
  • [ 名前 ] テキストボックスに「setupime」と入力し、[ OK] をクリックします。In the Name text box, type "SetupIME" and click OK.
  • [ Project Assistant ] ダイアログボックスで、[ アプリケーション情報] をクリックします。In the Project Assistant dialog, click Application Information.
  • 会社名とその他のフィールドを入力します。Fill in your company name and the other fields.
  • [ アプリケーションファイル] をクリックします。Click Application Files.
  • 左側のウィンドウで、 [INSTALLDIR] フォルダーを右クリックし、[ 新しいフォルダー] を選択します。In the left pane, right-click the [INSTALLDIR] folder, and select New Folder. フォルダーに "プラグイン" という名前を指定します。Name the folder "Plugins".
  • [ ファイルの追加] をクリックします。Click Add Files. IME DLL に移動し、[ プラグイン ] フォルダーに追加します。Navigate to your IME DLL and add it to the Plugins folder. IME 辞書に対してこの手順を繰り返します。Repeat this step for the IME dictionary.
  • IME DLL を右クリックし、[ プロパティ] を選択します。Right-click the IME DLL and select Properties. [ プロパティ ] ダイアログボックスが表示されます。The Properties dialog opens.
  • [ プロパティ ] ダイアログボックスで、[ COM & .net の設定 ] タブをクリックします。In the Properties dialog, click the COM & .NET Settings tab.
  • [ 登録の種類] で [ 自己登録 ] を選択し、[ OK] をクリックします。Under Registration Type, select Self-registration and click OK.
  • ソリューションをビルドします。Build the solution. IME DLL が構築され、InstallShield によって、ユーザーが Windows に IME をインストールできるようにする setup.exe ファイルが作成されます。The IME DLL is built, and InstallShield creates a setup.exe file that enables users to install your IME on Windows.

独自のインストールエクスペリエンスを作成するには、 Itfinputprocessorprofilemgr:: RegisterProfile メソッドを呼び出して、インストール時に IME を登録します。To create your own installation experience, call the ITfInputProcessorProfileMgr::RegisterProfile method to register the IME during installation. レジストリエントリを直接記述しないでください。Don't write registry entries directly.

インストール後すぐに IME を使用する必要がある場合は、 InstallLayoutOrTip を呼び出して、psz パラメーターに次の形式を使用し、ユーザーが有効にした入力方法に ime を追加します。If the IME must be usable immediately after installation, call InstallLayoutOrTip to add the IME to user-enabled input methods, using the following format for the psz parameter:

<LangID 1>:{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}

IME のアクセシビリティIME accessibility

Ime がアクセシビリティ要件に準拠し、ナレーターを操作できるようにするには、次の規則を実装します。Implement the following convention to make your IMEs conform to the accessibility requirements and to work with Narrator. 候補リストをアクセス可能にするには、Ime がこの規則に従う必要があります。To make candidate lists accessible, your IMEs must follow this convention.

  • 候補リストには、変換候補の一覧または予測候補の一覧の "IME_Prediction_Window" の UIA_AutomationIdPropertyId が "IME_Candidate_Window" と同じである必要があります。The candidate list must have a UIA_AutomationIdPropertyId equal to "IME_Candidate_Window" for lists of conversion candidates or "IME_Prediction_Window" for lists of prediction candidates.
  • 候補リストが表示され、表示されなくなると、型 UIA_MenuOpenedEventIdUIA_MenuClosedEventIdのイベントがそれぞれ生成されます。When the candidate list appears and disappears, it raises events of type UIA_MenuOpenedEventId and UIA_MenuClosedEventId, respectively
  • 現在選択されている候補が変更されると、候補リストによって UIA_SelectionItem_ElementSelectedEventIdが発生します。When the current selected candidate changes, the candidate list raises a UIA_SelectionItem_ElementSelectedEventId. 選択した要素には、 TRUEに等しいUIA_SelectionItemIsSelectedPropertyIdプロパティが設定されている必要があります。The selected element should have a property UIA_SelectionItemIsSelectedPropertyId equal to TRUE.
  • 候補リストの各項目の UIA_NamePropertyId は、候補の名前である必要があります。The UIA_NamePropertyId for each item in the candidate list must be the name of the candidate. 必要に応じて、 UIA_HelpTextPropertyIdを通じて候補を明確にするための追加情報を提供できます。Optionally, you can provide additional information to disambiguate candidates through UIA_HelpTextPropertyId.