Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Estas directrices y requisitos pueden ayudarle a desarrollar un Editor de métodos de entrada (IME) personalizado para ayudar a un usuario a escribir texto en un idioma que no se pueda representar fácilmente en un teclado QWERTY estándar.
Para obtener información general sobre las IME, consulte Editor de métodos de entrada (IME).
IME predeterminado
Un usuario puede seleccionar cualquiera de sus IME activos (Configuración -> Hora e Idioma - Idioma ->> Idiomas preferidos -> Paquete de idioma - Opciones) para ser el IME predeterminado para su idioma preferido.
Seleccione el teclado predeterminado en la pantalla Configuración de opciones de idioma para el idioma preferido.
Importante
No se recomienda escribir directamente en el Registro para establecer el teclado predeterminado para su IME personalizado.
Requisitos de compatibilidad
A continuación se muestran los requisitos de compatibilidad básicos para un IME personalizado.
IME debe ser compatible con aplicaciones de Windows
Usa el Text Services Framework (TSF) para implementar los IME. Anteriormente, tenía la opción de usar el Administrador de métodos de entrada (IMM32) para los servicios de entrada. Ahora el sistema bloquea las IME que se implementan mediante el Administrador de métodos de entrada (IMM32).
Cuando se inicia una aplicación, TSF carga el archivo DLL de IME para el IME seleccionado actualmente por el usuario. Cuando se carga un IME, está sujeto a las mismas restricciones de contenedor de aplicaciones que la aplicación. Por ejemplo, un IME no puede acceder a Internet si una aplicación no ha solicitado acceso a Internet en su manifiesto. Este comportamiento garantiza que los IME no puedan infringir los contratos de seguridad.
TSF es el intermediario entre la aplicación y el IME. TSF comunica los eventos de entrada al IME y recibe del IME los caracteres después de que el usuario selecciona uno.
Este comportamiento es el mismo que las versiones anteriores de Windows, pero la carga en una aplicación de Windows afecta a las posibles funcionalidades de un IME.
Si su IME necesita proporcionar una funcionalidad o interfaz de usuario diferentes entre aplicaciones de Windows y aplicaciones de escritorio, asegúrese de que el archivo DLL cargado por TSF comprueba en qué tipo de aplicación se carga. Llame al método ITfThreadMgrEx::GetActiveFlags en su IME y compruebe la marca TF_TMF_IMMERSIVEMODE, por lo que el IME desencadena una lógica de aplicación diferente en función del resultado.
Las aplicaciones de Windows no admiten IME de Table Text Service (TTS).
Nota:
Algunas herramientas para generar IME de TTS producen IME marcados como malware por Windows.
IME debe ser compatible con la bandeja del sistema
No hay ninguna barra de idioma para hospedar iconos IME. En su lugar, se muestra un indicador de entrada en la bandeja del sistema que indica la opción de entrada actual. El indicador de entrada muestra solo el icono de marca de IME para indicar el IME que se está ejecutando actualmente. Además, hay un icono de modo IME que se muestra a la izquierda del icono de marca del IME para que los usuarios realicen el cambio de modo IME más comúnmente usado, como encender o apagar el IME.
El indicador de entrada muestra el icono de marca de IME y el icono de modo solo para IMEs compatibles. 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. En su lugar, el indicador de entrada muestra la abreviatura de idioma en lugar del icono de personalización de marca de IME.
Almacene los iconos IME en un archivo DLL o EXE, en lugar de un archivo .ico independiente. El diseño de iconos de IME debe seguir las instrucciones descritas en la siguiente sección directrices de diseño de la interfaz de usuario.
Icono de personalización de marca de IME
El Indicador de Entrada obtiene el icono de marca del IME del archivo DLL del IME mediante el identificador de recurso definido por el IME cuando se registró en el sistema.
Icono del modo IME
Es posible que algunas IME necesiten confiar en el indicador de entrada que se muestra en la bandeja del sistema para mostrar el icono del modo IME. En este caso, el IME pasa el icono de modo IME al indicador de entrada mediante GUID_LBI_INPUTMODE.
Al pasar los iconos del modo IME al indicador de entrada de la bandeja del sistema, el tamaño predeterminado del icono del modo IME es de 16 x 16 píxeles. El escalado de la interfaz de usuario sigue PPP.
Al pasar el icono del modo IME al indicador de entrada en UAC (control de cuentas de usuario en Escritorio seguro), el tamaño predeterminado del icono del modo IME es de 20 x 20 píxeles. El escalado de la IU para el icono del modo IME en UAC se ajusta a la PPI.
IME debe funcionar en el contenedor de aplicaciones
Algunas funciones de IME se ven afectadas en un contenedor de aplicaciones.
- Archivos de diccionario : con frecuencia, los IME tienen archivos de diccionario de solo lectura para asignar entradas de usuario a caracteres específicos. Para acceder a estos archivos desde dentro de un contenedor de aplicaciones, el IME debe colocarlos en los directorios Archivos de programa o Windows. De forma predeterminada, estos directorios se pueden leer desde un contenedor de aplicaciones, por lo que los IME pueden acceder a los archivos de diccionario que se almacenan en estas ubicaciones. Si su IME debe almacenar el archivo de diccionario en otro lugar, debe manipular explícitamente las listas de control de acceso (ACL) de los archivos de diccionario para permitir el acceso desde contenedores de aplicaciones.
- Actualización de Internet : si su IME necesita actualizar sus diccionarios mediante datos de Internet, no puede hacerlo de forma confiable dentro de un contenedor de aplicaciones, ya que el acceso a Internet no siempre está permitido. En su lugar, el IME debe ejecutar un proceso de escritorio independiente responsable de actualizar los archivos de diccionario con datos de Internet.
- Aprendizaje sobre la marcha : si un IME se ejecuta en un contenedor de aplicaciones que tiene acceso a Internet, no hay ninguna restricción en los puntos de conexión con los que el IME puede comunicarse. En este caso, un IME puede usar un servidor en la nube para proporcionar servicios de aprendizaje sobre la marcha. Algunos IME descargan y cargan la entrada del usuario sobre la marcha, mientras el usuario está escribiendo. Dado que no se garantiza el acceso a Internet en un contenedor de aplicaciones, es posible que esto no siempre se permita.
- Compartir información entre procesos : es posible que los IME necesiten compartir datos sobre las preferencias de entrada del usuario entre aplicaciones que se encuentran en distintos contenedores de aplicaciones. Use un servicio web para compartir datos entre aplicaciones.
Importante
Si intenta eludir las reglas de seguridad del contenedor de aplicaciones, el IME puede ser tratado como malware y bloqueado.
IME y teclado táctil
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. El teclado táctil se muestra en una banda de orden z superior a todas las aplicaciones, y la interfaz de usuario de IME se muestra en la misma banda de orden z que la aplicación en la que está activa. Como resultado, el teclado táctil se puede superponer y ocultar la interfaz de usuario de IME. En la mayoría de los casos, la aplicación debe cambiar el tamaño de su ventana para tener en cuenta el teclado táctil. Si una aplicación no cambia el tamaño, el IME todavía puede usar la API InputPane para obtener la posición del teclado táctil. El IME consulta la propiedad Location o registra un controlador para los eventos Show y Hide del teclado táctil. El evento Show se genera cada vez que el usuario pulsa en un campo de edición, incluso si el teclado táctil se muestra actualmente. Su IME puede usar esta API para obtener el espacio de pantalla utilizado por el teclado táctil antes de que el IME dibuje la interfaz de usuario candidata (u otra), y para reajustar la interfaz de usuario del IME y así evitar dibujarla debajo del teclado táctil.
Especificar el diseño de teclado táctil preferido
El IME puede especificar qué diseño de teclado táctil se va a usar y el IME está habilitado para trabajar con diseños optimizados para táctiles. Esta funcionalidad se limita a los IME para los idiomas de entrada coreano, japonés, chino simplificado y chino tradicional.
Hay siete diseños compatibles con el teclado táctil, tres de los cuales son diseños clásicos y cuatro de los cuales son diseños optimizados para toques. Los diseños clásicos se ven y se comportan como un teclado físico.
Los tres diseños clásicos son para introducir chino tradicional en diferentes formas:
- Entrada basada en fonética
- Entrada de Changjie
- Entrada Dayi
Además de los diseños clásicos, hay un diseño optimizado para toques para cada uno de los idiomas de entrada coreano, japonés, chino simplificado y chino tradicional.
Para usar esta funcionalidad, el IME debe implementar la interfaz ITfFnGetPreferredTouchKeyboardLayout, que es exportada por el IME mediante la API ITfFunctionProvider del Text Services Framework.
Si su IME no admite la interfaz ITfFnGetPreferredTouchKeyboardLayout, el uso de IME da como resultado el diseño clásico predeterminado para el idioma que muestra el teclado táctil.
Si su IME necesita establecer uno de los diseños clásicos como diseño preferido, no se requiere ningún trabajo adicional en el lado IME más allá de admitir las interfaces ITfFnGetPreferredTouchKeyboardLayout e ITfFunctionProvider. Pero se requiere trabajo adicional en el IME para trabajar con los diseños optimizados para toques, y esto se describe en la sección siguiente.
Diseño optimizado para toques
Los teclados optimizados para toques 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 On e IME Off. 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 como cambios de foco entre los controles de edición.
Los teclados optimizados para toques para los idiomas de entrada japonés, chino simplificado y chino tradicional contienen una tecla, o teclas, que el IME usa para navegar por las páginas candidatas. Para japonés y chino simplificado, la clave de página candidata se muestra en el diseño optimizado para pantallas táctiles. Para chino tradicional, hay claves independientes para las páginas candidatas anteriores y siguientes.
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 Unicode a la aplicación centrada, en la que el IME puede interceptar y actuar:
- Página siguiente (0xF003): se envía cuando se presiona la tecla de página candidata en el teclado optimizado para toques para chino simplificado y japonés, o cuando se presiona la tecla de página siguiente en el teclado optimizado para toques para chino tradicional.
- 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 optimizado para toques para japonés y chino simplificado, o cuando se presiona la tecla de página anterior en el teclado optimizado para entrada táctil para chino tradicional.
Estos caracteres se envían como entrada Unicode. En el párrafo siguiente se detalla cómo extraer la información de caracteres durante las notificaciones del receptor de eventos clave que recibirá el IME de Text Services Framework. Estos valores de carácter no se definen en ningún archivo de encabezado, por lo que deberá definirlos en el código.
Para interceptar la entrada del teclado, el IME debe registrarse como receptor de eventos de teclado. 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.
Implemente la siguiente secuencia de llamadas para acceder al carácter:
// 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 búsqueda de IME
Proporcione a los usuarios características de búsqueda a través del contrato de búsqueda e integración con el panel de búsqueda.
Sugerencias del panel de búsqueda e IME
El panel de búsqueda es una ubicación central para que los usuarios realicen búsquedas en todas sus aplicaciones. Para los usuarios de IME, Windows proporciona una experiencia de búsqueda única que permite que los IME compatibles se integren con Windows para mejorar la eficacia y la facilidad de uso.
Los usuarios que escriben con un IME compatible con la búsqueda obtienen dos ventajas principales:
- Interacción perfecta entre el IME y la experiencia de búsqueda. Los candidatos de IME se muestran en línea debajo del cuadro de búsqueda sin que se oculten las sugerencias de búsqueda. El usuario puede usar el teclado para navegar sin problemas entre el cuadro de búsqueda, los candidatos de conversión de IME y las sugerencias de búsqueda.
- Acceso más rápido a los resultados y sugerencias pertinentes proporcionados por las aplicaciones. La aplicación tiene acceso a todos los candidatos de conversión actuales para proporcionar sugerencias más relevantes. Para priorizar mejor las sugerencias de búsqueda, las conversiones se proporcionan a las aplicaciones en orden de relevancia. Los usuarios buscan y seleccionan el resultado que desean sin convertir, simplemente escribiendo fonéticamente.
Un IME es compatible con la experiencia de búsqueda integrada si cumple los siguientes criterios:
- Compatible con el shell de estilo de Windows.
- Implemente las API de modo UILess de TSF. Para obtener más información, consulta Información general sobre el modo sin interfaz de usuario.
- Implemente las API de integración de búsqueda de TSF, ITfFnSearchCandidateProvider e ITfIntegratableCandidateListUIElement.
Cuando se activa en el panel de búsqueda, un IME compatible se coloca en modo sin interfaz de usuario y no puede mostrar su interfaz de usuario. En su lugar, envía candidatos de conversión a Windows, que los muestra en el control de lista de candidatos en línea, como se muestra en la captura de pantalla anterior.
Además, el IME envía candidatos que se deben usar para ejecutar la búsqueda actual. Estos candidatos podrían ser los mismos que los candidatos de conversión, o podrían adaptarse a la búsqueda.
Los buenos candidatos de búsqueda cumplen los siguientes criterios:
- Ningún prefijo se superpone. Por ejemplo, 北京学 y北京 son redundantes porque uno es un prefijo del otro.
- No hay candidatos redundantes. Cualquier candidato redundante no es útil para la búsqueda porque no ayuda a filtrar los resultados. Por ejemplo, cualquier resultado que coincida con 北京大学 también coincide con 北京.
- Sin candidato de predicción, solo conversión. Por ejemplo, si el usuario escribe "be", el IME puede devolver 北 como candidato, pero no Universidad de Pekín. Normalmente, los candidatos para la predicción son demasiado limitantes.
Las IME que no cumplen los criterios no son compatibles con la presentación de búsqueda de la misma manera que otros controles y no pueden aprovechar la integración de la interfaz de usuario y los candidatos de búsqueda. Las aplicaciones reciben consultas solo después de que el usuario haya terminado de redactar.
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 de la más relevante (probable) a menos relevante (poco probable).
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. La aplicación debe comportarse como si el usuario hubiera emitido varias consultas al mismo tiempo, básicamente emitiendo una consulta "o" al servicio proporcionando los resultados. Por consideraciones de rendimiento, las aplicaciones suelen limitar la coincidencia a entre 5 y 20 de las alternativas más relevantes.
Directrices de diseño de la interfaz de usuario
Todos los IME deben seguir las directrices de experiencia del usuario descritas en Diseño y código de aplicaciones de Windows.
No usar ventanas pegajosas
Las ventanas de IME solo deben aparecer cuando sea necesario y no deberían estar visibles todo el tiempo. Cuando los usuarios no necesitan escribir, las ventanas IME no deben mostrarse. La ventana IME no debe ser una ventana de pantalla completa. Las ventanas IME no se deben superponer entre sí. Las ventanas deben diseñarse en un estilo de Windows y seguir el escalado de la interfaz de usuario.
Iconos de IME
Hay dos tipos de iconos IME, iconos de personalización de marca e iconos de modo. Todos los iconos IME solo deben diseñarse con colores negros y blancos. Los nuevos iconos de IME se inspiran en el estilo de glifo de los iconos de la bandeja del sistema. Este estilo se ha creado para que todos los lenguajes puedan usarlo para complementar la apariencia familiar, al mismo tiempo que diferencian entre sí.
El formato de archivo para los iconos de IME es ICO. Debe proporcionar los siguientes tamaños de icono.
- 16 x 16 píxeles
- 20 x 20 píxeles
- 24 x 24 píxeles
- 32x32 píxeles
- 40 x 40 píxeles
- 48 x 48 píxeles
Asegúrese de que los iconos de 32 bits con el canal alfa se proporcionan en todas las resoluciones.
Los iconos de marca IME se definen mediante un cuadro blanco en el que se coloca un glifo tipográfico representado en una tipografía moderna. Cada equipo de idioma elige cada glifo de definición. El glifo es negro. La caja incluye un trazo exterior de 1 píxel en negro con un 50 % de opacidad. Las versiones "nuevas" se definen mediante una esquina redondeada en la parte superior izquierda del cuadro.
Los iconos de modo IME se definen mediante un glifo tipográfico blanco en una letra moderna que incluye un trazo exterior de 1 píxel en negro a 50% opacidad.
| Icon | Description |
|---|---|
|
|
Icono de marca de ejemplo de IME para chino tradicional, ChangeJie. |
|
|
Icono de marca IME de ejemplo para ChangJie de chino tradicional. |
|
|
Icono de modo IME de ejemplo. |
Ventana propiedad
Para mostrar la interfaz de usuario candidata, un IME debe configurar su ventana como una ventana propiedad de otra, para que pueda mostrarse sobre la aplicación que se está ejecutando actualmente. Use el método ITfContextView::GetWnd para recuperar la ventana a la que posee. Si GetWnd devuelve un error o un NULLHWND, llame a la función GetFocus .
if (FAILED(pView->GetWnd(&parentWndHandle)) || (parentWndHandle == nullptr)) { parentWndHandle = GetFocus(); }
Interacción de ventana candidata de IME con superficies de cierre de luz
El modelo de cierre para ventanas emergentes se denomina "cierre automático" porque es fácil para un usuario cerrar estas ventanas. Para que los IME funcionen bien en el modelo de interacción de Windows, las ventanas IME deben participar en el modelo de cierre de luz.
Para participar en el modelo de descarte ligero, su IME debe generar tres nuevos eventos de Windows mediante la función NotifyWinEvent o una función similar. Estos nuevos eventos son:
- EVENT_OBJECT_IME_SHOW : genere este evento cuando el IME esté visible.
- EVENT_OBJECT_IME_HIDE : genere este evento cuando el IME esté oculto.
- EVENT_OBJECT_IME_CHANGE: genera este evento cuando el IME se mueve o cambie de tamaño.
Declaración de compatibilidad
Los IME declaran que son compatibles registrando la categoría GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT para su IME mediante ITfCategoryMgr::RegisterCategory.
Establezca el modo IME predeterminado en activado.
Proporcionamos una mejor experiencia de usuario para IME.
Compatibilidad con el escalado de PPP (DPI) para aplicaciones de escritorio
La compatibilidad mejorada con el escalado de DPI permite consultar el nivel de compatibilidad con DPI declarado de cada proceso de escritorio para determinar si necesita ajustar la interfaz de usuario. En un escenario de varios monitores, Windows ajusta automáticamente la interfaz de usuario de manera adecuada para las diferentes configuraciones de DPI en cada monitor.
Dado que el IME se ejecuta en el contexto del proceso de cada aplicación, no debe especificar un nivel de reconocimiento de DPI para su IME. Esto garantiza que el IME se ejecute en el nivel de conocimiento de DPI del proceso actual.
Para asegurarse de que todos los elementos de la interfaz de usuario de IME tienen paridad de escalado con los elementos de interfaz de usuario del proceso en el que se está ejecutando, debe responder adecuadamente a diferentes valores de PPP.
Nota:
Para garantizar la paridad con las nuevas aplicaciones de escritorio, el IME debe admitir el reconocimiento por monitor y PPP, pero no debe declarar un nivel de reconocimiento por sí mismo. El sistema determina los requisitos de escalado adecuados en cada escenario.
Para obtener más información sobre los requisitos de compatibilidad de escalado de DPI para las aplicaciones de escritorio, consulte Alta DPI.
Instalación de IME
Si compila su IME mediante Microsoft Visual Studio, cree una experiencia de instalación para su IME mediante un instalador de terceros, como InstallShield desde 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.
- Instale Visual Studio.
- Inicie Visual Studio.
- En el menú Archivo , seleccione Nuevo y seleccione Proyecto. Se abre el cuadro de diálogo Nuevo proyecto .
- En el panel izquierdo, vaya a Plantillas > Otros tipos de proyecto > Configuración e implementación, haga clic en Habilitar InstallShield Limited Edition y haga clic en Aceptar. Siga las instrucciones de instalación.
- Reinicie Visual Studio.
- Abra el archivo de solución IME (.sln).
- En el Explorador de soluciones, haga clic con el botón derecho en la solución, seleccione Agregar y seleccione Nuevo proyecto. Se abre el cuadro de diálogo Agregar nuevo proyecto .
- En el control de vista de árbol a la izquierda, navegue a Plantillas > Otros tipos de proyecto > InstallShield Limited Edition.
- En la ventana central, haga clic en InstallShield Limited Edition Project (Proyecto de edición limitada de InstallShield).
- En el cuadro de texto Nombre , escriba "SetupIME" y haga clic en Aceptar.
- En el cuadro de diálogo Asistente para proyectos , haga clic en Información de la aplicación.
- Rellene el nombre de la empresa y los demás campos.
- Haga clic en Archivos de aplicación.
- En el panel izquierdo, haga clic con el botón derecho en la carpeta [INSTALLDIR] y seleccione Nueva carpeta. Asigne un nombre a la carpeta "Plugins".
- Haga clic en Agregar archivos. Vaya al archivo DLL de IME y agréguelo a la carpeta Complementos . Repita este paso para el diccionario IME.
- Haga clic con el botón derecho en el archivo DLL de IME y seleccione Propiedades. Se abrirá el cuadro de diálogo Propiedades.
- En el cuadro de diálogo Propiedades, haga clic en la pestaña Com & .NET Settings (Configuración de COM y .NET).
- En Tipo de registro, seleccione Autoregistro y haga clic en Aceptar.
- Compile la solución. El archivo DLL de IME se compila e InstallShield crea un archivo setup.exe que permite a los usuarios instalar su IME en Windows.
Para crear su propia experiencia de instalación, llame al método ITfInputProcessorProfileMgr::RegisterProfile para registrar el IME durante la instalación. No escriba entradas del Registro directamente.
Si el IME debe usarse 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:
<LangID 1>:{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
Accesibilidad de IME
Implemente la siguiente convención para que los IME se ajusten a los requisitos de accesibilidad y para trabajar con Narrador. Para que las listas candidatas sean accesibles, los IME deben seguir esta convención.
- La lista de candidatos debe tener un UIA_AutomationIdPropertyId igual a "IME_Candidate_Window" para listas de candidatos de conversión o "IME_Prediction_Window" para listas de candidatos de predicción.
- Cuando aparece y desaparece la lista de candidatos, genera eventos de tipo UIA_MenuOpenedEventId y UIA_MenuClosedEventId, respectivamente.
- Cuando cambia el candidato seleccionado actual, la lista de candidatos genera un UIA_SelectionItem_ElementSelectedEventId. El elemento seleccionado debe tener una propiedad UIA_SelectionItemIsSelectedPropertyId igual a TRUE.
- El UIA_NamePropertyId para cada elemento de la lista de candidatos debe ser el nombre del candidato. Opcionalmente, puede proporcionar información adicional para eliminar la ambigüedad de los candidatos a través de UIA_HelpTextPropertyId.