Anforderungen an den benutzerdefinierten Eingabemethoden-Editor (IME)Custom Input Method Editor (IME) requirements

Diese Richtlinien und Anforderungen können Sie bei der Entwicklung eines benutzerdefinierten Eingabemethoden-Editors (IME) unterstützen, mit dem Benutzereingaben in einer Sprache durchführen können, die auf einer standardmäßigen QWERTY-Tastatur nicht leicht dargestellt werden kann.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.

Eine Übersicht über die IMEs finden Sie unter Eingabemethoden-Editor (IME).For an overview of IMEs, see Input Method Editor (IME).

Standard-IMEDefault IME

Benutzer können eine ihrer aktiven IMEs (Settings-> Time & Language-> Language-> bevorzugte Sprachen-> Language Pack-Optionen) als Standard-IME für Ihre bevorzugte Sprache auswählen.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.

Bevorzugte Spracheinstellung

Wählen Sie auf dem Bildschirm Sprachoptionen Einstellungen die Standardtastatur für die bevorzugte Sprache aus.Select the default keyboard on the Language options settings screen for the preferred language.

Tastatur für bevorzugte Sprache

Wichtig

Es wird nicht empfohlen, direkt in die Registrierung zu schreiben, um die Standardtastatur für Ihren benutzerdefinierten IME festzulegen.We do not recommend writing directly to the registry to set the default keyboard for your custom IME.

KompatibilitätsanforderungenCompatibility requirements

Im folgenden sind die grundlegenden Kompatibilitätsanforderungen für eine benutzerdefinierte IME aufgeführt.The following are the basic compatibility requirements for a custom IME.

IME muss mit Windows-Apps kompatibel sein.IME must be compatible with Windows apps

Verwenden Sie das Text Services-Framework (TSF) zum Implementieren von IMEs.Use the Text Services Framework (TSF) to implement IMEs. Zuvor haben Sie die Möglichkeit, den Eingabemethoden-Manager (imm32) für Eingabe Dienste zu verwenden.Previously, you had the option of using the Input Method Manager (IMM32) for input services. Nun blockiert das System die mit Input Method Manager (imm32) implementierten IMEs.Now the system blocks IMEs that are implemented by using Input Method Manager (IMM32).

Wenn eine APP gestartet wird, lädt TSF die IME-DLL für den IME, der derzeit vom Benutzer ausgewählt wird.When an app starts, TSF loads the IME DLL for the IME that's currently selected by the user. Wenn eine IME geladen wird, unterliegt Sie denselben App-Container Einschränkungen wie die app.When an IME is loaded, it's subject to the same app container restrictions as the app. So kann z. b. ein IME nicht auf das Internet zugreifen, wenn eine APP im Manifest keinen Internet Zugriff angefordert hat.For example, an IME can't access the Internet if an app hasn't requested Internet access in its manifest. Durch dieses Verhalten wird sichergestellt, dass IMEs keine Sicherheits Verträge verletzen kann.This behavior ensures that IMEs can't violate security contracts.

TSF ist der Vermittler zwischen der APP und Ihrem IME.TSF is the intermediary between the app and your IME. TSF kommuniziert Eingabeereignisse an den IME und empfängt Eingabezeichen aus dem IME, nachdem der Benutzer ein Zeichen ausgewählt hat.TSF communicates input events to the IME and receives input characters back from the IME after the user has selected a character.

Dieses Verhalten ist mit früheren Versionen von Windows identisch, aber das Laden in eine Windows-App wirkt sich auf die möglichen Funktionen eines IME aus.This behavior is the same as previous versions of Windows, but being loaded into a Windows app affects the potential capabilities of an IME.

Wenn Ihr IME unterschiedliche Funktionen oder Benutzeroberflächen zwischen Windows-apps und Desktop-Apps bereitstellen muss, müssen Sie sicherstellen, dass die von TSF geladene DLL überprüft, in welche Art von APP Sie geladen wird.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. Nennen Sie die itfthreadmgrex:: getactiveflags -Methode in Ihrem IME, und überprüfen Sie das TF_TMF_IMMERSIVEMODE-Flag, sodass Ihr IME abhängig vom Ergebnis eine andere Anwendungslogik auslöst.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-apps unterstützen keine TTS (Table Text Service)-IMEs.Windows apps do not support Table Text Service (TTS) IMEs.

Hinweis

Einige Tools zum Erstellen von TTS-IMEs sind IMEs, die von Windows als Malware gekennzeichnet sind.Some tools for generating TTS IMEs produce IMEs that are marked as malware by Windows.

Der IME muss mit der Taskleiste kompatibel sein.IME must be compatible with the system tray

Es ist keine sprach Leiste zum Hosten von IME-Symbolen vorhanden.There is no language bar to host IME icons. Stattdessen zeigt ein Eingabe Indikator auf der Taskleiste an, die die aktuelle Eingabeoption angibt.Instead, an Input Indicator shows on the system tray that indicates the current input option. Der Eingabe Indikator zeigt nur das IME-Branding-Symbol an, um den derzeit laufenden IME anzugeben.The Input Indicator shows only the IME branding icon to indicate the currently running IME. Außerdem gibt es ein IME-Modus-Symbol, das auf der linken Seite des IME-brandingsymbols angezeigt wird, damit Benutzer den am häufigsten verwendeten IME-Modusschalter ausführen können, wie z. b. das Aktivieren oder Deaktivieren des IME.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.

Der Eingabe Indikator zeigt das IME-Branding-Symbol und das Mode-Symbol nur für kompatible IMEs an.The Input Indicator shows the IME branding icon and mode icon only for compatible IMEs. Bei nicht kompatiblen nicht kompatiblen Symbolen sind das Branding-Symbol und das Mode-Symbol in der Taskleiste nicht angezeigt.IMEs that aren't compatible don't have the branding icon and mode icon displayed in the system tray. Stattdessen zeigt der Eingabe Indikator die sprach Abkürzung anstelle des IME-Branding-Symbols an.Instead, the Input Indicator shows the language abbreviation instead of the IME branding icon.

Speichern Sie die IME-Symbole in einer DLL-oder exe-Datei anstelle einer eigenständigen ICO-Datei.Store the IME icons in a DLL or EXE file, instead of a standalone .ico file. Der Entwurf von IME-Symbolen muss den Richtlinien folgen, die im folgenden Abschnitt Richtlinien zum Entwerfen von Benutzeroberflächen beschrieben werdenThe design of IME icons must follow the guidelines described in the following UI design guidelines section.

Symbol für IME-BrandingIME branding icon

Der Eingabe Indikator Ruft das IME-Branding-Symbol von der IME-DLL mithilfe der Ressourcen-ID ab, die durch den IME definiert wurde, als er im System registriert wurde.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.

Symbol für IME-ModusIME mode icon

Einige IMEs müssen sich möglicherweise auf den Eingabe Indikator stützen, der auf der Taskleiste angezeigt wird, um das Symbol für den IME-Modus anzuzeigen.Some IMEs may need to rely on the Input Indicator showing on the system tray to display the IME mode icon. In diesem Fall übergibt der IME das IME-Modus-Symbol mithilfe von GUID_LBI_INPUTMODE an den Eingabe Indikator.In this case, the IME passes the IME mode icon to the Input Indicator by using GUID_LBI_INPUTMODE.

Wenn Sie die Symbole des IME-Modus an den Eingabe Indikator in der Taskleiste übergeben, beträgt die Standardgröße des IME-Modus-Symbols 16x16 Pixel.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. Die Skalierung der Benutzeroberfläche folgt dpi.The UI scaling follows DPI.

Wenn das Symbol für den IME-Modus an den Eingabe Indikator in der Benutzerkontensteuerung (Benutzerkontensteuerung in Secure Desktop) übergeben wird, beträgt die Standardgröße des IME-Modus-Symbols 20 x 20 Pixel.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. Das Symbol für die Benutzeroberflächen Skalierung für das IME-Modus auf der Benutzerkontensteuerung folgtThe UI scaling for IME mode icon on UAC follows PPI.

IME muss im App-Container arbeitenIME must work in app container

Einige IME-Funktionen sind in einem App-Container betroffen.Some IME functions are affected in an app container.

  • Wörterbuchdateien : häufig verfügen IMEs über schreibgeschützte Wörterbuchdateien, um Benutzereingaben bestimmten Zeichen zuzuordnen.Dictionary Files - Frequently, IMEs have read-only dictionary files to map user input to specific characters. Um auf diese Dateien aus einem App-Container zugreifen zu können, muss Ihr IME diese Dateien unter den Programmen "Programme" oder "Windows" platzieren.To access these files from inside an app container, your IME must place them under the Program Files or Windows directories. Standardmäßig können diese Verzeichnisse aus einem App-Container gelesen werden, sodass Sie auf Wörterbuchdateien zugreifen können, die an diesen Speicherorten gespeichert sind.By default, these directories can be read from an app container, so IMEs can access dictionary files that are stored in these locations. Wenn Ihr IME die Wörterbuchdatei an einem anderen Speicherort speichern muss, muss Sie die Access Control Listen (ACL) der Wörterbuchdateien explizit manipulieren, um den Zugriff von App-Containern zu ermöglichen.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.
  • Internet Aktualisierung : Wenn Ihr IME die Wörterbücher mithilfe von Daten aus dem Internet aktualisieren muss, kann dies innerhalb eines App-Containers nicht zuverlässig durchzuführen sein, da der Internetzugang nicht immer zulässig ist.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. Stattdessen sollte Ihr IME einen separaten Desktop Prozess ausführen, der für das Aktualisieren der Wörterbuchdateien mit Daten aus dem Internet zuständig ist.Instead, your IME should run a separate desktop process that's responsible for updating the dictionary files with data from the Internet.
  • Das dynamische lernen : Wenn ein IME in einem App-Container ausgeführt wird, der über Internet Zugriff verfügt, gibt es keine Einschränkung für die Endpunkte, mit denen der IME kommunizieren kann.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. In diesem Fall kann ein IME einen Cloud-Server verwenden, um dynamische Lerndienste bereitzustellen.In this case, an IME can use a cloud server to provide on-the-fly learning services. Einige IMEs laden Benutzereingaben herunter und laden Sie dynamisch hoch, während der Benutzer eine Eingabe vornimmt.Some IMEs download and upload user input on the fly, while the user is typing. Da der Internet Zugriff in einem App-Container nicht garantiert wird, ist dies möglicherweise nicht immer zulässig.Since Internet access is not guaranteed in an app container, this may not always be allowed.
  • Freigabe von Informationen zwischen Prozessen : möglicherweise müssen Sie Daten über die Eingabeeinstellungen des Benutzers zwischen apps in verschiedenen App-Containern freigeben.Sharing information between processes - IMEs may need to share data about the user’s input preferences between apps that are in different app containers. Verwenden Sie einen Webdienst, um Daten zwischen apps freizugeben.Use a web service to share data between apps.

Wichtig

Wenn Sie versuchen, App-Container-Sicherheitsregeln zu umgehen, wird Ihr IME möglicherweise als Schadsoftware behandelt und blockiert.If you try to circumvent app container security rules, your IME may be treated as malware and blocked.

IME-und Touchscreen-TastaturIME and touch keyboard

Ihr IME muss sicherstellen, dass die Benutzeroberfläche des Kandidaten Bereichs und andere Elemente der Benutzeroberfläche nicht unterhalb der Fingereingabe Tastatur gezeichnet werden.Your IME must ensure that its candidate pane's UI, and other UI elements, aren't drawn underneath the touch keyboard. Die Fingereingabe Tastatur wird in einem höheren z-Reihenfolge als alle apps angezeigt, und die IME-Benutzeroberfläche wird in derselben z-Reihenfolge angezeigt wie die APP, in der Sie aktiv ist.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. Folglich kann sich die Fingereingabe Tastatur überlappen und die IME-Benutzeroberfläche ausblenden.As a result, the touch keyboard can overlap and hide the IME UI. In den meisten Fällen sollte die APP die Größe des Fensters ändern, um die Touchscreen-Tastatur zu berücksichtigen.In most cases, the app should resize its window to account for the touch keyboard. Wenn die Größe einer APP nicht geändert wird, kann der IME weiterhin die inputpane -API verwenden, um die Position der Touchscreen-Tastatur zu erhalten.If an app doesn't resize, the IME still can use the InputPane API to get the position of the touch keyboard. Der IME fragt die Location -Eigenschaft ab oder registriert einen Handler für das Show-und Hide-Ereignis der Touchscreen-Tastatur.The IME queries the Location property, or it registers a handler for the touch keyboard's Show and Hide events. Das Show-Ereignis wird jedes Mal ausgelöst, wenn der Benutzer auf ein Bearbeitungsfeld tippt, auch wenn die Fingereingabe Tastatur derzeit angezeigt wird.The Show event is raised every time the user taps in an edit field, even if the touch keyboard is displayed currently. Der IME kann diese API verwenden, um den von der touchtastatur verwendeten Bildschirmbereich zu erhalten, bevor die IME-Benutzeroberfläche (oder eine andere) Benutzeroberfläche erstellt wird, und um die IMEs-Benutzeroberfläche zu übertragen, um das Zeichnen unterhalb der touchtastatur zu vermeidenYour 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.

Angeben des bevorzugten Berührungs TastaturlayoutsSpecifying the preferred touch keyboard layout

Der IME kann angeben, welches Touchscreen-Tastaturlayout verwendet werden soll, und der IME ist für die Arbeit mit Touchscreen-optimierten Layouts aktiviert.The IME can specify which touch keyboard layout to use, and the IME is enabled to work with touch-optimized layouts. Diese Funktionalität ist auf IMEs für die Sprachen Koreanisch, Japanisch, Chinesisch (vereinfacht) und Chinesisch (traditionell) beschränkt.This functionality is limited to IMEs for the Korean, Japanese, Chinese Simplified, and Chinese Traditional input languages.

Es werden sieben Layouts von der Touchscreen-Tastatur unterstützt, von denen drei klassische Layouts und vier für Berührungs optimierte Layouts sind.There are seven layouts supported by the touch keyboard, three of which are classic layouts and four of which are touch-optimized layouts. Die klassischen Layouts Aussehen und Verhalten sich wie eine physische Tastatur.The classic layouts look and behave like a physical keyboard.

Alle drei klassischen Layouts dienen zum Einfügen von traditionellem Chinesisch in verschiedenen Formularen:All of the three classic layouts are for inputting traditional Chinese in different forms:

  • Phonetische basierte EingabePhonetic-based input
  • ChangJie-EingabeChangjie input
  • DaYi-EingabeDayi input

Zusätzlich zu den klassischen Layouts gibt es für jede der Sprachen für Koreanisch, Japanisch, Chinesisch (vereinfacht) und Chinesisch (traditionell) ein Fingerabdruck optimiertes Layout.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.

Um diese Funktion verwenden zu können, muss Ihr IME die itffngetpreferredtouchkeyboardlayout -Schnittstelle implementieren, die durch den IME mithilfe der ITfFunctionProvider -API des Text Services-Frameworks exportiert wird.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.

Wenn Ihr IME die itffngetpreferredtouchkeyboardlayout-Schnittstelle nicht unterstützt, führt die Verwendung von IME zum klassischen Standardlayout für die Sprache, die von der touchtastatur angezeigt wird.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.

Wenn Ihr IME eines der klassischen Layouts als bevorzugtes Layout festlegen muss, ist auf der IME-Seite keine zusätzliche Arbeit erforderlich, über die die Schnittstellen itffngetpreferredtouchkeyboardlayout und ITfFunctionProvider hinaus unterstützt werden.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. Im IME sind jedoch zusätzliche Arbeitsschritte erforderlich, um mit den Touchscreen-optimierten Layouts arbeiten zu können. Dies wird im nächsten Abschnitt beschrieben.But additional work is required in the IME to work with the touch-optimized layouts, and this is described in the next section.

Berührungs optimiertes LayoutTouch-optimized layout

Die touchoptimierten Tastaturen für die Eingabe Sprachen Koreanisch, Japanisch, Chinesisch (vereinfacht) und Chinesisch (traditionell) zeigen ein anderes Layout für den Konvertierungsmodus IME on und IME aus.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. Es gibt einen Schlüssel auf der Fingereingabe Tastatur, um den IME-Konvertierungsmodus auf ein oder aus festzulegen. der IME-Modus der Tastatur kann sich jedoch auch als Fokus Änderungen zwischen Bearbeitungs Steuerelementen ändern.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.

Die Fingerabdruck optimierten Tastatur für die Eingabe Sprachen Japanisch, Chinesisch (vereinfacht) und Chinesisch (traditionell) enthalten einen Schlüssel oder Schlüssel, den der IME verwendet, um durch Kandidaten Seiten zu navigieren.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. Für Japanisch und Chinesisch (vereinfacht) wird der Schlüssel der Kandidaten Seite im Fingerabdruck optimierten Layout angezeigt.For Japanese and Simplified Chinese, the candidate page key displays on the touch-optimized layout. Für Chinesisch (traditionell) gibt es separate Schlüssel für die vorherigen und nächsten Kandidaten Seiten.For Traditional Chinese, there are separate keys for the previous and next candidate pages.

Wenn diese Tasten gedrückt werden, ruft die Touchscreen-Tastatur die SendInput -Funktion auf, um die folgenden Unicode-Zeichen für den privaten Anwendungsbereich an die fokussierte Anwendung zu senden, die der IME abfangen und verarbeiten kann: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:

  • Nächste Seite (0xF 003) : wird gesendet, wenn der Schlüssel der Kandidaten Seite auf der Fingereingabe optimierten Tastatur für Japanisch und vereinfachtes Chinesisch gedrückt wird oder wenn der nächste Seiten Schlüssel auf der Touchscreen-Tastatur für traditionelles Chinesisch gedrückt wird.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.
  • Vorherige Seite (0xF 004) : wird gesendet, wenn entweder der Schlüssel der Kandidaten Seite zur gleichen Zeit wie die UMSCHALTTASTE auf der Touchscreen-Tastatur für Japanisch und vereinfachtes Chinesisch gedrückt wird oder wenn der vorherige Seiten Schlüssel auf der Touchscreen-optimierten Tastatur für traditionelles Chinesisch gedrückt wird.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.

Diese Zeichen werden als Unicode-Eingabe gesendet.These characters are sent as Unicode input. Im nächsten Abschnitt wird erläutert, wie die Zeichen Informationen in den Schlüsseln der Schlüsselereignis Senke extrahiert werden, die das Framework für den Text Dienst Framework empfängt.The next paragraph details how to extract the character information during the key event sink notifications that the Text Services Framework IME will receive. Diese Zeichen Werte werden nicht in einer Header Datei definiert, daher müssen Sie Sie in Ihrem Code definieren.These character values are not defined in any header file, so you will need to define them in your code.

Um Tastatureingaben abzufangen, muss sich der IME als Schlüsselereignis Senke registrieren.To intercept keyboard input, your IME must register as a key event sink. Bei Unicode-Eingaben, die mithilfe der SendInput-Funktion generiert werden, enthält der wParam-Parameter der ITF keyeventsink -Rückrufe (OnKeyDown, OnKeyUp, ontestkeydown, ontestkeyup) immer den virtuellen Schlüssel VK_PACKET und identifiziert das Zeichen nicht direkt.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.

Implementieren Sie die folgende-Rückruf Sequenz, um auf das Zeichen zuzugreifen: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;
}

Integration der IME-SucheIME search integration

Stellen Sie Benutzern Suchfunktionen über den Such Vertrag und die Integration in den Suchbereich bereit.Provide users with search features through the search contract and integration with the search pane.

Suchbereich und IME-Vorschläge
Suchbereich und IME-VorschlägeSearch pane and IME suggestions

Der Suchbereich ist ein zentraler Ort, an dem Benutzer Suchvorgänge für alle Ihre apps durchführen können.The search pane is a central location for users to perform searches across all of their apps. Für IME-Benutzer bietet Windows eine einzigartige Suchfunktion, mit der kompatible IMEs in Windows integriert werden kann, um eine höhere Effizienz und Benutzerfreundlichkeit zu erzielen.For IME users, Windows provides a unique search experience that lets compatible IMEs integrate with Windows for greater efficiency and usability.

Benutzer, die mit einem IME eingeben, der mit der Suche kompatibel ist, erhalten zwei wichtige Vorteile:Users who type with an IME that's compatible with search get two main benefits:

  • Nahtlose Interaktion zwischen dem IME und der Suchfunktion.Seamless interaction between the IME and the search experience. IME-Kandidaten werden Inline im Suchfeld angezeigt, ohne Suchvorschläge zu verwerfen.IME candidates are shown inline under the search box without occluding search suggestions. Der Benutzer kann die Tastatur verwenden, um zwischen dem Suchfeld, den IME-Konvertierungs Kandidaten und den Such Vorschlägen nahtlos zu navigieren.The user can use the keyboard to navigate seamlessly between the search box, the IME conversion candidates, and the search suggestions.
  • Schneller Zugriff auf relevante Ergebnisse und Vorschläge, die von Anwendungen bereitgestellt werden.Faster access to relevant results and suggestions provided by applications. Die APP verfügt über Zugriff auf alle aktuellen Konvertierungs Kandidaten, um relevantere Vorschläge bereitzustellen.The app has access to all current conversion candidates to provide more relevant suggestions. Um Suchvorschläge besser priorisieren zu können, werden die-Konvertierungen in der Reihenfolge ihrer Relevanz an Apps übergeben.To better prioritize search suggestions, conversions are given to apps in order of relevance. Benutzer suchen und wählen das gewünschte Ergebnis, ohne Sie zu überschreiben, indem Sie einfach phonetisch eingeben.Users find and select the result they want without converting, just by typing in phonetic.

Ein IME ist mit der integrierten Suchfunktion kompatibel, wenn die folgenden Kriterien erfüllt sind:An IME is compatible with the integrated search experience if it meets the following criteria:

Wenn Sie im Suchbereich aktiviert ist, wird ein kompatibles IME im uiless-Modus abgelegt und kann die Benutzeroberfläche nicht anzeigen.When activated in the search pane, a compatible IME is placed in UIless mode and can't show its UI. Stattdessen sendet Sie Konvertierungs Kandidaten an Windows, das Sie im Inline Kandidatenlisten-Steuerelement anzeigt, wie im vorherigen Screenshot dargestellt.Instead, it sends conversion candidates to Windows, which displays them in the inline candidate list control, as shown in the previous screenshot.

Außerdem sendet der IME Kandidaten, die zum Ausführen der aktuellen Suche verwendet werden sollen.Also, the IME sends candidates that should be used to run the current search. Diese Kandidaten können mit den Konvertierungs Kandidaten identisch sein, oder Sie können auf die Suche zugeschnitten werden.These candidates could be the same as the conversion candidates, or they could be tailored for search.

Gute Such Kandidaten erfüllen die folgenden Kriterien:Good search candidates meet the following criteria:

  • Kein Präfix überlappend.No prefix overlap. Beispielsweise sind 北京大学 and北京 redundant, da eins ein Präfix der anderen ist.For example, 北京大学 and北京 are redundant because one is a prefix of the other.
  • Keine redundanten Kandidaten.No redundant candidates. Jeder redundante Kandidat ist für die Suche nicht nützlich, da er nicht zum Filtern von Ergebnissen beiträgt.Any redundant candidate isn't useful for search because it doesn't help filter results. Beispielsweise entspricht jedes Ergebnis, das 北京大学 entspricht, auch 北京.For example, any result that matches 北京大学 also matches 北京.
  • Kein Vorhersage Kandidat, nur Konvertierung.No prediction candidate, only conversion. Wenn der Benutzer z. b. "be" eingibt, kann der IME 北 als Kandidat, aber nicht als 北京大学 zurückgeben.For example, if the user types "be", the IME can return 北 as a candidate, but not 北京大学. In der Regel sind Vorhersage Kandidaten zu restriktiv.Usually, prediction candidates are too restrictive.

IMEs, die die Kriterien nicht erfüllen, sind nicht auf die gleiche Weise wie andere Steuerelemente mit der Suchanzeige kompatibel und können die Benutzeroberflächen Integration und Such Kandidaten nicht nutzen.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 empfangen nur Abfragen, nachdem die Erstellung des Benutzers abgeschlossen ist.Apps receive queries only after the user has finished composing.

Wenn eine APP, die den Such Vertrag unterstützt, eine Abfrage empfängt, enthält das Abfrage Ereignis ein "querytextalternatives"-Array, das alle bekannten Alternativen enthält, die von der relevantesten (wahrscheinlichsten) bis zum am wenigsten relevanten (unwahrscheinlich) geordnet sind.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).

Wenn Alternativen bereitgestellt werden, sollte die APP jede Alternative als Abfrage behandeln und alle Ergebnisse zurückgeben, die einer der alternativen entsprechen.When alternatives are provided, the app should treat each alternative as a query and return all results that match any of the alternatives. Die APP sollte sich so Verhalten, als ob der Benutzer mehrere Abfragen gleichzeitig ausgegeben hätte, um im Grunde eine "oder"-Abfrage an den Dienst auszugeben, der die Ergebnisse liefert.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. Überlegungen zur Leistung beschränken apps häufig die Übereinstimmung auf zwischen 5 und 20 der relevantesten Alternativen.For performance considerations, apps often limit matching to between 5 and 20 of the most relevant alternatives.

Entwurfs Richtlinien für BenutzeroberflächenUI design guidelines

Alle IMEs müssen den in Entwerfen und Codieren von Windows-appsbeschriebenen Richtlinien für die Benutzer Leistung entsprechen.All IMEs must follow the user experience guidelines described in Design and code Windows apps.

Keine kurzfenster verwendenDon't use sticky windows

Ihre IME-Fenster sollten nur bei Bedarf angezeigt werden, und Sie sollten nicht ständig sichtbar sein.Your IME windows should appear only when needed, and they shouldn't be visible all the time. Wenn Benutzer nicht eingeben müssen, sollte IME Windows nicht angezeigt werden.When users don't need to type, IME windows shouldn't show. Das IME-Fenster darf kein voll Bildfenster sein.The IME window shouldn't be a full screen window. IME-Fenster sollten einander nicht überlappen.IME windows shouldn't overlap each other. Die Fenster sollten in einem Windows-Stil entworfen werden und die Benutzeroberflächen Skalierung befolgen.The windows should be designed in a Windows style and follow UI scaling.

IME-SymboleIME icons

Es gibt zwei Arten von IME-Symbolen, brandingsymbolen und Mode-Symbolen.There are two kinds of IME icons, branding icons and mode icons. Alle IME-Symbole müssen nur mit schwarz-und weißem Farben entworfen werden.All IME icons must be designed with black and white colors only. Die neuen IME-Symbole werden aus dem Glyphen Aussehen der Task leisten Symbole ausgeliehen.The new IME icons borrow from the glyphic look of the system tray icons. Dieser Stil wurde erstellt, sodass er von allen Sprachen dazu verwendet werden kann, die familiäre Darstellung zu ergänzen, während gleichzeitig voneinander unterschieden wird.This style has been created so all languages can use it to complement the familial look while also differentiating from each other.

Das Dateiformat für IME-Symbole ist ico.The file format for IME icons is ICO. Sie müssen die folgenden Symbolgrößen angeben.You must provide the following icon sizes.

  • 16x16 Pixel16x16 pixels
  • 20 x 20 Pixel20x20 pixels
  • 24 x 24 Pixel24x24 pixels
  • 32 x 32 Pixel32x32 pixels
  • 40 x 40 Pixel40x40 pixels
  • 48 x 48 Pixel48x48 pixels

Stellen Sie sicher, dass in allen Auflösungen 32-Bit-Symbole mit Alphakanal bereitgestellt werden.Ensure that 32-bit icons with alpha channel are provided in all resolutions.

IME-Marken Symbole werden durch ein weißes Feld definiert, in dem ein typografisches Symbol, das in einer modernen Schriftart gerendert wird, platziert wird.IME brand icons are defined by a white box in which a typographic glyph rendered in a modern typeface is placed. Jedes zu definierende Symbol wird von jedem Sprachteam ausgewählt.Each defining glyph is chosen by each language team. Das Symbol ist schwarz.The glyph is black. Das Feld enthält einen äußeren Strich von 1 Pixel in schwarz mit einer Deckkraft von 50%.The box includes an outer stroke of 1 pixel in black at 50% opacity. "Neue" Versionen werden durch eine abgerundete Ecke in der oberen linken Ecke des Felds definiert."New" versions are defined by a rounded corner in the upper left of the box.

Die Symbole des IME-Modus werden durch ein weißes typografisches Symbol in einer modernen Schriftart definiert, das einen äußeren Strich von 1 Pixel in schwarz mit einer Deckkraft von 50% enthält.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.

SymbolIcon BESCHREIBUNGDescription
Beispiel für das IME-Marken Symbol für traditionelles Chinesisch (changejie). Beispiel für das IME-Marken Symbol für traditionelles Chinesisch (changejie).Example IME brand icon for Traditional Chinese ChangeJie.
Beispiel für ein IME-Marken Symbol für traditionelles Chinesisch (New changejie). Beispiel für das IME-Marken Symbol für traditionelles Chinesisch (changejie).Example IME brand icon for Traditional Chinese ChangeJie.
Symbol für den chinesischen Modus Beispiel Symbol für den IME-Modus.Example IME mode icon.

Eigenes FensterOwned window

Um die Benutzeroberfläche des Kandidaten anzuzeigen, muss ein IME sein Fenster als Besitzer des Fensters festlegen, damit es über der derzeit ausgelaufenden App angezeigt werden kann.To display candidate UI, an IME must set its window to be owned-window, so it can display over the currently running app. Verwenden Sie die itfcontextview:: getwnd -Methode, um das Fenster abzurufen, das im Besitz von ist.Use the ITfContextView::GetWnd method to retrieve the window to own to. Wenn getwnd einen Fehler oder NULL-HWND zurückgibt, müssen Sie die GetFocus -Funktion aufrufen.If GetWnd returns an error or a NULLHWND, call the GetFocus function.

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

Interaktion des IME-Kandidaten Fensters mit hellen OberflächenIME candidate window interaction with light dismiss surfaces

Das Kündigungs Modell für Popup Fenster wird als "Light-verwerfen" bezeichnet, da es für einen Benutzer einfach ist, solche Fenster zu schließen.The dismissal model for popup windows is called "light dismiss" because it's easy for a user to close such windows. Damit IMEs im Windows-Interaktionsmodell ordnungsgemäß funktioniert, muss das IME-Fenster am Modell für das Licht verwerfen teilnehmen.For IMEs to function well in the Windows interaction model, the IME windows must participate in the light dismiss model.

Um an dem Modell für das einfache verwerfen teilzunehmen, muss Ihr IME mithilfe der NotifyWinEvent -Funktion oder einer ähnlichen Funktion drei neue Windows-Ereignisse aufwecken.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. Diese neuen Ereignisse lauten:These new events are:

  • EVENT_OBJECT_IME_SHOW -dieses Ereignis aus, wenn das IME sichtbar wird.EVENT_OBJECT_IME_SHOW - Raise this event when the IME becomes visible.
  • EVENT_OBJECT_IME_HIDE -dieses Ereignis aus, wenn das IME ausgeblendet ist.EVENT_OBJECT_IME_HIDE - Raise this event when the IME is hidden.
  • EVENT_OBJECT_IME_CHANGE : Dieses Ereignis wird beim Verschieben oder Ändern der Größe durch den IME erhöht.EVENT_OBJECT_IME_CHANGE - Raise this event when the IME moves or changes size.

Deklarieren der KompatibilitätDeclaring compatibility

IMEs deklarieren, dass Sie kompatibel sind, indem Sie die kategorieGUID_TFCAT_TIPCAP_IMMERSIVESUPPORT für Ihren IME mithilfe von ITF categorymgr:: registercategoryregistrieren.IMEs declare that they are compatible by registering the category GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT for their IME using ITfCategoryMgr::RegisterCategory.

Legen Sie den Standard-IME-Modus auf ein fest.Set the default IME mode to on

Wir bieten eine bessere Benutzeroberfläche für IMEs.We provide a better UX for IMEs.

Unterstützung der DPI-Skalierung für Desktop AnwendungenDPI scaling support for desktop applications

Die verbesserte Unterstützung für die DPI-Skalierung ermöglicht das Abfragen des deklarierten dpi-sesegradegradegradegradegradegradegradevorgangsEnhanced DPI scaling support enables querying the declared DPI awareness level of each desktop process to determine if it needs to scale the UI. In einem Szenario mit mehreren Monitoren skaliert Windows die Benutzeroberfläche entsprechend den verschiedenen DPI-Einstellungen auf den einzelnen Monitoren.In a multi-monitor scenario, Windows scales the UI appropriately for different DPI settings on each monitor.

Da Ihr IME im Kontext der einzelnen Anwendungsprozesse ausgeführt wird, sollten Sie keinen dpi-Kompatibilitäts Grad für Ihren IME deklarieren.Because your IME runs in the context of each application's process, you shouldn't declare a DPI awareness level for your IME. Dadurch wird sichergestellt, dass Ihr IME auf der dpi-Ebene des aktuellen Prozesses ausgeführt wird.This ensures that your IME runs at the DPI awareness level of the current process.

Um sicherzustellen, dass alle IME-Benutzeroberflächen Elemente eine Skalierungs Parität mit den Benutzeroberflächen Elementen des Prozesses aufweisen, in dem Sie ausführen, müssen Sie entsprechend auf verschiedene dpi-Werte reagieren.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.

Hinweis

Um die Parität mit neuen Desktop Anwendungen sicherzustellen, sollte Ihr IME pro Monitor – dpi-Erkennung unterstützen, sollte jedoch nicht eine Ebene von Bewusstsein selbst deklarieren.To ensure parity with new desktop applications, your IME should support per monitor–DPI awareness, but shouldn't declare a level of awareness itself. Das System bestimmt die entsprechenden Skalierungs Anforderungen in jedem Szenario.The system determines the appropriate scaling requirements in each scenario.

Ausführliche Informationen zu den Anforderungen für die DPI-Skalierung für Desktop Anwendungen finden Sie unter High dpi.For details about DPI scaling support requirements for Desktop applications, see High DPI.

IME-InstallationIME installation

Wenn Sie Ihre IME mithilfe von Microsoft Visual Studio erstellen, erstellen Sie eine Installations Benutzerfunktion für Ihren IME, indem Sie ein Drittanbieter-Installationsprogramm wie InstallShield von Flexera Software verwenden.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.

Die folgenden Schritte zeigen, wie Sie InstallShield verwenden, um ein Setup-Projekt für Ihre IME-DLL zu erstellen.The following steps show how to use InstallShield to create a setup project for your IME DLL.

  • Installieren von Visual Studio.Install Visual Studio.
  • Starten Sie Visual Studio.Start Visual Studio.
  • Zeigen Sie im Menü Datei auf neu , und wählen Sie Projektaus.On the File menu, point to New and select Project. Das Dialogfeld " Neues Projekt " wird geöffnet.The New Project dialog opens.
  • Navigieren Sie im linken Bereich zu Vorlagen > anderen Projekttypen > Setup und Bereitstellung, klicken Sie auf InstallShield Limited Edition aktivieren, und klicken Sie auf OK.In the left pane, navigate to Templates > Other Project Types > Setup and Deployment, click Enable InstallShield Limited Edition, and click OK. Befolgen Sie die Installationsanweisungen.Follow the installation instructions.
  • Starten Sie Visual Studio neu.Restart Visual Studio.
  • Öffnen Sie die IME-Projektmappendatei (. sln).Open the IME solution (.sln) file.
  • Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf die Projekt Mappe, zeigen Sie auf Hinzufügen, und wählen Sie Neues Projekt.In Solution Explorer, right-click the solution, point to Add, and select New Project. Das Dialogfeld Neues Projekt hinzufügen wird geöffnet.The Add New Project dialog opens.
  • Navigieren Sie im linken Strukturansicht-Steuerelement zu Vorlagen > anderen Projekttypen > InstallShield Limited Edition.In the left tree view control, navigate to Templates > Other Project Types > InstallShield Limited Edition.
  • Klicken Sie im mittleren Fenster auf InstallShield Limited Edition-Projekt.In the center window, click InstallShield Limited Edition Project.
  • Geben Sie im Textfeld Name den Namen "setupime" ein, und klicken Sie auf OK.In the Name text box, type "SetupIME" and click OK.
  • Klicken Sie im Dialogfeld Projekt-Assistent auf Anwendungsinformationen.In the Project Assistant dialog, click Application Information.
  • Geben Sie den Namen Ihres Unternehmens und die anderen Felder ein.Fill in your company name and the other fields.
  • Klicken Sie auf Anwendungs Dateien.Click Application Files.
  • Klicken Sie im linken Bereich mit der rechten Maustaste auf den Ordner [INSTALLDIR] , und wählen Sie neuer Ordneraus.In the left pane, right-click the [INSTALLDIR] folder, and select New Folder. Benennen Sie den Ordner "Plug-ins".Name the folder "Plugins".
  • Klicken Sie auf Dateien hinzufügen.Click Add Files. Navigieren Sie zu ihrer IME-DLL, und fügen Sie Sie dem Ordner Plug -in hinzu.Navigate to your IME DLL and add it to the Plugins folder. Wiederholen Sie diesen Schritt für das IME-Wörterbuch.Repeat this step for the IME dictionary.
  • Klicken Sie mit der rechten Maustaste auf die IME-DLL und wählen Sie EigenschaftenRight-click the IME DLL and select Properties. Das Dialogfeld Eigenschaften wird geöffnet.The Properties dialog opens.
  • Klicken Sie im Dialogfeld Eigenschaften auf die Registerkarte com & .NET-Einstellungen .In the Properties dialog, click the COM & .NET Settings tab.
  • Wählen Sie unter Registrierungstypdie Option Selbstregistrierung aus, und klicken Sie auf OK.Under Registration Type, select Self-registration and click OK.
  • Erstellen Sie die Projektmappe.Build the solution. Die IME-DLL wird erstellt, und InstallShield erstellt eine setup.exe-Datei, die es Benutzern ermöglicht, Ihr IME unter Windows zu installieren.The IME DLL is built, and InstallShield creates a setup.exe file that enables users to install your IME on Windows.

Um eine eigene Installationsumgebung zu erstellen, rufen Sie die itfinputprocessorprofilemgr:: registerprofile -Methode auf, um den IME während der Installation zu registrieren.To create your own installation experience, call the ITfInputProcessorProfileMgr::RegisterProfile method to register the IME during installation. Schreiben Sie Registrierungseinträge nicht direkt.Don't write registry entries directly.

Wenn der IME unmittelbar nach der Installation verwendet werden muss, müssen Sie installlayoutortip aufrufen, um den Benutzer fähigen Eingabemethoden den IME hinzuzufügen. verwenden Sie dabei das folgende Format für den PSZ-Parameter: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-BarrierefreiheitIME accessibility

Implementieren Sie die folgende Konvention, damit Ihre IMEs den Barrierefreiheits Anforderungen entsprechen und mit der Sprachausgabe arbeiten können.Implement the following convention to make your IMEs conform to the accessibility requirements and to work with Narrator. Damit Kandidatenlisten zugänglich gemacht werden können, müssen die IMEs dieser Konvention folgen.To make candidate lists accessible, your IMEs must follow this convention.

  • Die Kandidatenliste muss eine UIA_AutomationIdPropertyId gleich "IME_Candidate_Window" für Listen von Konvertierungs Kandidaten oder "IME_Prediction_Window" für Listen von Vorhersage Kandidaten haben.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.
  • Wenn die Kandidatenliste angezeigt und ausgeblendet wird, werden Ereignisse vom Typ " UIA_MenuOpenedEventId " und " UIA_MenuClosedEventId" ausgelöst.When the candidate list appears and disappears, it raises events of type UIA_MenuOpenedEventId and UIA_MenuClosedEventId, respectively
  • Wenn sich der aktuelle ausgewählte Kandidat ändert, löst die Kandidatenliste eine UIA_SelectionItem_ElementSelectedEventIdaus.When the current selected candidate changes, the candidate list raises a UIA_SelectionItem_ElementSelectedEventId. Für das ausgewählte Element sollte eine Eigenschaft UIA_SelectionItemIsSelectedPropertyId gleich truesein.The selected element should have a property UIA_SelectionItemIsSelectedPropertyId equal to TRUE.
  • Die UIA_NamePropertyId für jedes Element in der Kandidatenliste muss der Name des Kandidaten sein.The UIA_NamePropertyId for each item in the candidate list must be the name of the candidate. Optional können Sie zusätzliche Informationen bereitstellen, um Kandidaten über UIA_HelpTextPropertyIdzu unterscheiden.Optionally, you can provide additional information to disambiguate candidates through UIA_HelpTextPropertyId.