Requisitos del editor de métodos de entrada (IME) personalizadosCustom Input Method Editor (IME) requirements

Estas instrucciones y requisitos pueden ayudarle a desarrollar un editor de métodos de entrada (IME) personalizado para ayudar al usuario a escribir texto en un idioma que no se puede representar fácilmente en un teclado QWERTY estándar.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.

Para obtener información general sobre los IME, consulte Editor de métodos de entrada (IME).For an overview of IMEs, see Input Method Editor (IME).

IME predeterminadoDefault IME

Un usuario puede seleccionar cualquiera de sus IME activos ( configuración-> tiempo & idioma > Language-> idiomas preferidos-> paquete de idioma-opciones ) para que sea el IME predeterminado para su idioma preferido.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.

Configuración de idioma preferido

Seleccione el teclado predeterminado en la pantalla de configuración de opciones de idioma para el idioma preferido.Select the default keyboard on the Language options settings screen for the preferred language.

Teclado de idioma preferido

Importante

No se recomienda escribir directamente en el registro para establecer el teclado predeterminado para el IME personalizado.We do not recommend writing directly to the registry to set the default keyboard for your custom IME.

Requisitos de compatibilidadCompatibility requirements

A continuación se indican los requisitos de compatibilidad básicos para un IME personalizado.The following are the basic compatibility requirements for a custom IME.

El IME debe ser compatible con aplicaciones de WindowsIME must be compatible with Windows apps

Use el marco de trabajo de servicios de texto (TSF) para implementar los IME.Use the Text Services Framework (TSF) to implement IMEs. Anteriormente, tenía la opción de usar el Administrador de métodos de entrada (IMM32) para los servicios de entrada.Previously, you had the option of using the Input Method Manager (IMM32) for input services. Ahora el sistema bloquea los IME que se implementan mediante el administrador de métodos de entrada (IMM32).Now the system blocks IMEs that are implemented by using Input Method Manager (IMM32).

Cuando se inicia una aplicación, TSF carga el archivo DLL de IME para el IME seleccionado actualmente por el usuario.When an app starts, TSF loads the IME DLL for the IME that's currently selected by the user. Cuando se carga un IME, está sujeto a las mismas restricciones de contenedor de la aplicación que la aplicación.When an IME is loaded, it's subject to the same app container restrictions as the app. Por ejemplo, un IME no puede tener acceso a Internet si una aplicación no ha solicitado el acceso a Internet en su manifiesto.For example, an IME can't access the Internet if an app hasn't requested Internet access in its manifest. Este comportamiento garantiza que los IME no pueden infringir los contratos de seguridad.This behavior ensures that IMEs can't violate security contracts.

TSF es el intermediario entre la aplicación y el IME.TSF is the intermediary between the app and your IME. TSF comunica los eventos de entrada con el IME y recibe los caracteres de entrada del IME después de que el usuario haya seleccionado un carácter.TSF communicates input events to the IME and receives input characters back from the IME after the user has selected a character.

Este comportamiento es el mismo que el de las versiones anteriores de Windows, pero la carga en una aplicación de Windows afecta a las posibles capacidades de un 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.

Si el IME necesita proporcionar una funcionalidad o interfaz de usuario diferentes entre las aplicaciones de Windows y las aplicaciones de escritorio, asegúrese de que el archivo DLL que se carga mediante TSF comprueba en qué tipo de aplicación se está cargando.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. Llame al método ITfThreadMgrEx:: GetActiveFlags en el IME y Compruebe la marca TF_TMF_IMMERSIVEMODE, de modo que el IME desencadene una lógica de aplicación diferente en función del resultado.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.

Las aplicaciones de Windows no admiten los IME de servicio de texto de tabla (TTS).Windows apps do not support Table Text Service (TTS) IMEs.

Nota

Algunas herramientas para generar los IME de TTS producen IME marcados como malware por Windows.Some tools for generating TTS IMEs produce IMEs that are marked as malware by Windows.

El IME debe ser compatible con la bandeja del sistemaIME must be compatible with the system tray

No hay ninguna barra de idioma para hospedar los iconos del IME.There is no language bar to host IME icons. En su lugar, se muestra un indicador de entrada en la bandeja del sistema que indica la opción de entrada actual.Instead, an Input Indicator shows on the system tray that indicates the current input option. El indicador de entrada solo muestra el icono de personalización de marca del IME para indicar el IME que se está ejecutando actualmente.The Input Indicator shows only the IME branding icon to indicate the currently running IME. Además, hay un icono de modo IME que se muestra a la izquierda del icono de personalización de marca del IME para que los usuarios realicen el conmutador de modo IME que se usa con más frecuencia, como activar o desactivar el 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.

El indicador de entrada muestra el icono de personalización de marca del IME y el icono de modo solo para los IME compatibles.The Input Indicator shows the IME branding icon and mode icon only for compatible IMEs. Los IME que no son compatibles no tienen el icono de personalización de marca y el icono de modo mostrados en la bandeja del sistema.IMEs that aren't compatible don't have the branding icon and mode icon displayed in the system tray. En su lugar, el indicador de entrada muestra la abreviatura del idioma en lugar del icono de personalización de marca del IME.Instead, the Input Indicator shows the language abbreviation instead of the IME branding icon.

Almacene los iconos del IME en un archivo DLL o EXE, en lugar de un archivo. ico independiente.Store the IME icons in a DLL or EXE file, instead of a standalone .ico file. El diseño de los iconos del IME debe seguir las instrucciones descritas en la siguiente sección pautas de diseño de la interfaz de usuario.The design of IME icons must follow the guidelines described in the following UI design guidelines section.

Icono de personalización de marca IMEIME branding icon

El indicador de entrada obtiene el icono de personalización de marca del IME del archivo DLL del IME mediante el identificador de recurso definido por el IME cuando se registró en el sistema.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.

Icono de modo IMEIME mode icon

Es posible que algunos IME deban basarse en el indicador de entrada que se muestra en la bandeja del sistema para mostrar el icono del modo IME.Some IMEs may need to rely on the Input Indicator showing on the system tray to display the IME mode icon. En este caso, el IME pasa el icono del modo IME al indicador de entrada mediante GUID_LBI_INPUTMODE.In this case, the IME passes the IME mode icon to the Input Indicator by using GUID_LBI_INPUTMODE.

Al pasar los iconos del modo IME al indicador de entrada en la bandeja del sistema, el tamaño predeterminado del icono del modo IME es de 16 x 16 píxeles.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. El escalado de la interfaz de usuario sigue a DPI.The UI scaling follows DPI.

Al pasar el icono del modo IME al indicador de entrada en UAC (control de cuentas de usuario en el escritorio seguro), el tamaño predeterminado del icono del modo IME es 20x20 píxeles.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. El icono de escala de la interfaz de usuario para el modo IME en UAC sigue a PPI.The UI scaling for IME mode icon on UAC follows PPI.

El IME debe funcionar en el contenedor de la aplicaciónIME must work in app container

Algunas funciones de IME se ven afectadas en un contenedor de la aplicación.Some IME functions are affected in an app container.

  • Archivos de diccionario : con frecuencia, los IME tienen archivos de Diccionario de solo lectura para asignar la entrada del usuario a caracteres específicos.Dictionary Files - Frequently, IMEs have read-only dictionary files to map user input to specific characters. Para tener acceso a estos archivos desde dentro de un contenedor de la aplicación, el IME debe colocarlos en los directorios de Windows o los archivos de programa.To access these files from inside an app container, your IME must place them under the Program Files or Windows directories. De forma predeterminada, estos directorios se pueden leer desde un contenedor de la aplicación, por lo que los IME pueden acceder a los archivos de diccionario que se almacenan en estas ubicaciones.By default, these directories can be read from an app container, so IMEs can access dictionary files that are stored in these locations. Si el IME debe almacenar el archivo de diccionario en otro lugar, debe manipular explícitamente las listas de Access Control (ACL) de los archivos de diccionario para permitir el acceso desde los contenedores de la aplicación.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.
  • Actualización de Internet : Si el IME necesita actualizar sus diccionarios con datos de Internet, no puede hacerlo de manera confiable dentro de un contenedor de la aplicación, ya que no siempre se permite el acceso a Internet.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. En su lugar, el IME debe ejecutar un proceso de escritorio independiente que sea responsable de actualizar los archivos de diccionario con datos de Internet.Instead, your IME should run a separate desktop process that's responsible for updating the dictionary files with data from the Internet.
  • Aprendizaje sobre la marcha : Si un IME se está ejecutando en un contenedor de la aplicación que tiene acceso a Internet, no hay ninguna restricción en los puntos de conexión con los que el IME puede comunicarse.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. En este caso, un IME puede usar un servidor en la nube para proporcionar servicios de aprendizaje sobre la marcha.In this case, an IME can use a cloud server to provide on-the-fly learning services. Algunos IMEs descargan y cargan los datos proporcionados por el usuario sobre la marcha, mientras el usuario escribe.Some IMEs download and upload user input on the fly, while the user is typing. Dado que el acceso a Internet no está garantizado en un contenedor de la aplicación, es posible que no siempre se permita.Since Internet access is not guaranteed in an app container, this may not always be allowed.
  • Compartir información entre procesos : los IME pueden necesitar compartir datos sobre las preferencias de entrada del usuario entre las aplicaciones que se encuentran en contenedores de aplicaciones diferentes.Sharing information between processes - IMEs may need to share data about the user’s input preferences between apps that are in different app containers. Use un servicio web para compartir datos entre aplicaciones.Use a web service to share data between apps.

Importante

Si intenta eludir las reglas de seguridad del contenedor de la aplicación, el IME puede tratarse como malware y bloquearse.If you try to circumvent app container security rules, your IME may be treated as malware and blocked.

Teclado táctil y IMEIME and touch keyboard

El IME debe asegurarse de que la interfaz de usuario del panel candidato y otros elementos de la interfaz de usuario no se dibujen debajo del teclado táctil.Your IME must ensure that its candidate pane's UI, and other UI elements, aren't drawn underneath the touch keyboard. El teclado táctil se muestra en una banda de orden z superior a todas las aplicaciones y la interfaz de usuario del IME se muestra en la misma banda de orden z que la aplicación en la que está activa.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. Como resultado, el teclado táctil puede superponerse y ocultar la interfaz de usuario del IME.As a result, the touch keyboard can overlap and hide the IME UI. En la mayoría de los casos, la aplicación debe cambiar el tamaño de su ventana para que tenga en cuenta el teclado táctil.In most cases, the app should resize its window to account for the touch keyboard. Si una aplicación no cambia de tamaño, el IME todavía puede usar la API InputPane para obtener la posición del teclado táctil.If an app doesn't resize, the IME still can use the InputPane API to get the position of the touch keyboard. El IME consulta la propiedad Location o registra un controlador para los eventos de mostrar y ocultar del teclado táctil.The IME queries the Location property, or it registers a handler for the touch keyboard's Show and Hide events. El evento show se genera cada vez que el usuario pulsa en un campo de edición, incluso si se muestra el teclado táctil actualmente.The Show event is raised every time the user taps in an edit field, even if the touch keyboard is displayed currently. El IME puede usar esta API para obtener el espacio de pantalla que usa el teclado táctil antes de que el IME dibuje la interfaz de usuario candidata (u otra), y para redistribuir la interfaz de usuario de los IME para evitar dibujar debajo del teclado táctil.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.

Especificación de la distribución de teclado táctil preferidaSpecifying the preferred touch keyboard layout

El IME puede especificar la distribución del teclado táctil que se va a usar y el IME está habilitado para trabajar con diseños con optimización táctil.The IME can specify which touch keyboard layout to use, and the IME is enabled to work with touch-optimized layouts. Esta funcionalidad se limita a los IME para los idiomas de entrada Coreano, Japonés, Chino simplificado y chino tradicional.This functionality is limited to IMEs for the Korean, Japanese, Chinese Simplified, and Chinese Traditional input languages.

El teclado táctil admite siete diseños, tres de los cuales son diseños clásicos y cuatro de los cuales son diseños optimizados para Touch.There are seven layouts supported by the touch keyboard, three of which are classic layouts and four of which are touch-optimized layouts. Los diseños clásicos tienen el aspecto y se comportan como un teclado físico.The classic layouts look and behave like a physical keyboard.

Todos los tres diseños clásicos son para la entrada de chino tradicional en formas diferentes:All of the three classic layouts are for inputting traditional Chinese in different forms:

  • Entrada basada en fonéticaPhonetic-based input
  • Entrada changjieChangjie input
  • Entrada dayiDayi input

Además de los diseños clásicos, hay un diseño optimizado para toque para cada uno de los idiomas de entrada en Coreano, Japonés, Chino simplificado y chino tradicional.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.

Para usar esta funcionalidad, el IME debe implementar la interfaz ITfFnGetPreferredTouchKeyboardLayout , que se exporta mediante el IME mediante el uso de la API ITfFunctionProvider de Text Services Framework.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.

Si el IME no es compatible con la interfaz ITfFnGetPreferredTouchKeyboardLayout, el uso del IME da como resultado el diseño clásico predeterminado para el idioma que se muestra en el teclado táctil.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.

Si el IME necesita establecer uno de los diseños clásicos como diseño preferido, no se requiere ningún trabajo adicional en el lado del IME más allá de la compatibilidad con las interfaces ITfFnGetPreferredTouchKeyboardLayout y ITfFunctionProvider.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. Pero se requiere trabajo adicional en el IME para trabajar con los diseños optimizados para Touch y esto se describe en la sección siguiente.But additional work is required in the IME to work with the touch-optimized layouts, and this is described in the next section.

Diseño con optimización táctilTouch-optimized layout

Los teclados táctiles táctiles para los idiomas de entrada Coreano, Japonés, Chino simplificado y chino tradicional muestran un diseño diferente para los modos de conversión IME en y 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. Hay una tecla en el teclado táctil para establecer el modo de conversión de IME en activado o desactivado, pero el modo IME del teclado también puede cambiar a medida que cambia el foco entre los controles de edición.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.

Los teclados con optimización táctil para los idiomas de entrada japonés, Chino simplificado y chino tradicional contienen una clave, o claves, que el IME usa para navegar por las páginas candidatas.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. En el caso de japonés y chino simplificado, la clave de página candidata se muestra en el diseño con optimización táctil.For Japanese and Simplified Chinese, the candidate page key displays on the touch-optimized layout. En el caso de chino tradicional, existen claves independientes para las páginas candidatas anteriores y siguientes.For Traditional Chinese, there are separate keys for the previous and next candidate pages.

Cuando se presionan estas teclas, el teclado táctil llama a la función SendInput para enviar los siguientes caracteres de área de uso privado de Unicode a la aplicación con el foco, que el IME puede interceptar y actuar sobre: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:

  • Página siguiente (0xF003) : se envía cuando se presiona la tecla de página candidata en el teclado táctil optimizado para japonés y chino simplificado, o cuando se presiona la tecla de página siguiente en el teclado táctil optimizado para chino tradicional.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.
  • Página anterior (0xF004) : se envía cuando se presiona la tecla de página candidata al mismo tiempo que la tecla Mayús en el teclado táctil optimizado para japonés y chino simplificado, o cuando se presiona la tecla de página anterior en el teclado táctil optimizado para chino tradicional.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.

Estos caracteres se envían como entrada Unicode.These characters are sent as Unicode input. En el siguiente párrafo se detalla cómo extraer la información de caracteres durante las notificaciones de receptor de eventos clave que recibirá el IME de servicios de texto.The next paragraph details how to extract the character information during the key event sink notifications that the Text Services Framework IME will receive. Estos valores de caracteres no se definen en ningún archivo de encabezado, por lo que deberá definirlos en el código.These character values are not defined in any header file, so you will need to define them in your code.

Para interceptar la entrada de teclado, el IME debe registrarse como receptor de eventos de clave.To intercept keyboard input, your IME must register as a key event sink. Para la entrada Unicode que se genera mediante la función SendInput, el parámetro WPARAM de las devoluciones de llamada ITfKeyEventSink (onkeydown, onkeyup, OnTestKeyDown, OnTestKeyUp) siempre contiene la clave virtual VK_PACKET y no identifica el carácter directamente.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.

Implemente la siguiente secuencia de llamada para tener acceso al carácter: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;
}

Integración de la búsqueda de IMEIME search integration

Proporcione a los usuarios características de búsqueda a través del contrato de búsqueda y la integración con el panel de búsqueda.Provide users with search features through the search contract and integration with the search pane.

Panel de búsqueda y sugerencias de IME
Panel de búsqueda y sugerencias de IMESearch pane and IME suggestions

El panel de búsqueda es una ubicación central para que los usuarios realicen búsquedas en todas sus aplicaciones.The search pane is a central location for users to perform searches across all of their apps. En el caso de los usuarios de IME, Windows proporciona una experiencia de búsqueda única que permite que los IMEs compatibles se integren con Windows para mayor eficacia y facilidad de uso.For IME users, Windows provides a unique search experience that lets compatible IMEs integrate with Windows for greater efficiency and usability.

Los usuarios que escriben con un IME compatible con Search obtienen dos ventajas principales:Users who type with an IME that's compatible with search get two main benefits:

  • Interacción fluida entre el IME y la experiencia de búsqueda.Seamless interaction between the IME and the search experience. Los candidatos de IME se muestran en línea bajo el cuadro de búsqueda sin las sugerencias de búsqueda de occluding.IME candidates are shown inline under the search box without occluding search suggestions. El usuario puede usar el teclado para navegar sin problemas entre el cuadro de búsqueda, los candidatos para la conversión del IME y las sugerencias de búsqueda.The user can use the keyboard to navigate seamlessly between the search box, the IME conversion candidates, and the search suggestions.
  • Acceso más rápido a los resultados y sugerencias relevantes proporcionados por las aplicaciones.Faster access to relevant results and suggestions provided by applications. La aplicación tiene acceso a todos los candidatos de conversión actuales para proporcionar sugerencias más relevantes.The app has access to all current conversion candidates to provide more relevant suggestions. Para priorizar mejor las sugerencias de búsqueda, se proporcionan conversiones a las aplicaciones en orden de relevancia.To better prioritize search suggestions, conversions are given to apps in order of relevance. Los usuarios buscan y seleccionan el resultado que desean sin convertir, simplemente escribiendo en fonética.Users find and select the result they want without converting, just by typing in phonetic.

Un IME es compatible con la experiencia de búsqueda integrada si cumple los siguientes criterios:An IME is compatible with the integrated search experience if it meets the following criteria:

Cuando se activa en el panel de búsqueda, se coloca un IME compatible en modo UIless y no se puede mostrar su interfaz de usuario.When activated in the search pane, a compatible IME is placed in UIless mode and can't show its UI. En su lugar, envía candidatos de conversión a Windows, que los muestra en el control de lista de candidatos en línea, tal como se muestra en la captura de pantalla anterior.Instead, it sends conversion candidates to Windows, which displays them in the inline candidate list control, as shown in the previous screenshot.

Además, el IME envía candidatos que deben usarse para ejecutar la búsqueda actual.Also, the IME sends candidates that should be used to run the current search. Estos candidatos podrían ser los mismos que los candidatos de conversión, o bien se pueden personalizar para la búsqueda.These candidates could be the same as the conversion candidates, or they could be tailored for search.

Los buenos candidatos de búsqueda cumplen los criterios siguientes:Good search candidates meet the following criteria:

  • Sin superposición de prefijo.No prefix overlap. Por ejemplo, 北京大学 and北京 son redundantes porque uno es un prefijo del otro.For example, 北京大学 and北京 are redundant because one is a prefix of the other.
  • Sin candidatos redundantes.No redundant candidates. Cualquier candidato redundante no es útil para la búsqueda porque no ayuda a filtrar los resultados.Any redundant candidate isn't useful for search because it doesn't help filter results. Por ejemplo, cualquier resultado que coincida con 北京大学 también coincide con 北京.For example, any result that matches 北京大学 also matches 北京.
  • Ningún candidato de predicción, solo conversión.No prediction candidate, only conversion. Por ejemplo, si el usuario escribe "es", el IME puede devolver 北 como candidato, pero no 北京大学.For example, if the user types "be", the IME can return 北 as a candidate, but not 北京大学. Normalmente, los candidatos de predicción son demasiado restrictivos.Usually, prediction candidates are too restrictive.

Los IME que no cumplen los criterios no son compatibles con la presentación de la búsqueda de la misma manera que otros controles y no pueden aprovechar las ventajas de la integración de la interfaz de usuario y los candidatos de búsqueda.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. Las aplicaciones reciben consultas solo después de que el usuario haya terminado de redactarse.Apps receive queries only after the user has finished composing.

Cuando una aplicación que admite el contrato de búsqueda recibe una consulta, el evento de consulta contiene una matriz "queryTextAlternatives" que contiene todas las alternativas conocidas, clasificadas desde el más relevante (probablemente) hasta el menos relevante (improbable).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).

Cuando se proporcionan alternativas, la aplicación debe tratar cada alternativa como una consulta y devolver todos los resultados que coincidan con cualquiera de las alternativas.When alternatives are provided, the app should treat each alternative as a query and return all results that match any of the alternatives. La aplicación debe comportarse como si el usuario hubiera emitido varias consultas al mismo tiempo, en esencia emitir una consulta "or" para el servicio que proporciona los resultados.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. Por motivos de rendimiento, las aplicaciones a menudo limitan la coincidencia entre 5 y 20 de las alternativas más relevantes.For performance considerations, apps often limit matching to between 5 and 20 of the most relevant alternatives.

Directrices de diseño de la interfaz de usuarioUI design guidelines

Todos los IME deben seguir las instrucciones de experiencia del usuario que se describen en diseñar y codificar aplicaciones de Windows.All IMEs must follow the user experience guidelines described in Design and code Windows apps.

No use ventanas rápidasDon't use sticky windows

Las ventanas del IME deben aparecer solo cuando sea necesario y no deben ser visibles en todo momento.Your IME windows should appear only when needed, and they shouldn't be visible all the time. Cuando no es necesario que los usuarios escriban, las ventanas IME no deberían mostrarse.When users don't need to type, IME windows shouldn't show. La ventana del IME no debe ser una ventana de pantalla completa.The IME window shouldn't be a full screen window. Las ventanas IME no deben superponerse entre sí.IME windows shouldn't overlap each other. Las ventanas deben diseñarse en un estilo de Windows y seguir el escalado de la interfaz de usuario.The windows should be designed in a Windows style and follow UI scaling.

Iconos IMEIME icons

Hay dos tipos de iconos IME: iconos de personalización de marca e iconos de modo.There are two kinds of IME icons, branding icons and mode icons. Todos los iconos del IME deben diseñarse solo con colores negros y blancos.All IME icons must be designed with black and white colors only. Los nuevos iconos del IME prestados por la apariencia de glifo de los iconos de la bandeja del sistema.The new IME icons borrow from the glyphic look of the system tray icons. Este estilo se ha creado para que todos los lenguajes puedan usarlo para complementar la apariencia de familial mientras también se diferencian entre sí.This style has been created so all languages can use it to complement the familial look while also differentiating from each other.

El formato de archivo para los iconos IME es ICO.The file format for IME icons is ICO. Debe proporcionar los siguientes tamaños de icono.You must provide the following icon sizes.

  • 16x16 píxeles16x16 pixels
  • 20x20 píxeles20x20 pixels
  • 24x24 píxeles24x24 pixels
  • 32x32 píxeles32x32 pixels
  • 40 x 40 píxeles40x40 pixels
  • 48x48 píxeles48x48 pixels

Asegúrese de que los iconos de 32 bits con canal alfa se proporcionan en todas las resoluciones.Ensure that 32-bit icons with alpha channel are provided in all resolutions.

Los iconos de la marca IME se definen mediante un cuadro blanco en el que se coloca un glifo tipográfico representado en un tipo de letra moderno.IME brand icons are defined by a white box in which a typographic glyph rendered in a modern typeface is placed. Cada equipo de lenguaje elige cada glifo de definición.Each defining glyph is chosen by each language team. El glifo es negro.The glyph is black. El cuadro incluye un trazo exterior de 1 píxel en negro con una opacidad del 50%.The box includes an outer stroke of 1 pixel in black at 50% opacity. Las versiones "nuevas" se definen mediante una esquina redondeada en la parte superior izquierda del cuadro."New" versions are defined by a rounded corner in the upper left of the box.

Los iconos del modo IME se definen mediante un glifo tipográfico blanco en un tipo de letra moderno que incluye un trazo exterior de 1 píxel en negro con una opacidad del 50%.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.

IconoIcon DescripciónDescription
Ejemplo de icono de marca IME para chino tradicional ChangeJie. Ejemplo de icono de marca IME para chino tradicional ChangeJie.Example IME brand icon for Traditional Chinese ChangeJie.
Ejemplo de icono de marca IME para chino tradicional nuevo ChangeJie. Ejemplo de icono de marca IME para chino tradicional ChangeJie.Example IME brand icon for Traditional Chinese ChangeJie.
Icono de modo chino Icono de modo IME de ejemplo.Example IME mode icon.

Ventana propiedadOwned window

Para mostrar la interfaz de usuario candidata, un IME debe establecer su ventana como ventana de propiedad, de modo que se pueda mostrar sobre la aplicación que se está ejecutando actualmente.To display candidate UI, an IME must set its window to be owned-window, so it can display over the currently running app. Use el método ITfContextView:: GetWnd para recuperar la ventana a la que pertenece.Use the ITfContextView::GetWnd method to retrieve the window to own to. Si GetWnd devuelve un error o un NULLHWND, llame a la función GetFocus .If GetWnd returns an error or a NULLHWND, call the GetFocus function.

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

Interacción de la ventana de candidato de IME con superficies de descartado claroIME candidate window interaction with light dismiss surfaces

El modelo descartable para ventanas emergentes se denomina "descartar luz" porque es fácil para un usuario cerrar dichas ventanas.The dismissal model for popup windows is called "light dismiss" because it's easy for a user to close such windows. Para que los IME funcionen bien en el modelo de interacción de Windows, las ventanas del IME deben participar en el modelo de descartación ligera.For IMEs to function well in the Windows interaction model, the IME windows must participate in the light dismiss model.

Para participar en el modelo de descartado de luz, el IME debe generar tres nuevos eventos de Windows mediante la función NotifyWinEvent o una función similar.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. Estos nuevos eventos son:These new events are:

  • EVENT_OBJECT_IME_SHOW : genera este evento cuando el IME se vuelve visible.EVENT_OBJECT_IME_SHOW - Raise this event when the IME becomes visible.
  • EVENT_OBJECT_IME_HIDE : genera este evento cuando el IME está oculto.EVENT_OBJECT_IME_HIDE - Raise this event when the IME is hidden.
  • EVENT_OBJECT_IME_CHANGE : genera este evento cuando el IME se mueve o cambia de tamaño.EVENT_OBJECT_IME_CHANGE - Raise this event when the IME moves or changes size.

Declarar compatibilidadDeclaring compatibility

Los IME declaran que son compatibles registrando la categoría GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT para su IME mediante ITfCategoryMgr:: RegisterCategory.IMEs declare that they are compatible by registering the category GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT for their IME using ITfCategoryMgr::RegisterCategory.

Establecer el modo IME predeterminado en activadoSet the default IME mode to on

Proporcionamos una mejor experiencia de usuario para los IME.We provide a better UX for IMEs.

Compatibilidad de escala de PPP para aplicaciones de escritorioDPI scaling support for desktop applications

La compatibilidad mejorada con el escalado de PPP permite consultar el nivel de reconocimiento de PPP declarado de cada proceso del escritorio para determinar si es necesario escalar la interfaz de usuario.Enhanced DPI scaling support enables querying the declared DPI awareness level of each desktop process to determine if it needs to scale the UI. En un escenario de varios monitores, Windows escala la interfaz de usuario de forma adecuada para diferentes configuraciones de PPP en cada monitor.In a multi-monitor scenario, Windows scales the UI appropriately for different DPI settings on each monitor.

Dado que el IME se ejecuta en el contexto del proceso de cada aplicación, no debe declarar un nivel de reconocimiento de PPP para el IME.Because your IME runs in the context of each application's process, you shouldn't declare a DPI awareness level for your IME. Esto garantiza que el IME se ejecute en el nivel de reconocimiento de PPP del proceso actual.This ensures that your IME runs at the DPI awareness level of the current process.

Para asegurarse de que todos los elementos de la interfaz de usuario de IME tienen paridad de escalado con los elementos de la interfaz de usuario del proceso en el que se ejecuta, debe responder adecuadamente a distintos valores de PPP.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.

Nota

Para garantizar la paridad con nuevas aplicaciones de escritorio, el IME debe admitir el reconocimiento de PPP por monitor, pero no debe declarar un nivel de conocimiento.To ensure parity with new desktop applications, your IME should support per monitor–DPI awareness, but shouldn't declare a level of awareness itself. El sistema determina los requisitos de escalado adecuados en cada escenario.The system determines the appropriate scaling requirements in each scenario.

Para más información sobre los requisitos de compatibilidad de escala de PPP para las aplicaciones de escritorio, consulte alta resolución de PPP.For details about DPI scaling support requirements for Desktop applications, see High DPI.

Instalación de IMEIME installation

Si compila el IME mediante Microsoft Visual Studio, cree una experiencia de instalación para el IME mediante el uso de un instalador de terceros, como InstallShield de Flexera software.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.

En los pasos siguientes se muestra cómo usar InstallShield para crear un proyecto de instalación para el archivo DLL de IME.The following steps show how to use InstallShield to create a setup project for your IME DLL.

  • Instale Visual Studio.Install Visual Studio.
  • Inicie Visual Studio.Start Visual Studio.
  • En el menú archivo , elija nuevo y seleccione proyecto .On the File menu, point to New and select Project . Se abre el cuadro de diálogo Nuevo proyecto .The New Project dialog opens.
  • En el panel izquierdo, vaya a plantillas > otros tipos de proyectos > instalación e implementación , haga clic en Habilitar InstallShield Limited Edition y, a continuación, haga clic en Aceptar .In the left pane, navigate to Templates > Other Project Types > Setup and Deployment , click Enable InstallShield Limited Edition , and click OK . Siga las instrucciones de instalación.Follow the installation instructions.
  • Reinicie Visual Studio.Restart Visual Studio.
  • Abra el archivo de solución de IME (. sln).Open the IME solution (.sln) file.
  • En Explorador de soluciones, haga clic con el botón secundario en la solución, seleccione Agregar y, a continuación, seleccione nuevo proyecto .In Solution Explorer, right-click the solution, point to Add , and select New Project . Se abre el cuadro de diálogo Agregar nuevo proyecto .The Add New Project dialog opens.
  • En el control de vista de árbol izquierdo, vaya a plantillas > otros tipos de proyectos > InstallShield Limited Edition .In the left tree view control, navigate to Templates > Other Project Types > InstallShield Limited Edition .
  • En la ventana central, haga clic en proyecto de InstallShield Limited Edition .In the center window, click InstallShield Limited Edition Project .
  • En el cuadro de texto nombre , escriba "SetupIME" y haga clic en Aceptar .In the Name text box, type "SetupIME" and click OK .
  • En el cuadro de diálogo Asistente para proyectos , haga clic en información de la aplicación .In the Project Assistant dialog, click Application Information .
  • Rellene el nombre de la empresa y los demás campos.Fill in your company name and the other fields.
  • Haga clic en archivos de aplicación .Click Application Files .
  • En el panel izquierdo, haga clic con el botón secundario en la carpeta [INSTALLDIR] y seleccione nueva carpeta .In the left pane, right-click the [INSTALLDIR] folder, and select New Folder . Asigne a la carpeta el nombre "plugins".Name the folder "Plugins".
  • Haga clic en Agregar archivos .Click Add Files . Desplácese hasta el archivo DLL de IME y agréguelo a la carpeta plugins .Navigate to your IME DLL and add it to the Plugins folder. Repita este paso para el Diccionario IME.Repeat this step for the IME dictionary.
  • Haga clic con el botón secundario en el archivo DLL de IME y seleccione propiedades .Right-click the IME DLL and select Properties . Se abrirá el cuadro de diálogo propiedades .The Properties dialog opens.
  • En el cuadro de diálogo propiedades , haga clic en la pestaña configuración de com & .net .In the Properties dialog, click the COM & .NET Settings tab.
  • En tipo de registro , seleccione auto-registro y haga clic en Aceptar .Under Registration Type , select Self-registration and click OK .
  • Compile la solución.Build the solution. La DLL de IME se compila y InstallShield crea un archivo setup.exe que permite a los usuarios instalar el IME en Windows.The IME DLL is built, and InstallShield creates a setup.exe file that enables users to install your IME on Windows.

Para crear su propia experiencia de instalación, llame al método ITfInputProcessorProfileMgr:: RegisterProfile para registrar el IME durante la instalación.To create your own installation experience, call the ITfInputProcessorProfileMgr::RegisterProfile method to register the IME during installation. No escriba directamente entradas del registro.Don't write registry entries directly.

Si el IME debe ser utilizable inmediatamente después de la instalación, llame a InstallLayoutOrTip para agregar el IME a los métodos de entrada habilitados para el usuario, con el siguiente formato para el parámetro PSZ: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}

Accesibilidad de IMEIME accessibility

Implemente la Convención siguiente para que sus IME cumplan los requisitos de accesibilidad y para trabajar con el narrador.Implement the following convention to make your IMEs conform to the accessibility requirements and to work with Narrator. Para que se pueda acceder a las listas de candidatos, los IME deben seguir esta Convención.To make candidate lists accessible, your IMEs must follow this convention.

  • La lista de candidatos debe tener un UIA_AutomationIdPropertyId igual a "IME_Candidate_Window" para las listas de candidatos de conversión o "IME_Prediction_Window" para las listas de candidatos de predicción.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.
  • Cuando aparece y desaparece la lista de candidatos, genera eventos de tipo UIA_MenuOpenedEventId y UIA_MenuClosedEventId , respectivamente.When the candidate list appears and disappears, it raises events of type UIA_MenuOpenedEventId and UIA_MenuClosedEventId , respectively
  • Cuando cambia el candidato seleccionado actualmente, la lista de candidatos genera una UIA_SelectionItem_ElementSelectedEventId .When the current selected candidate changes, the candidate list raises a UIA_SelectionItem_ElementSelectedEventId . El elemento seleccionado debe tener una propiedad UIA_SelectionItemIsSelectedPropertyId igual a true .The selected element should have a property UIA_SelectionItemIsSelectedPropertyId equal to TRUE .
  • El UIA_NamePropertyId de cada elemento de la lista de candidatos debe ser el nombre del candidato.The UIA_NamePropertyId for each item in the candidate list must be the name of the candidate. Opcionalmente, puede proporcionar información adicional para eliminar la ambigüedad de los candidatos a través de UIA_HelpTextPropertyId .Optionally, you can provide additional information to disambiguate candidates through UIA_HelpTextPropertyId .