Requisiti di input Method Editor (IME) personalizzatiCustom Input Method Editor (IME) requirements

Queste linee guida e requisiti consentono di sviluppare un IME (Input Method Editor) personalizzato per consentire a un utente di inserire testo in una lingua che non può essere rappresentata facilmente in una tastiera QWERTY standard.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.

Per una panoramica degli IME, vedere Input Method Editor (IME).For an overview of IMEs, see Input Method Editor (IME).

IME predefinitoDefault IME

Un utente può selezionare uno degli IME attivi (Settings-> Time & Language-> Language-> lingue preferite-> Language Pack-Options) come IME predefinito per la lingua preferita.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.

Impostazione della lingua preferita

Selezionare la tastiera predefinita nella schermata Impostazioni opzioni lingua per la lingua preferita.Select the default keyboard on the Language options settings screen for the preferred language.

Tastiera lingua preferita

Importante

Non è consigliabile scrivere direttamente nel registro di sistema per impostare la tastiera predefinita per l'IME personalizzato.We do not recommend writing directly to the registry to set the default keyboard for your custom IME.

Requisiti di compatibilitàCompatibility requirements

Di seguito sono riportati i requisiti di compatibilità di base per un IME personalizzato.The following are the basic compatibility requirements for a custom IME.

IME deve essere compatibile con le app di WindowsIME must be compatible with Windows apps

Utilizzare il Framework di servizi di testo (TSF) per implementare IME.Use the Text Services Framework (TSF) to implement IMEs. In precedenza, era possibile scegliere di usare imm32 (Input Method Manager) per i servizi di input.Previously, you had the option of using the Input Method Manager (IMM32) for input services. A questo punto, il sistema blocca gli IME implementati usando IMM32 (Input Method Manager).Now the system blocks IMEs that are implemented by using Input Method Manager (IMM32).

All'avvio di un'app, TSF carica la DLL IME per l'IME attualmente selezionato dall'utente.When an app starts, TSF loads the IME DLL for the IME that's currently selected by the user. Quando un IME viene caricato, è soggetto alle stesse restrizioni del contenitore di app dell'app.When an IME is loaded, it's subject to the same app container restrictions as the app. Un IME, ad esempio, non può accedere a Internet se un'app non ha richiesto l'accesso a Internet nel manifesto.For example, an IME can't access the Internet if an app hasn't requested Internet access in its manifest. Questo comportamento garantisce che gli IME non possano violare i contratti di sicurezza.This behavior ensures that IMEs can't violate security contracts.

TSF è l'intermediario tra l'applicazione e l'IME.TSF is the intermediary between the app and your IME. TSF comunica gli eventi di input all'IME e riceve nuovamente i caratteri di input dall'IME dopo che l'utente ha selezionato un carattere.TSF communicates input events to the IME and receives input characters back from the IME after the user has selected a character.

Questo comportamento è identico a quello delle versioni precedenti di Windows, ma viene caricato in un'app di Windows che influiscono sulle potenziali funzionalità di 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.

Se l'IME deve fornire funzionalità o interfaccia utente diverse tra le app di Windows e le app desktop, verificare che la DLL caricata da TSF verifichi il tipo di app in cui viene caricato.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. Chiamare il metodo ITfThreadMgrEx:: GetActiveFlags nell'IME e controllare il flag di TF_TMF_IMMERSIVEMODE, in modo che l'IME inneschi una logica dell'applicazione diversa a seconda del risultato.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.

Le app di Windows non supportano gli IME di servizio testo tabella (TTS).Windows apps do not support Table Text Service (TTS) IMEs.

Nota

Alcuni strumenti per la generazione di IME TTS producono IME contrassegnati come malware da Windows.Some tools for generating TTS IMEs produce IMEs that are marked as malware by Windows.

IME deve essere compatibile con la barra di sistemaIME must be compatible with the system tray

Non è disponibile alcuna barra del linguaggio per ospitare le icone IME.There is no language bar to host IME icons. Viene invece visualizzato un indicatore di input sulla barra di sistema che indica l'opzione di input corrente.Instead, an Input Indicator shows on the system tray that indicates the current input option. L'indicatore di input Mostra solo l'icona di personalizzazione IME per indicare l'IME attualmente in esecuzione.The Input Indicator shows only the IME branding icon to indicate the currently running IME. Inoltre, è disponibile un'icona della modalità IME che mostra a sinistra dell'icona di personalizzazione IME per consentire agli utenti di eseguire l'opzione della modalità IME più comunemente usata, ad esempio l'attivazione o la disattivazione dell'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.

L'indicatore di input Mostra l'icona di personalizzazione e la modalità di personalizzazione IME solo per gli IME compatibili.The Input Indicator shows the IME branding icon and mode icon only for compatible IMEs. Gli IME che non sono compatibili non hanno l'icona di personalizzazione e la modalità visualizzata nell'area di notifica.IMEs that aren't compatible don't have the branding icon and mode icon displayed in the system tray. Al contrario, l'indicatore di input Mostra l'abbreviazione della lingua invece dell'icona di personalizzazione IME.Instead, the Input Indicator shows the language abbreviation instead of the IME branding icon.

Archiviare le icone IME in un file DLL o EXE anziché in un file con estensione ico autonomo.Store the IME icons in a DLL or EXE file, instead of a standalone .ico file. La progettazione delle icone IME deve rispettare le linee guida descritte nella sezione linee guida di progettazione dell'interfaccia utente seguente.The design of IME icons must follow the guidelines described in the following UI design guidelines section.

Icona di personalizzazione IMEIME branding icon

L'indicatore di input ottiene l'icona di personalizzazione IME dalla DLL IME usando l'ID risorsa definito dall'IME quando è stato registrato nel 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.

Icona modalità IMEIME mode icon

Per visualizzare l'icona della modalità IME, potrebbe essere necessario che alcuni IME si basino sull'indicatore di input visualizzato sulla barra delle applicazioni.Some IMEs may need to rely on the Input Indicator showing on the system tray to display the IME mode icon. In questo caso, l'IME passa l'icona della modalità IME all'indicatore di input usando GUID_LBI_INPUTMODE.In this case, the IME passes the IME mode icon to the Input Indicator by using GUID_LBI_INPUTMODE.

Quando si passano le icone della modalità IME all'indicatore di input sulla barra delle applicazioni, le dimensioni predefinite dell'icona della modalità IME sono 16x16 pixel.When passing the IME mode icons to the Input Indicator on the system tray, the default size of the IME mode icon is 16x16 pixels. La scalabilità dell'interfaccia utente segue il valore DPI.The UI scaling follows DPI.

Quando si passa l'icona della modalità IME all'indicatore di input su UAC (controllo dell'account utente in un desktop protetto), la dimensione predefinita dell'icona della modalità IME è 20x20 pixel.When passing the IME mode icon to the Input Indicator on UAC (User Account Control in Secure Desktop), the default size of the IME mode icon is 20x20 pixels. L'icona di ridimensionamento dell'interfaccia utente per la modalità IME su UAC segue il PPI.The UI scaling for IME mode icon on UAC follows PPI.

IME deve funzionare nel contenitore di appIME must work in app container

Alcune funzioni IME sono interessate da un contenitore di app.Some IME functions are affected in an app container.

  • File dizionario : spesso gli IME contengono file di dizionario di sola lettura per eseguire il mapping dell'input dell'utente a caratteri specifici.Dictionary Files - Frequently, IMEs have read-only dictionary files to map user input to specific characters. Per accedere a questi file dall'interno di un contenitore di app, l'IME deve inserirli nei file di programma o nelle directory di Windows.To access these files from inside an app container, your IME must place them under the Program Files or Windows directories. Per impostazione predefinita, queste directory possono essere lette da un contenitore di app, in modo che gli IME possano accedere ai file di dizionario archiviati in tali percorsi.By default, these directories can be read from an app container, so IMEs can access dictionary files that are stored in these locations. Se l'IME deve archiviare il file del dizionario in un altro punto, deve modificare in modo esplicito gli elenchi di controllo di accesso (ACL) dei file del dizionario per consentire l'accesso dai contenitori di app.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.
  • Aggiornamento Internet : se l'IME deve aggiornare i propri dizionari usando i dati provenienti da Internet, non è possibile eseguire questa operazione in modo affidabile all'interno di un contenitore di app, perché l'accesso a Internet non è sempre consentito.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. Al contrario, l'IME deve eseguire un processo desktop separato che è responsabile dell'aggiornamento dei file del dizionario con i dati provenienti da Internet.Instead, your IME should run a separate desktop process that's responsible for updating the dictionary files with data from the Internet.
  • Apprendimento immediato : se un IME viene eseguito in un contenitore di app con accesso a Internet, non esiste alcuna restrizione sugli endpoint con cui l'IME può comunicare.On-the-fly learning - If an IME is running in an app container that has Internet access, there's no restriction on the endpoints that the IME can communicate with. In questo caso, un IME può usare un server cloud per offrire servizi di formazione in tempo reale.In this case, an IME can use a cloud server to provide on-the-fly learning services. Alcuni IME scaricano e caricano l'input dell'utente in tempo reale, mentre l'utente sta digitando.Some IMEs download and upload user input on the fly, while the user is typing. Poiché l'accesso a Internet non è garantito in un contenitore di app, questo potrebbe non essere sempre consentito.Since Internet access is not guaranteed in an app container, this may not always be allowed.
  • Condivisione delle informazioni tra i processi : gli IME potrebbero dover condividere i dati sulle preferenze di input dell'utente tra le app che si trovano in contenitori di app diversi.Sharing information between processes - IMEs may need to share data about the user’s input preferences between apps that are in different app containers. Usare un servizio Web per condividere i dati tra le app.Use a web service to share data between apps.

Importante

Se si tenta di aggirare le regole di sicurezza del contenitore di app, l'IME può essere considerato come malware e bloccato.If you try to circumvent app container security rules, your IME may be treated as malware and blocked.

IME e tastiera touchIME and touch keyboard

L'IME deve assicurarsi che l'interfaccia utente del riquadro candidato e gli altri elementi dell'interfaccia utente non vengano disegnati sotto la tastiera touch.Your IME must ensure that its candidate pane's UI, and other UI elements, aren't drawn underneath the touch keyboard. La tastiera touch viene visualizzata in una banda di ordine z superiore rispetto a tutte le app e l'interfaccia utente IME viene visualizzata nella stessa banda z dell'app in cui è attiva.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. Di conseguenza, la tastiera touch può sovrapporsi e nascondere l'interfaccia utente di IME.As a result, the touch keyboard can overlap and hide the IME UI. Nella maggior parte dei casi, l'app deve ridimensionare la finestra per tenere conto della tastiera touch.In most cases, the app should resize its window to account for the touch keyboard. Se un'app non viene ridimensionata, l'IME può comunque usare l'API InputPane per ottenere la posizione della tastiera touch.If an app doesn't resize, the IME still can use the InputPane API to get the position of the touch keyboard. L'IME esegue una query sulla proprietà location oppure registra un gestore per gli eventi Show e Hide della tastiera touch.The IME queries the Location property, or it registers a handler for the touch keyboard's Show and Hide events. L'evento Show viene generato ogni volta che l'utente tocca un campo di modifica, anche se la tastiera a tocco è attualmente visualizzata.The Show event is raised every time the user taps in an edit field, even if the touch keyboard is displayed currently. L'IME può usare questa API per ottenere lo spazio dello schermo usato dalla tastiera touch prima che l'IME disegni l'interfaccia utente candidata (o altra) e per rifluire l'interfaccia utente di IME per evitare di disegnare sotto la tastiera touch.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.

Impostazione del layout di tastiera touch preferitoSpecifying the preferred touch keyboard layout

L'IME può specificare il layout di tastiera touch da usare e l'IME è abilitato per funzionare con layout ottimizzati per il tocco.The IME can specify which touch keyboard layout to use, and the IME is enabled to work with touch-optimized layouts. Questa funzionalità è limitata agli IME per le lingue di input coreano, giapponese, cinese semplificato e cinese tradizionale.This functionality is limited to IMEs for the Korean, Japanese, Chinese Simplified, and Chinese Traditional input languages.

Sono disponibili sette layout supportati dalla tastiera touch, tre dei quali sono layout classici e quattro dei quali sono layout ottimizzati per il tocco.There are seven layouts supported by the touch keyboard, three of which are classic layouts and four of which are touch-optimized layouts. I layout classici sembrano comportarsi come una tastiera fisica.The classic layouts look and behave like a physical keyboard.

Tutti e tre i layout classici sono destinati a inserire il cinese tradizionale in forme diverse:All of the three classic layouts are for inputting traditional Chinese in different forms:

  • Input basato su foneticoPhonetic-based input
  • Input ChangJieChangjie input
  • Input)-DayiDayi input

Oltre ai layout classici, è disponibile un layout ottimizzato per il tocco per le lingue di input coreano, giapponese, cinese semplificato e cinese tradizionale.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.

Per usare questa funzionalità, l'IME deve implementare l'interfaccia ITfFnGetPreferredTouchKeyboardLayout , che viene esportata dall'IME usando l'API ITfFunctionProvider del Framework dei servizi di testo.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.

Se l'IME non supporta l'interfaccia ITfFnGetPreferredTouchKeyboardLayout, l'utilizzo dell'IME produce il layout classico predefinito per la lingua visualizzata dalla tastiera touch.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.

Se l'IME deve impostare uno dei layout classici come layout preferito, non è necessario alcun lavoro aggiuntivo sul lato IME oltre al supporto delle interfacce ITfFnGetPreferredTouchKeyboardLayout e 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. Tuttavia, nell'IME è necessario lavoro aggiuntivo per lavorare con i layout ottimizzati per il tocco, descritti nella sezione successiva.But additional work is required in the IME to work with the touch-optimized layouts, and this is described in the next section.

Layout ottimizzato per il toccoTouch-optimized layout

Le tastiere ottimizzate per il tocco per le lingue coreano, giapponese, cinese semplificato e cinese tradizionale di input visualizzano un layout diverso per l'IME in e le modalità di conversione 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. È presente una chiave sulla tastiera touch per impostare la modalità di conversione IME su on o off, ma anche la modalità IME della tastiera può variare in caso di modifica dello stato attivo tra i controlli di modifica.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.

Le tastiere ottimizzate per il tocco per le lingue giapponese, cinese semplificato e cinese tradizionale contengono una chiave, o chiavi, utilizzate dall'IME per spostarsi tra le pagine candidate.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. Per il giapponese e il cinese semplificato, il tasto pagina candidato viene visualizzato nel layout ottimizzato per il tocco.For Japanese and Simplified Chinese, the candidate page key displays on the touch-optimized layout. Per il cinese tradizionale sono disponibili chiavi separate per le pagine dei candidati precedenti e successive.For Traditional Chinese, there are separate keys for the previous and next candidate pages.

Quando vengono premuti questi tasti, la tastiera touch chiama la funzione SendInput per inviare i caratteri dell'area di utilizzo privato Unicode seguenti all'applicazione con lo stato attivo, che l'IME può intercettare e agire: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:

  • Pagina successiva (0xF003) : inviata quando il tasto della pagina candidata viene premuto sulla tastiera ottimizzata per il tocco per il giapponese e il cinese semplificato oppure quando viene premuto il tasto della pagina successiva sulla tastiera ottimizzata per il tocco per il cinese tradizionale.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.
  • Pagina precedente (0xF004) : inviata quando il tasto di pagina candidato viene premuto contemporaneamente al tasto MAIUSC sulla tastiera ottimizzata per il tocco per il giapponese e il cinese semplificato oppure quando il tasto della pagina precedente viene premuto sulla tastiera ottimizzata per il tocco per il cinese tradizionale.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.

Questi caratteri vengono inviati come input Unicode.These characters are sent as Unicode input. Il paragrafo successivo descrive come estrarre le informazioni sui caratteri durante le notifiche di sink di evento chiave che riceveranno l'IME del Framework di servizi di testo.The next paragraph details how to extract the character information during the key event sink notifications that the Text Services Framework IME will receive. Questi valori di carattere non sono definiti in alcun file di intestazione, pertanto sarà necessario definirli nel codice.These character values are not defined in any header file, so you will need to define them in your code.

Per intercettare l'input da tastiera, è necessario che l'IME venga registrato come sink di evento chiave.To intercept keyboard input, your IME must register as a key event sink. Per l'input Unicode generato tramite la funzione SendInput, il parametro WPARAM dei callback ITfKeyEventSink (OnKeyDown, OnKeyUp, OnTestKeyDown, OnTestKeyUp) contiene sempre la chiave virtuale VK_PACKET e non identifica direttamente il carattere.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.

Implementare la sequenza di chiamate seguente per accedere al carattere: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;
}

Integrazione ricerca IMEIME search integration

Fornire agli utenti le funzionalità di ricerca tramite il contratto di ricerca e l'integrazione con il riquadro di ricerca.Provide users with search features through the search contract and integration with the search pane.

Riquadro di ricerca e suggerimenti per IME
Riquadro di ricerca e suggerimenti per IMESearch pane and IME suggestions

Il riquadro di ricerca è una posizione centralizzata per consentire agli utenti di eseguire ricerche in tutte le app.The search pane is a central location for users to perform searches across all of their apps. Per gli utenti IME, Windows fornisce un'esperienza di ricerca univoca che consente agli IME compatibili di integrarsi con Windows per una maggiore efficienza e usabilità.For IME users, Windows provides a unique search experience that lets compatible IMEs integrate with Windows for greater efficiency and usability.

Gli utenti che digitano con un IME compatibile con la ricerca ottengono due vantaggi principali:Users who type with an IME that's compatible with search get two main benefits:

  • Interazione uniforme tra l'IME e l'esperienza di ricerca.Seamless interaction between the IME and the search experience. I candidati IME vengono visualizzati inline nella casella di ricerca senza suggerimenti per la ricerca di occlusione.IME candidates are shown inline under the search box without occluding search suggestions. L'utente può utilizzare la tastiera per spostarsi facilmente tra la casella di ricerca, i candidati alla conversione IME e i suggerimenti di ricerca.The user can use the keyboard to navigate seamlessly between the search box, the IME conversion candidates, and the search suggestions.
  • Accesso più rapido ai risultati e ai suggerimenti pertinenti forniti dalle applicazioni.Faster access to relevant results and suggestions provided by applications. L'app ha accesso a tutti i candidati alla conversione correnti per fornire suggerimenti più rilevanti.The app has access to all current conversion candidates to provide more relevant suggestions. Per migliorare la priorità dei suggerimenti di ricerca, le conversioni vengono assegnate alle app in ordine di pertinenza.To better prioritize search suggestions, conversions are given to apps in order of relevance. Gli utenti trovano e selezionano il risultato desiderato senza conversione, digitando semplicemente fonetico.Users find and select the result they want without converting, just by typing in phonetic.

Un IME è compatibile con l'esperienza di ricerca integrata se soddisfa i criteri seguenti:An IME is compatible with the integrated search experience if it meets the following criteria:

Quando viene attivato nel riquadro di ricerca, un IME compatibile viene inserito in modalità UIless e non è in grado di visualizzarne l'interfaccia utente.When activated in the search pane, a compatible IME is placed in UIless mode and can't show its UI. Invia invece i candidati alla conversione a Windows, che li Visualizza nel controllo elenco candidati inline, come illustrato nella schermata precedente.Instead, it sends conversion candidates to Windows, which displays them in the inline candidate list control, as shown in the previous screenshot.

Inoltre, l'IME invia candidati da usare per eseguire la ricerca corrente.Also, the IME sends candidates that should be used to run the current search. Questi candidati potrebbero essere gli stessi dei candidati alla conversione oppure possono essere personalizzati per la ricerca.These candidates could be the same as the conversion candidates, or they could be tailored for search.

I candidati di ricerca validi soddisfano i criteri seguenti:Good search candidates meet the following criteria:

  • Nessun prefisso sovrapposto.No prefix overlap. Ad esempio, 北京大学 and北京 sono ridondanti perché uno è un prefisso dell'altro.For example, 北京大学 and北京 are redundant because one is a prefix of the other.
  • Nessun candidato ridondante.No redundant candidates. Eventuali candidati ridondanti non sono utili per la ricerca perché non consentono di filtrare i risultati.Any redundant candidate isn't useful for search because it doesn't help filter results. Ad esempio, tutti i risultati corrispondenti a 北京大学 corrispondono anche a 北京.For example, any result that matches 北京大学 also matches 北京.
  • Nessun candidato per la stima, solo conversione.No prediction candidate, only conversion. Se, ad esempio, l'utente digita "be", l'IME può restituire 北 come candidato, ma non 北京大学.For example, if the user types "be", the IME can return 北 as a candidate, but not 北京大学. In genere, i candidati alla stima sono troppo restrittivi.Usually, prediction candidates are too restrictive.

Gli IME che non soddisfano i criteri non sono compatibili con la visualizzazione della ricerca nello stesso modo degli altri controlli e non possono sfruttare i vantaggi dell'integrazione dell'interfaccia utente e dei candidati alla ricerca.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. Le app ricevono le query solo dopo che l'utente ha terminato la composizione.Apps receive queries only after the user has finished composing.

Quando un'app che supporta il contratto di ricerca riceve una query, l'evento di query contiene una matrice "queryTextAlternatives" che contiene tutte le alternative note, classificate dall'oggetto più pertinente (probabilmente) meno pertinente (probabilmente improbabile).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).

Quando vengono fornite alternative, l'app deve considerare ogni alternativa come una query e restituire tutti i risultati che corrispondono a una qualsiasi delle alternative.When alternatives are provided, the app should treat each alternative as a query and return all results that match any of the alternatives. L'app dovrebbe comportarsi come se l'utente avesse eseguito più query contemporaneamente, eseguendo essenzialmente una query "or" al servizio fornendo i risultati.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. Per considerazioni sulle prestazioni, le app limitano spesso la corrispondenza a un valore compreso tra 5 e 20 delle alternative più rilevanti.For performance considerations, apps often limit matching to between 5 and 20 of the most relevant alternatives.

Linee guida per la progettazione dell'interfaccia utenteUI design guidelines

Tutti gli IME devono seguire le linee guida sull'esperienza utente descritte in progettare e scrivere codiceper le app di Windows.All IMEs must follow the user experience guidelines described in Design and code Windows apps.

Non usare finestre permanentiDon't use sticky windows

Le finestre IME dovrebbero essere visualizzate solo quando necessario e non devono essere visibili per sempre.Your IME windows should appear only when needed, and they shouldn't be visible all the time. Quando gli utenti non devono digitare, le finestre IME non devono essere visualizzate.When users don't need to type, IME windows shouldn't show. La finestra IME non deve essere una finestra a schermo intero.The IME window shouldn't be a full screen window. Le finestre IME non devono sovrapporsi.IME windows shouldn't overlap each other. Le finestre devono essere progettate in uno stile Windows e seguire la scalabilità dell'interfaccia utente.The windows should be designed in a Windows style and follow UI scaling.

Icone IMEIME icons

Esistono due tipi di icone IME, icone di personalizzazione e icone in modalità.There are two kinds of IME icons, branding icons and mode icons. Tutte le icone IME devono essere progettate solo con colori neri e bianchi.All IME icons must be designed with black and white colors only. Le nuove icone IME prendono in prestito dall'aspetto glifo delle icone dell'area di notifica.The new IME icons borrow from the glyphic look of the system tray icons. Questo stile è stato creato in modo che tutti i linguaggi possano usarlo per integrare l'aspetto familiare, distinguendosi anche tra loro.This style has been created so all languages can use it to complement the familial look while also differentiating from each other.

Il formato del file per le icone IME è ICO.The file format for IME icons is ICO. È necessario specificare le dimensioni delle icone seguenti.You must provide the following icon sizes.

  • pixel 16x1616x16 pixels
  • pixel 20x2020x20 pixels
  • pixel 24x2424x24 pixels
  • pixel 32x3232x32 pixels
  • 40x40 pixel40x40 pixels
  • pixel 48x4848x48 pixels

Assicurarsi che le icone a 32 bit con canale alfa siano disponibili in tutte le risoluzioni.Ensure that 32-bit icons with alpha channel are provided in all resolutions.

Le icone del marchio IME sono definite da una casella bianca in cui viene inserito un glifo tipografico di cui viene eseguito il rendering in un carattere tipografico moderno.IME brand icons are defined by a white box in which a typographic glyph rendered in a modern typeface is placed. Ogni glifo di definizione viene scelto da ogni team di linguaggio.Each defining glyph is chosen by each language team. Il glifo è nero.The glyph is black. La casella include un tratto esterno di 1 pixel in nero al 50% di opacità.The box includes an outer stroke of 1 pixel in black at 50% opacity. Le versioni "nuove" sono definite da un angolo arrotondato nell'angolo superiore sinistro della casella."New" versions are defined by a rounded corner in the upper left of the box.

Le icone in modalità IME sono definite da un glifo tipografico bianco in un carattere tipografico moderno che include un tratto esterno di 1 pixel in nero al 50% di opacità.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.

IconaIcon DescrizioneDescription
Icona del marchio IME di esempio per ChangeJie cinese tradizionale. Icona del marchio IME di esempio per ChangeJie cinese tradizionale.Example IME brand icon for Traditional Chinese ChangeJie.
Icona del marchio IME di esempio per il nuovo ChangeJie cinese tradizionale. Icona del marchio IME di esempio per ChangeJie cinese tradizionale.Example IME brand icon for Traditional Chinese ChangeJie.
Icona della modalità cinese Icona della modalità IME di esempio.Example IME mode icon.

Finestra di proprietàOwned window

Per visualizzare l'interfaccia utente candidata, un IME deve impostare la finestra di proprietà, in modo che possa essere visualizzata sull'applicazione attualmente in esecuzione.To display candidate UI, an IME must set its window to be owned-window, so it can display over the currently running app. Usare il metodo ITfContextView:: GetWnd per recuperare la finestra di cui si è proprietari.Use the ITfContextView::GetWnd method to retrieve the window to own to. Se GetWnd restituisce un errore o un NULLHWND, chiamare la funzione GetFocus .If GetWnd returns an error or a NULLHWND, call the GetFocus function.

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

Interazione finestra candidata IME con superfici di dismissing chiaroIME candidate window interaction with light dismiss surfaces

Il modello di dismissing per le finestre popup è denominato "Light ignorate" perché è facile per un utente chiudere tali finestre.The dismissal model for popup windows is called "light dismiss" because it's easy for a user to close such windows. Affinché gli IME funzionino correttamente nel modello di interazione Windows, le finestre IME devono partecipare al modello Light remiss.For IMEs to function well in the Windows interaction model, the IME windows must participate in the light dismiss model.

Per partecipare al modello Light remiss, l'IME deve generare tre nuovi eventi di Windows usando la funzione NotifyWinEvent o una funzione simile.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. Questi nuovi eventi sono:These new events are:

  • EVENT_OBJECT_IME_SHOW : genera questo evento quando l'IME diventa visibile.EVENT_OBJECT_IME_SHOW - Raise this event when the IME becomes visible.
  • EVENT_OBJECT_IME_HIDE : genera questo evento quando l'IME è nascosto.EVENT_OBJECT_IME_HIDE - Raise this event when the IME is hidden.
  • EVENT_OBJECT_IME_CHANGE : genera questo evento quando l'IME si sposta o cambia dimensione.EVENT_OBJECT_IME_CHANGE - Raise this event when the IME moves or changes size.

Dichiarazione di compatibilitàDeclaring compatibility

Gli IME dichiarano che sono compatibili registrando la categoria GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT per l'IME usando ITfCategoryMgr:: RegisterCategory.IMEs declare that they are compatible by registering the category GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT for their IME using ITfCategoryMgr::RegisterCategory.

Imposta la modalità IME predefinita su onSet the default IME mode to on

Viene fornita una migliore esperienza utente per gli IME.We provide a better UX for IMEs.

Supporto del ridimensionamento DPI per le applicazioni desktopDPI scaling support for desktop applications

Il supporto migliorato per la scalabilità DPI consente di eseguire query sul livello di riconoscimento DPI dichiarato di ogni processo desktop per determinare se è necessario ridimensionare l'interfaccia utente.Enhanced DPI scaling support enables querying the declared DPI awareness level of each desktop process to determine if it needs to scale the UI. In uno scenario con più monitor, Windows ridimensiona l'interfaccia utente in modo appropriato per diverse impostazioni DPI su ciascun monitor.In a multi-monitor scenario, Windows scales the UI appropriately for different DPI settings on each monitor.

Poiché l'IME viene eseguito nel contesto del processo di ogni applicazione, non è necessario dichiarare un livello di riconoscimento DPI per l'IME.Because your IME runs in the context of each application's process, you shouldn't declare a DPI awareness level for your IME. In questo modo si garantisce che l'IME venga eseguito a livello di riconoscimento DPI del processo corrente.This ensures that your IME runs at the DPI awareness level of the current process.

Per assicurarsi che tutti gli elementi dell'interfaccia utente IME abbiano una parità di scalabilità con gli elementi dell'interfaccia utente del processo in cui è in esecuzione, è necessario rispondere in modo appropriato a valori DPI diversi.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

Per garantire la parità con le nuove applicazioni desktop, l'IME deve supportare la consapevolezza DPI per monitor, ma non deve dichiarare un livello di consapevolezza.To ensure parity with new desktop applications, your IME should support per monitor–DPI awareness, but shouldn't declare a level of awareness itself. Il sistema determina i requisiti di scalabilità appropriati in ogni scenario.The system determines the appropriate scaling requirements in each scenario.

Per informazioni dettagliate sui requisiti di supporto per il ridimensionamento DPI per le applicazioni desktop, vedere High DPI.For details about DPI scaling support requirements for Desktop applications, see High DPI.

Installazione di IMEIME installation

Se si compila l'IME usando Microsoft Visual Studio, creare un'esperienza di installazione per l'IME usando un programma di installazione di terze parti, ad esempio InstallShield di 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.

Nei passaggi seguenti viene illustrato come utilizzare InstallShield per creare un progetto di installazione per la DLL IME.The following steps show how to use InstallShield to create a setup project for your IME DLL.

  • Installare Visual Studio.Install Visual Studio.
  • Avviare Visual Studio.Start Visual Studio.
  • Scegliere nuovo dal menu file , quindi progetto.On the File menu, point to New and select Project. Verrà visualizzata la finestra di dialogo nuovo progetto .The New Project dialog opens.
  • Nel riquadro sinistro passare a modelli > altri tipi di progetto > installazione e distribuzione, fare clic su Abilita InstallShield Limited Edition, quindi fare clic su OK.In the left pane, navigate to Templates > Other Project Types > Setup and Deployment, click Enable InstallShield Limited Edition, and click OK. Seguire le istruzioni di installazione.Follow the installation instructions.
  • Riavviare Visual Studio.Restart Visual Studio.
  • Aprire il file della soluzione IME (. sln).Open the IME solution (.sln) file.
  • In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione, scegliere Aggiungie selezionare nuovo progetto.In Solution Explorer, right-click the solution, point to Add, and select New Project. Verrà visualizzata la finestra di dialogo Aggiungi nuovo progetto .The Add New Project dialog opens.
  • Nel controllo di visualizzazione albero a sinistra passare a modelli > altri tipi di progetto > InstallShield Limited Edition.In the left tree view control, navigate to Templates > Other Project Types > InstallShield Limited Edition.
  • Nella finestra centrale fare clic su progetto InstallShield Limited Edition.In the center window, click InstallShield Limited Edition Project.
  • Nella casella di testo nome Digitare "SetupIME" e fare clic su OK.In the Name text box, type "SetupIME" and click OK.
  • Nella finestra di dialogo Project Assistant fare clic su Information Application.In the Project Assistant dialog, click Application Information.
  • Immettere il nome della società e gli altri campi.Fill in your company name and the other fields.
  • Fare clic su file applicazione.Click Application Files.
  • Nel riquadro sinistro fare clic con il pulsante destro del mouse sulla cartella [INSTALLDIR] e selezionare nuova cartella.In the left pane, right-click the [INSTALLDIR] folder, and select New Folder. Denominare la cartella "plugins".Name the folder "Plugins".
  • Fare clic su Aggiungi file.Click Add Files. Passare alla DLL IME e aggiungerla alla cartella plug -in.Navigate to your IME DLL and add it to the Plugins folder. Ripetere questo passaggio per il dizionario IME.Repeat this step for the IME dictionary.
  • Fare clic con il pulsante destro del mouse sulla DLL IME e scegliere Proprietà.Right-click the IME DLL and select Properties. Verrà visualizzata la finestra di dialogo Proprietà .The Properties dialog opens.
  • Nella finestra di dialogo Proprietà fare clic sulla scheda com & .NET Settings .In the Properties dialog, click the COM & .NET Settings tab.
  • In tipo di registrazioneselezionare registrazione automatica e fare clic su OK.Under Registration Type, select Self-registration and click OK.
  • Compilare la soluzione.Build the solution. La DLL IME viene compilata e InstallShield crea un file di setup.exe che consente agli utenti di installare l'IME in Windows.The IME DLL is built, and InstallShield creates a setup.exe file that enables users to install your IME on Windows.

Per creare un'esperienza di installazione personalizzata, chiamare il metodo ITfInputProcessorProfileMgr:: RegisterProfile per registrare l'IME durante l'installazione.To create your own installation experience, call the ITfInputProcessorProfileMgr::RegisterProfile method to register the IME during installation. Non scrivere direttamente le voci del registro di sistema.Don't write registry entries directly.

Se l'IME deve essere utilizzabile immediatamente dopo l'installazione, chiamare InstallLayoutOrTip per aggiungere l'IME ai metodi di input abilitati per l'utente, usando il formato seguente per il parametro 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}

Accessibilità IMEIME accessibility

Implementare la convenzione seguente per rendere gli IME conformi ai requisiti di accessibilità e per lavorare con Assistente vocale.Implement the following convention to make your IMEs conform to the accessibility requirements and to work with Narrator. Per rendere accessibili gli elenchi di candidati, è necessario che gli IME seguano questa convenzione.To make candidate lists accessible, your IMEs must follow this convention.

  • L'elenco dei candidati deve avere un UIA_AutomationIdPropertyId uguale a "IME_Candidate_Window" per gli elenchi di candidati alla conversione o "IME_Prediction_Window" per gli elenchi di candidati alla stima.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.
  • Quando l'elenco dei candidati viene visualizzato e scompare, genera eventi di tipo UIA_MenuOpenedEventId e UIA_MenuClosedEventIdrispettivamenteWhen the candidate list appears and disappears, it raises events of type UIA_MenuOpenedEventId and UIA_MenuClosedEventId, respectively
  • Quando viene modificato il candidato selezionato corrente, l'elenco dei candidati genera un UIA_SelectionItem_ElementSelectedEventId.When the current selected candidate changes, the candidate list raises a UIA_SelectionItem_ElementSelectedEventId. L'elemento selezionato deve avere una proprietà UIA_SelectionItemIsSelectedPropertyId uguale a true.The selected element should have a property UIA_SelectionItemIsSelectedPropertyId equal to TRUE.
  • Il UIA_NamePropertyId per ogni elemento nell'elenco candidato deve corrispondere al nome del candidato.The UIA_NamePropertyId for each item in the candidate list must be the name of the candidate. Facoltativamente, è possibile fornire informazioni aggiuntive per risolvere le ambiguità dei candidati tramite UIA_HelpTextPropertyId.Optionally, you can provide additional information to disambiguate candidates through UIA_HelpTextPropertyId.