Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Estas diretrizes e requisitos podem ajudá-lo a desenvolver um Editor de Métodos de Entrada (IME) personalizado para ajudar um utilizador a introduzir texto numa linguagem que não pode ser facilmente representada num teclado QWERTY padrão.
Para uma visão geral dos IMEs, consulte Editor de Métodos de Entrada (IME).
IME padrão
Um utilizador pode selecionar qualquer um dos seus IMEs ativos (Definições -> Hora e Língua -> Língua - Línguas Preferenciais> -> Pacote de Idiomas - Opções) para ser o IME padrão para a sua língua preferida.
Selecione o teclado predefinido no ecrã de definições de Opções de Língua para a língua preferida.
Importante
Não recomendamos escrever diretamente no registo para definir o teclado padrão para o seu IME personalizado.
Requisitos de compatibilidade
Seguem-se os requisitos básicos de compatibilidade para um IME personalizado.
IME deve ser compatível com aplicações do Windows
Use o Text Services Framework (TSF) para implementar IMEs. Anteriormente, tinha a opção de usar o Gestor de Métodos de Entrada (IMM32) para serviços de entrada. Agora, o sistema bloqueia IMEs que são implementados usando o Gestor de Métodos de Entrada (IMM32).
Quando uma aplicação inicia, o TSF carrega a DLL IME para o IME que está atualmente selecionado pelo utilizador. Quando um IME é carregado, está sujeito às mesmas restrições do contentor da aplicação. Por exemplo, um IME não pode aceder à Internet se uma aplicação não tiver solicitado acesso à Internet no seu manifesto. Este comportamento garante que os IMEs não possam violar contratos de segurança.
O TSF é o intermediário entre a aplicação e o teu IME. O TSF comunica eventos de entrada ao IME e recebe caracteres de entrada de volta do IME depois de o utilizador ter selecionado um caractere.
Este comportamento é o mesmo das versões anteriores do Windows, mas ser carregado numa aplicação Windows afeta as capacidades potenciais de um IME.
Se o teu IME precisar de fornecer funcionalidades ou interfaces diferentes entre aplicações Windows e aplicações desktop, certifica-te de que a DLL carregada pelo TSF verifica em que tipo de aplicação está a ser carregada. Chama o método ITfThreadMgrEx::GetActiveFlags no teu IME e verifica o sinalizador TF_TMF_IMMERSIVEMODE, para que o teu IME acione uma lógica de aplicação diferente dependendo do resultado.
As aplicações Windows não suportam IMEs de Serviço de Texto de Tabela (TTS).
Observação
Algumas ferramentas para gerar IMEs TTS produzem IMEs que são marcados como malware pelo Windows.
IME tem de ser compatível com a bandeja do sistema
Não existe uma barra de idioma para alojar os ícones do IME. Em vez disso, um Indicador de Entrada aparece na bandeja do sistema que indica a opção de entrada atual. O Indicador de Entrada mostra apenas o ícone da marca IME para indicar o IME atualmente em execução. Além disso, há um ícone do modo IME que aparece à esquerda do ícone da marca IME para os utilizadores realizarem a mudança de modo IME mais usada, como ligar ou desligar o IME.
O Indicador de Entrada mostra o ícone de marca IME e o ícone de modo apenas para IMEs compatíveis. Na minha experiência, os modelos que não são compatíveis não têm o ícone de marca e o ícone de modo exibidos na bandeja do sistema. Em vez disso, o Indicador de Entrada mostra a abreviatura da língua em vez do ícone de marca IME.
Armazena os ícones IME num ficheiro DLL ou EXE, em vez de num ficheiro .ico independente. O design dos ícones IME deve seguir as diretrizes descritas na seguinte secção de diretrizes de design de UI.
IME ícone de marca
O Indicador de Entrada obtém o ícone de marca IME da DLL IME usando o ID de recurso definido pelo IME quando foi registado no sistema.
Ícone do modo IME
Alguns IMEs podem precisar de depender do Indicador de Entrada que aparece na bandeja do sistema para exibir o ícone do modo IME. Neste caso, o IME passa o ícone do modo IME para o Indicador de Entrada usando GUID_LBI_INPUTMODE.
Ao passar os ícones do modo IME para o Indicador de Entrada na bandeja do sistema, o tamanho padrão do ícone do modo IME é 16x16 píxeis. A escala da interface segue o DPI.
Ao passar o ícone do modo IME para o Indicador de Entrada no UAC (Controlo de Conta de Utilizador no Ambiente de Trabalho Seguro), o tamanho padrão do ícone do modo IME é 20x20 píxeis. O escalamento da interface do usuário para o ícone do modo IME no UAC baseia-se no PPI.
IME tem de funcionar num contentor de aplicações
Algumas funções IME são afetadas num contentor de aplicações.
- Ficheiros de Dicionário - Frequentemente, os IMEs têm ficheiros de dicionário apenas de leitura para mapear a entrada do utilizador a caracteres específicos. Para aceder a estes ficheiros a partir de um contentor de aplicações, o seu IME deve colocá-los nos diretórios Program Files ou Windows. Por defeito, estes diretórios podem ser lidos a partir de um contentor de aplicações, pelo que os IMEs podem aceder a ficheiros de dicionário armazenados nesses locais. Se o seu IME tiver de armazenar o ficheiro do dicionário noutro local, deve manipular explicitamente as Listas de Controlo de Acesso (ACL) dos ficheiros do dicionário para permitir o acesso a partir dos contentores de aplicações.
- Atualização da Internet - Se o seu IME precisar de atualizar os seus dicionários usando dados da Internet, não pode fazê-lo de forma fiável dentro de um contentor de aplicações, porque o acesso à Internet nem sempre é permitido. Em vez disso, o teu IME deve executar um processo de ambiente de trabalho separado responsável por atualizar os ficheiros do dicionário com dados da Internet.
- Aprendizagem em tempo real - Se um IME estiver a correr num contentor de aplicações com acesso à Internet, não há restrição sobre os endpoints com que o IME pode comunicar. Neste caso, um IME pode usar um servidor na cloud para fornecer serviços de aprendizagem em tempo real. Alguns IMEs descarregam e carregam entradas do utilizador em tempo real, enquanto o utilizador está a escrever. Como o acesso à Internet não é garantido num contentor de aplicações, isto pode nem sempre ser permitido.
- Partilha de informação entre processos - Os IMEs podem precisar de partilhar dados sobre as preferências de entrada do utilizador entre aplicações que estão em diferentes contentores de aplicações. Use um serviço web para partilhar dados entre aplicações.
Importante
Se tentar contornar as regras de segurança dos contentores da aplicação, o seu IME pode ser tratado como malware e bloqueado.
IME e teclado tátil
O seu IME deve assegurar que a UI do painel de candidatos, assim como outros elementos da UI, não são desenhados por baixo do teclado tátil. O teclado tátil é exibido numa banda de ordem z mais alta do que todas as aplicações, e a interface IME é exibida na mesma banda de ordem z da aplicação em que está ativo. Como resultado, o teclado tátil pode sobrepor-se e esconder a interface do IME. Na maioria dos casos, a aplicação deve ajustar o tamanho da janela para ter em conta o teclado tátil. Se uma aplicação não mudar de tamanho, o IME ainda pode usar a API do InputPane para obter a posição do teclado tátil. O IME consulta a propriedade Localização , ou regista um handler para os eventos Mostrar e Ocultar do teclado tátil. O evento Mostrar é ativado sempre que o utilizador toca num campo de edição, mesmo que o teclado tátil esteja atualmente exibido. O teu IME pode usar esta API para obter o espaço de ecrã usado pelo teclado tátil antes que o IME desenhe a interface candidata (ou outra), e para refundir a interface do IME para evitar desenhar por baixo do teclado tátil.
Especificação do layout preferido do teclado tátil
O IME pode especificar qual o layout do teclado tátil a usar, e o IME está habilitado para funcionar com layouts otimizados para o toque. Esta funcionalidade está limitada a IMEs para as línguas de entrada coreana, japonesa, chinesa simplificada e chinesa tradicional.
Existem sete layouts suportados pelo teclado tátil, três dos quais são layouts clássicos e quatro são layouts otimizados para toque. Os layouts clássicos parecem e comportam-se como um teclado físico.
Todos os três layouts clássicos servem para inserir o chinês tradicional em diferentes formas:
- Entrada baseada em fonética
- Entrada de Changjie
- Entrada Dayi
Para além dos layouts clássicos, existe um layout otimizado para o toque para cada uma das línguas de entrada coreana, japonesa, chinês simplificado e chinês tradicional.
Para usar esta funcionalidade, o seu IME deve implementar a interface ITfFnGetPreferredTouchKeyboardLayout , que é exportada pelo IME usando a API ITfFunctionProvider do Text Services Framework.
Se o seu IME não suportar a interface ITfFnGetPreferredTouchKeyboardLayout, o uso do IME resultará no layout clássico predefinido para o idioma exibido pelo teclado tátil.
Se o seu IME precisar de definir um dos layouts clássicos como o layout preferido, não é necessário trabalho adicional do lado do IME para além de suportar as interfaces ITfFnGetPreferredTouchKeyboardLayout e ITfFunctionProvider. Mas é necessário trabalho adicional no IME para trabalhar com os layouts otimizados para o toque, e isto é descrito na secção seguinte.
Layout otimizado para o toque
Os teclados otimizados para o toque para os idiomas de entrada coreano, japonês, chinês simplificado e chinês tradicional apresentam um layout diferente para os modos de conversão IME Ativado e Desativado. Há uma tecla no teclado tátil para definir o modo de conversão IME para Ligado ou Desligado, mas o modo IME do teclado também pode mudar conforme o foco muda entre os controlos de edição.
Os teclados otimizados para o toque para as línguas de entrada japonês, chinês simplificado e chinês tradicional contêm uma tecla, ou teclas, que o IME utiliza para navegar pelas páginas candidatas. Para japonês e chinês simplificado, a tecla de página candidata é exibida no layout otimizado para o toque. Para o chinês tradicional, existem chaves separadas para as páginas candidatas anterior e próxima.
Quando estas teclas são pressionadas, o teclado tátil chama a função SendInput para enviar os seguintes caracteres da Área de Uso Privado Unicode para a aplicação focada, que o IME pode intercetar e atuar sobre.
- Página seguinte (0xF003) - Enviado quando a tecla de página candidata é pressionada no teclado otimizado para toque para japonês e chinês simplificado, ou quando a tecla de página seguinte é pressionada no teclado otimizado para toque para chinês tradicional.
- Página anterior (0xF004) - Enviado quando a tecla candidata da página é pressionada ao mesmo tempo que a tecla Shift no teclado otimizado para o toque para japonês e chinês simplificado, ou quando a tecla anterior da página é pressionada no teclado otimizado para o toque para chinês tradicional.
Estes caracteres são enviados como entrada Unicode. O parágrafo seguinte detalha como extrair a informação dos caracteres durante as notificações de sink de eventos-chave que o Text Services Framework IME irá receber. Estes valores de carácter não estão definidos em nenhum ficheiro de cabeçalho, por isso terá de os definir no seu código.
Para intercetar a entrada do teclado, o teu IME tem de ser registado como um capturador de eventos de tecla. Para entrada Unicode gerada usando a função SendInput, o parâmetro WPARAM dos callbacks ITfKeyEventSink (OnKeyDown, OnKeyUp, OnTestKeyDown, OnTestKeyUp) contém sempre a chave virtual VK_PACKET e não identifica diretamente o caractere.
Implemente a seguinte sequência de chamadas para aceder ao 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;
}
Integração da pesquisa do IME
Fornecer aos utilizadores funcionalidades de pesquisa através do contrato de pesquisa e integração com o painel de pesquisa.
Sugestões de painéis de pesquisa e IME
O painel de pesquisa é um local central para os utilizadores realizarem pesquisas em todas as suas aplicações. Para os utilizadores de IME, o Windows oferece uma experiência de pesquisa única que permite que IMEs compatíveis se integrem com o Windows para maior eficiência e usabilidade.
Os utilizadores que escrevem com um IME compatível com pesquisa têm dois benefícios principais:
- Interação fluida entre o IME e a experiência de pesquisa. Os candidatos do IME são mostrados em linha sob a caixa de pesquisa, sem ocultar as sugestões de pesquisa. O utilizador pode usar o teclado para navegar de forma fluida entre a caixa de pesquisa, os candidatos à conversão IME e as sugestões de pesquisa.
- Acesso mais rápido aos resultados relevantes e sugestões fornecidas pelas aplicações. A aplicação tem acesso a todos os candidatos atuais à conversão para fornecer sugestões mais relevantes. Para priorizar melhor as sugestões de pesquisa, as conversões são atribuídas às aplicações por ordem de relevância. Os utilizadores encontram e selecionam o resultado que querem sem converter, apenas escrevendo de forma fonética.
Um IME é compatível com a experiência de pesquisa integrada se cumprir os seguintes critérios:
- Compatível com o shell estilo Windows.
- Implemente as APIs do modo TSF sem UI. Para mais informações, consulte Visão Geral do Modo UILess.
- Implemente as APIs de integração de pesquisa TSF, ITfFnSearchCandidateProvider e ITfIntegratableCandidateListUIElement.
Quando ativado no painel de pesquisa, um IME compatível é colocado em modo sem interface e não pode mostrar a sua interface. Em vez disso, envia candidatos de conversão para o Windows, que os mostra no controlo da lista de candidatos inline, como mostrado na captura de ecrã anterior.
Além disso, o IME envia candidatos que devem ser usados para realizar a pesquisa atual. Estes candidatos podem ser iguais aos candidatos de conversão, ou podem ser adaptados para pesquisa.
Bons candidatos à pesquisa cumprem os seguintes critérios:
- Sem sobreposição de prefixos. Por exemplo, 北京大学 e 北京 são redundantes porque um é um prefixo do outro.
- Sem candidatos redundantes. Qualquer candidato redundante não é útil para a pesquisa porque não ajuda a filtrar resultados. Por exemplo, qualquer resultado que corresponda a 北京大学 também corresponde a 北京.
- Sem candidato a prever, apenas conversão. Por exemplo, se o utilizador escrever "be", o IME pode devolver 北 como candidato, mas não 北京大学. Normalmente, os candidatos à previsão são demasiado restritivos.
Os IMEs que não cumprem os critérios não são compatíveis com a exibição de pesquisa da mesma forma que outros controlos, e não conseguem beneficiar da integração de interface de utilizador e dos candidatos de pesquisa. As aplicações só recebem consultas depois de o utilizador terminar de escrever.
Quando uma aplicação que suporta o contrato de pesquisa recebe uma consulta, o evento de consulta contém um array "queryTextAlternatives" que contém todas as alternativas conhecidas, ordenadas da mais relevante (provável) à menos relevante (improvável).
Quando são fornecidas alternativas, a aplicação deve tratar cada alternativa como uma consulta e devolver todos os resultados que correspondam a qualquer uma das alternativas. A aplicação deve comportar-se como se o utilizador tivesse emitido várias consultas ao mesmo tempo, basicamente emitindo uma consulta "ou" ao serviço que fornece os resultados. Por questões de desempenho, as aplicações limitam frequentemente o emparelhamento a entre 5 e 20 das alternativas mais relevantes.
Diretrizes de design de UI
Todos os IMEs devem seguir as diretrizes de experiência do utilizador descritas em Desenhar e codificar aplicações Windows.
Não uses janelas adesivas
As janelas do IME só devem aparecer quando necessário, e não devem estar sempre visíveis. As janelas IME não devem ser exibidas quando os utilizadores não precisam de escrever. A janela do IME não devia ser uma janela de ecrã inteiro. As janelas do IME não devem sobrepor-se umas às outras. As janelas devem ser desenhadas ao estilo Windows e seguir a escala da interface.
Ícones IME
Existem dois tipos de ícones IME: ícones de marca e ícones de modo. Todos os ícones IME devem ser desenhados apenas com cores a preto e branco. Os novos ícones IME inspiram-se no aspeto glifo dos ícones da bandeja do sistema. Este estilo foi criado para que todas as línguas o possam usar para complementar o aspeto familiar, ao mesmo tempo que se diferenciam umas das outras.
O formato de ficheiro para os ícones IME é ICO. Deve fornecer os seguintes tamanhos de ícones.
- 16x16 píxeis
- 20x20 píxeis
- 24x24 píxeis
- 32x32 píxeis
- 40x40 píxeis
- 48x48 píxeis
Certifique-se de que os ícones de 32 bits com canal alfa são fornecidos em todas as resoluções.
Os ícones da marca IME são definidos por uma caixa branca na qual é colocado um glifo tipográfico numa fonte moderna. Cada glifo definidor é escolhido por cada equipa linguística. O glifo é preto. A caixa inclui um traço exterior de 1 píxel em preto com 50% de opacidade. As versões "Novas" são definidas por um canto arredondado no canto superior esquerdo da caixa.
Os ícones do modo IME são definidos por um glifo tipográfico branco numa tipografia moderna que inclui um traço exterior de 1 píxel em preto com 50% de opacidade.
| Ícone | Description |
|---|---|
|
|
Exemplo de ícone da marca IME para o ChangeJie tradicional chinês. |
|
|
Exemplo de ícone da marca IME para o ChangeJie tradicional chinês. |
|
|
Exemplo do ícone do modo IME. |
Janela de propriedade
Para mostrar a interface candidata, um IME deve definir a sua janela como janela própria, para poder ser exibida sobre a aplicação em curso. Use o método ITfContextView::GetWnd para recuperar a janela para possuir também. Se o GetWnd devolver um erro ou um NULLHWND, chame a função GetFocus .
if (FAILED(pView->GetWnd(&parentWndHandle)) || (parentWndHandle == nullptr)) { parentWndHandle = GetFocus(); }
Interação da janela candidata do IME com superfícies de encerramento suave
O modelo de fecho para janelas pop-up chama-se "fecho ligeiro" porque é fácil para o utilizador fechar essas janelas. Para que os IMEs funcionem bem no modelo de interação do Windows, as janelas IME devem participar no modelo de descarte de luz.
Para participar no modelo de dispensa de luz (light dismiss), o seu IME deve gerar três novos eventos Windows usando a função NotifyWinEvent ou uma função semelhante. Estes novos eventos são:
- EVENT_OBJECT_IME_SHOW - Acione este evento quando o IME ficar visível.
- EVENT_OBJECT_IME_HIDE - Levanta este evento quando o IME estiver escondido.
- EVENT_OBJECT_IME_CHANGE - Levantar ou acionar este evento quando o IME se deslocar ou mudar de tamanho.
Declaração de compatibilidade
Os IMEs declaram que são compatíveis registando a categoria GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT para o seu IME usando ITfCategoryMgr::RegisterCategory.
Defina o modo IME predefinido para ativado
Oferecemos uma melhor experiência de utilizador para os IMEs.
Suporte a escalonamento DPI para aplicações de ambiente de trabalho
O suporte melhorado para escalabilidade de DPI permite consultar o nível declarado de consciência de DPI de cada processo de ambiente de trabalho para determinar se é necessário escalar a interface. Num cenário com vários monitores, o Windows ajusta a interface adequadamente para diferentes definições de DPI em cada monitor.
Como o teu IME decorre no contexto do processo de cada candidatura, não deves declarar um nível de conhecimento de DPI para o teu IME. Isto garante que o seu IME decorre ao nível de conhecimento do DPI sobre o processo atual.
Para garantir que todos os elementos da UI do IME têm paridade de escalabilidade com os elementos da UI do processo em que está a correr, deve responder adequadamente a diferentes valores de DPI.
Observação
Para garantir a paridade com novas aplicações de desktop, o seu IME deve suportar consciência de DPI por monitor, mas não deve declarar um nível de consciência por conta própria. O sistema determina os requisitos de escalabilidade apropriados em cada cenário.
Para detalhes sobre os requisitos de suporte ao escalonamento DPI para aplicações de ambiente de trabalho, consulte High DPI.
Instalação IME
Se construir o seu IME usando o Microsoft Visual Studio, crie uma experiência de instalação para o seu IME usando um instalador de terceiros, como o InstallShield da Flexera Software.
Os passos seguintes mostram como usar o InstallShield para criar um projeto de configuração para a sua DLL IME.
- Instala o Visual Studio.
- Inicie o Visual Studio.
- No menu Ficheiro , aponte para Novo e selecione Projeto. O diálogo do Novo Projeto abre-se.
- No painel esquerdo, navegue até Modelos > Outros Tipos > de Projeto Configurar e Implementar, clique em Ativar InstallShield Edição Limitada e clique em OK. Siga as instruções de instalação.
- Reinicie o Visual Studio.
- Abra o ficheiro da solução IME (.sln).
- No Explorador de Soluções, clique com o botão direito na solução, aponte para Adicionar e selecione Novo Projeto. Abre-se o diálogo Adicionar Novo Projeto .
- No controlo da vista em árvore à esquerda, navegue até Modelos > Outros Tipos de Projeto > InstallShield Edição Limitada.
- Na janela central, clique em InstallShield Limited Edition Project.
- Na caixa de texto Nome, escreva "SetupIME" e clique em OK.
- No diálogo do Assistente de Projeto , clique em Informações da Candidatura.
- Preencha o nome da sua empresa e os outros campos.
- Clique em Ficheiros de Candidatura.
- No painel esquerdo, clique com o botão direito na pasta [INSTALLDIR] e selecione Nova Pasta. Nomeia a pasta "Plugins".
- Clique em Adicionar Ficheiros. Navega até à tua DLL do IME e adiciona-a à pasta Plugins . Repita este passo para o dicionário IME.
- Clique com o botão direito na DLL IME e selecione Propriedades. A caixa de diálogo de Propriedades abre-se.
- No diálogo Propriedades, clique no separador Configurações COM & .NET.
- Em Tipo de Registo, selecione Auto-registo e clique em OK.
- Crie a solução. A DLL IME está construída, e o InstallShield cria um ficheiro setup.exe que permite aos utilizadores instalar o seu IME no Windows.
Para criar a sua própria experiência de instalação, chame o método ITfInputProcessorProfileMgr::RegisterProfile para registar o IME durante a instalação. Não escrevas entradas diretamente no registo.
Se o IME tiver de ser utilizável imediatamente após a instalação, chame o InstallLayoutOrTip para adicionar o IME aos métodos de entrada habilitados pelo utilizador, usando o seguinte formato para o parâmetro psz:
<LangID 1>:{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
Acessibilidade IME
Implemente a seguinte convenção para que os seus IMEs estejam em conformidade com os requisitos de acessibilidade e para trabalhar com o Narrador. Para tornar as listas de candidatos acessíveis, os seus IMEs devem seguir esta convenção.
- A lista de candidatos deve ter um UIA_AutomationIdPropertyId igual a "IME_Candidate_Window" para listas de candidatos de conversão ou "IME_Prediction_Window" para listas de candidatos de previsão.
- Quando a lista de candidatos aparece e desaparece, apresenta eventos do tipo UIA_MenuOpenedEventId e UIA_MenuClosedEventId, respetivamente
- Quando o candidato atualmente selecionado muda, a lista de candidatos desencadeia UIA_SelectionItem_ElementSelectedEventId. O elemento selecionado deve ter uma propriedade UIA_SelectionItemIsSelectedPropertyId igual a TRUE.
- O UIA_NamePropertyId para cada item da lista de candidatos deve ser o nome do candidato. Opcionalmente, pode fornecer informações adicionais para desambiguar os candidatos usando UIA_HelpTextPropertyId.
Tópicos relacionados
Windows developer