사용자 지정 IME (입력기) 요구 사항Custom Input Method Editor (IME) requirements

이러한 지침 및 요구 사항은 표준 QWERTY 키보드에서 쉽게 나타낼 수 없는 언어로 사용자 입력 텍스트를 지원 하기 위해 사용자 지정 IME (입력기)를 개발 하는 데 도움이 될 수 있습니다.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.

Ime의 개요는 ime (Input Method Editor)를 참조 하세요.For an overview of IMEs, see Input Method Editor (IME).

기본 IMEDefault IME

사용자는 원하는 언어에 대 한 기본 IME (설정-> 시간 & 언어 > 언어 > 기본 언어-> 언어 팩)를 선택할 수 있습니다.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.

기본 설정 언어 설정

기본 설정 언어에 대 한 언어 옵션 설정 화면에서 기본 키보드를 선택 합니다.Select the default keyboard on the Language options settings screen for the preferred language.

기본 설정 언어 키보드

중요

사용자 지정 IME에 대 한 기본 키보드를 설정 하기 위해 레지스트리에 직접 쓰지 않는 것이 좋습니다.We do not recommend writing directly to the registry to set the default keyboard for your custom IME.

호환성 요구 사항Compatibility requirements

사용자 지정 IME의 기본 호환성 요구 사항은 다음과 같습니다.The following are the basic compatibility requirements for a custom IME.

IME는 Windows 앱과 호환 되어야 합니다.IME must be compatible with Windows apps

TSF (텍스트 서비스 프레임 워크) 를 사용 하 여 ime를 구현 합니다.Use the Text Services Framework (TSF) to implement IMEs. 이전에는 입력 서비스에 대해 IMM32 (입력기) 를 사용 하는 옵션이 있었습니다.Previously, you had the option of using the Input Method Manager (IMM32) for input services. 이제 시스템은 IMM32 (입력 메서드 관리자)를 사용 하 여 구현 된 Ime를 차단 합니다.Now the system blocks IMEs that are implemented by using Input Method Manager (IMM32).

앱이 시작 되 면 TSF는 현재 사용자가 선택한 IME에 대 한 IME DLL을 로드 합니다.When an app starts, TSF loads the IME DLL for the IME that's currently selected by the user. IME가 로드 되 면 앱과 동일한 앱 컨테이너 제한이 적용 됩니다.When an IME is loaded, it's subject to the same app container restrictions as the app. 예를 들어 앱이 매니페스트에서 인터넷 액세스를 요청 하지 않은 경우 IME는 인터넷에 액세스할 수 없습니다.For example, an IME can't access the Internet if an app hasn't requested Internet access in its manifest. 이 동작은 Ime가 보안 계약을 위반할 수 없도록 합니다.This behavior ensures that IMEs can't violate security contracts.

TSF는 앱과 IME의 중간입니다.TSF is the intermediary between the app and your IME. TSF는 입력 이벤트를 IME에 전달 하 고 사용자가 문자를 선택한 후 IME에서 입력 문자를 다시 받습니다.TSF communicates input events to the IME and receives input characters back from the IME after the user has selected a character.

이 동작은 이전 버전의 Windows와 동일 하지만 Windows 앱으로 로드 되는 경우 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.

IME가 Windows 앱과 데스크톱 앱 간에 다른 기능이 나 UI를 제공 해야 하는 경우 TSF에서 로드 한 DLL이 로드 되는 앱의 유형을 확인 해야 합니다.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. Ime에서 ITfThreadMgrEx:: GetActiveFlags 메서드를 호출 하 고 TF_TMF_IMMERSIVEMODE 플래그를 확인 하 여 ime가 결과에 따라 다른 응용 프로그램 논리를 트리거합니다.Call the ITfThreadMgrEx::GetActiveFlags method in your IME and check the TF_TMF_IMMERSIVEMODE flag, so your IME triggers different application logic depending on the result.

Windows 앱은 TTS (Table Text Service) Ime를 지원 하지 않습니다.Windows apps do not support Table Text Service (TTS) IMEs.

참고

TTS Ime를 생성 하는 일부 도구는 Windows에 의해 맬웨어로 표시 되는 Ime를 생성 합니다.Some tools for generating TTS IMEs produce IMEs that are marked as malware by Windows.

IME는 시스템 트레이에서 호환 되어야 합니다.IME must be compatible with the system tray

IME 아이콘을 호스트 하는 데는 언어 막대가 없습니다.There is no language bar to host IME icons. 대신 현재 입력 옵션을 나타내는 입력 표시기가 시스템 트레이에 표시 됩니다.Instead, an Input Indicator shows on the system tray that indicates the current input option. 입력 표시기에는 현재 실행 중인 IME를 나타내는 IME 브랜딩 아이콘만 표시 됩니다.The Input Indicator shows only the IME branding icon to indicate the currently running IME. 또한 ime를 설정 하거나 해제 하는 등 가장 일반적으로 사용 되는 IME 모드 스위치를 수행 하기 위해 사용자가 IME 브랜딩 아이콘 왼쪽에 표시 되는 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.

입력 표시기는 호환 되는 Ime에 대해서만 IME 브랜딩 아이콘 및 모드 아이콘을 표시 합니다.The Input Indicator shows the IME branding icon and mode icon only for compatible IMEs. 호환 되지 않는 Ime의 경우 시스템 트레이에 브랜딩 아이콘 및 모드 아이콘이 표시 되지 않습니다.IMEs that aren't compatible don't have the branding icon and mode icon displayed in the system tray. 대신 입력 표시기는 IME 브랜딩 아이콘 대신 언어 약어를 표시 합니다.Instead, the Input Indicator shows the language abbreviation instead of the IME branding icon.

독립형 .ico 파일 대신 DLL 또는 EXE 파일에 IME 아이콘을 저장 합니다.Store the IME icons in a DLL or EXE file, instead of a standalone .ico file. IME 아이콘의 디자인은 다음 UI 디자인 지침 섹션에 설명 된 지침을 따라야 합니다.The design of IME icons must follow the guidelines described in the following UI design guidelines section.

IME 브랜딩 아이콘IME branding icon

입력 표시기는 시스템에 등록 된 경우 ime에 정의 된 리소스 ID를 사용 하 여 IME DLL에서 IME 브랜딩 아이콘을 가져옵니다.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.

IME 모드 아이콘IME mode icon

일부 Ime는 시스템 트레이에 표시 되는 입력 표시기를 사용 하 여 IME 모드 아이콘을 표시 해야 할 수 있습니다.Some IMEs may need to rely on the Input Indicator showing on the system tray to display the IME mode icon. 이 경우 IME는 GUID_LBI_INPUTMODE을 사용 하 여 IME 모드 아이콘을 입력 표시기에 전달 합니다.In this case, the IME passes the IME mode icon to the Input Indicator by using GUID_LBI_INPUTMODE.

시스템 트레이의 입력 표시기에 IME 모드 아이콘을 전달 하는 경우 IME 모드 아이콘의 기본 크기는 16x16 픽셀입니다.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. UI 크기 조정은 DPI를 따릅니다.The UI scaling follows DPI.

IME 모드 아이콘을 UAC의 입력 표시기 (보안 데스크톱의 사용자 계정 컨트롤)에 전달 하는 경우 IME 모드 아이콘의 기본 크기는 20x20 픽셀입니다.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. UAC에서 IME 모드의 UI 크기 조정 아이콘은 PPI를 따릅니다.The UI scaling for IME mode icon on UAC follows PPI.

IME는 앱 컨테이너에서 작동 해야 합니다.IME must work in app container

일부 IME 함수는 앱 컨테이너에서 영향을 받습니다.Some IME functions are affected in an app container.

  • 사전 파일 -일반적으로 ime에는 사용자 입력을 특정 문자에 매핑하는 읽기 전용 사전 파일이 있습니다.Dictionary Files - Frequently, IMEs have read-only dictionary files to map user input to specific characters. 앱 컨테이너 내에서 이러한 파일에 액세스 하려면 IME가 Program Files 또는 Windows 디렉터리 아래에 해당 파일을 저장 해야 합니다.To access these files from inside an app container, your IME must place them under the Program Files or Windows directories. 기본적으로 이러한 디렉터리는 앱 컨테이너에서 읽을 수 있으므로 Ime는 이러한 위치에 저장 된 사전 파일에 액세스할 수 있습니다.By default, these directories can be read from an app container, so IMEs can access dictionary files that are stored in these locations. IME에서 사전 파일을 다른 위치에 저장 해야 하는 경우 앱 컨테이너에서 액세스할 수 있도록 사전 파일의 Access Control 목록 (ACL) 을 명시적으로 조작 해야 합니다.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.
  • 인터넷 업데이트 -IME에서 인터넷의 데이터를 사용 하 여 사전을 업데이트 해야 하는 경우 인터넷 액세스가 항상 허용 되지 않기 때문에 앱 컨테이너 내부에서 안정적으로 작업을 수행할 수 없습니다.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. 대신 IME는 인터넷 데이터를 사용 하 여 사전 파일을 업데이트 해야 하는 별도의 데스크톱 프로세스를 실행 해야 합니다.Instead, your IME should run a separate desktop process that's responsible for updating the dictionary files with data from the Internet.
  • 즉시 학습 -인터넷에 액세스할 수 있는 앱 컨테이너에서 ime를 실행 하는 경우 ime가 통신할 수 있는 끝점에 대 한 제한이 없습니다.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. 이 경우 IME는 클라우드 서버를 사용 하 여 즉석 학습 서비스를 제공할 수 있습니다.In this case, an IME can use a cloud server to provide on-the-fly learning services. 사용자가 입력 하는 동안 일부 Ime는 사용자 입력을 즉시 다운로드 하 고 업로드 합니다.Some IMEs download and upload user input on the fly, while the user is typing. 인터넷 액세스는 앱 컨테이너에서 보장 되지 않으므로 항상 허용 되지 않을 수 있습니다.Since Internet access is not guaranteed in an app container, this may not always be allowed.
  • 프로세스 간 정보 공유 -ime는 다른 앱 컨테이너에 있는 앱 간의 사용자 입력 기본 설정에 대 한 데이터를 공유 해야 할 수 있습니다.Sharing information between processes - IMEs may need to share data about the user’s input preferences between apps that are in different app containers. 웹 서비스를 사용 하 여 앱 간에 데이터를 공유 합니다.Use a web service to share data between apps.

중요

앱 컨테이너 보안 규칙을 우회 하려고 하면 IME가 맬웨어로 처리 되 고 차단 될 수 있습니다.If you try to circumvent app container security rules, your IME may be treated as malware and blocked.

IME 및 터치 키보드IME and touch keyboard

IME는 후보 창의 UI 및 기타 UI 요소를 터치 키보드 아래에 그리지 않아야 합니다.Your IME must ensure that its candidate pane's UI, and other UI elements, aren't drawn underneath the touch keyboard. 터치 키보드는 모든 앱 보다 더 높은 z-순서 밴드에 표시 되며 IME UI는 활성화 된 앱과 동일한 z-순서 밴드에 표시 됩니다.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. 따라서 터치 키보드는 IME UI를 겹치고 숨길 수 있습니다.As a result, the touch keyboard can overlap and hide the IME UI. 대부분의 경우 앱은 터치 키보드를 고려 하 여 창 크기를 조정 해야 합니다.In most cases, the app should resize its window to account for the touch keyboard. 앱의 크기를 조정 하지 않는 경우 IME는 여전히 Inputpane API를 사용 하 여 터치 키보드의 위치를 가져올 수 있습니다.If an app doesn't resize, the IME still can use the InputPane API to get the position of the touch keyboard. IME는 Location 속성을 쿼리하거나 터치 키보드의 표시 및 숨기기 이벤트에 대 한 처리기를 등록 합니다.The IME queries the Location property, or it registers a handler for the touch keyboard's Show and Hide events. 표시 키보드는 현재 터치 키보드를 표시 하는 경우에도 사용자가 편집 필드를 누를 때마다 발생 합니다.The Show event is raised every time the user taps in an edit field, even if the touch keyboard is displayed currently. IME는이 API를 사용 하 여 IME에서 후보 (또는 기타) UI를 그리기 전에 터치 키보드에서 사용 되는 화면 공간을 가져오고, 터치 키보드 아래에 표시 되지 않도록 Ime UI를 리플로우 할 수 있습니다.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.

기본 터치 키보드 레이아웃 지정Specifying the preferred touch keyboard layout

IME는 사용할 터치 키보드 레이아웃을 지정할 수 있으며, IME는 터치 최적화 레이아웃을 사용할 수 있습니다.The IME can specify which touch keyboard layout to use, and the IME is enabled to work with touch-optimized layouts. 한국어, 일본어, 중국어 간체 및 중국어 번체 입력 언어의 경우이 기능은 Ime로 제한 됩니다.This functionality is limited to IMEs for the Korean, Japanese, Chinese Simplified, and Chinese Traditional input languages.

터치 키보드에서 지원 되는 7 가지 레이아웃이 있습니다. 세 가지는 클래식 레이아웃 이며 4 개는 터치 최적화 레이아웃입니다.There are seven layouts supported by the touch keyboard, three of which are classic layouts and four of which are touch-optimized layouts. 클래식 레이아웃은 실제 키보드 처럼 보이지만 동작 합니다.The classic layouts look and behave like a physical keyboard.

세 가지 클래식 레이아웃은 모두 다른 형식으로 중국어 번체를 입력 하는 데 사용할 수 있습니다.All of the three classic layouts are for inputting traditional Chinese in different forms:

  • 윗주 기반 입력Phonetic-based input
  • Changjie 입력Changjie input
  • Dayi 입력Dayi input

클래식 레이아웃 외에도 각각의 한국어, 일본어, 중국어 간체 및 중국어 번체 입력 언어에 대 한 터치 최적화 레이아웃이 하나씩 있습니다.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.

이 기능을 사용 하려면 IME가 텍스트 서비스 프레임 워크 ITfFunctionProvider API를 사용 하 여 ime에서 내보내는 ITfFnGetPreferredTouchKeyboardLayout 인터페이스를 구현 해야 합니다.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.

IME가 ITfFnGetPreferredTouchKeyboardLayout 인터페이스를 지원 하지 않는 경우 IME를 사용 하면 터치 키보드에 표시 되는 언어에 대 한 기본 클래식 레이아웃을 사용 합니다.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.

IME에서 클래식 레이아웃 중 하나를 기본 레이아웃으로 설정 해야 하는 경우 ITfFnGetPreferredTouchKeyboardLayout 및 ITfFunctionProvider 인터페이스를 지 원하는 것 이상으로 IME 쪽에서 추가 작업이 필요 하지 않습니다.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. 그러나 터치 최적화 된 레이아웃을 사용 하려면 IME에 추가 작업이 필요 하며,이에 대해서는 다음 섹션에서 설명 합니다.But additional work is required in the IME to work with the touch-optimized layouts, and this is described in the next section.

터치 최적화 레이아웃Touch-optimized layout

한국어, 일본어, 중국어 간체 및 중국어 번체 입력 언어에 대 한 터치 최적화 키보드는 IME On 및 IME Off 변환 모드에 대해 다른 레이아웃을 표시 합니다.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. 터치 키보드에는 IME 변환 모드를 On 또는 Off로 설정 하는 키가 있지만 키보드의 IME 모드는 편집 컨트롤 간에 포커스가 변경 될 수도 있습니다.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.

일본어, 중국어 간체 및 중국어 번체 입력 언어에 대 한 터치 최적화 키보드에는 IME가 후보 페이지를 탐색 하는 데 사용 하는 키 또는 키가 포함 되어 있습니다.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. 일본어 및 중국어 간체의 경우 후보 페이지 키가 터치 최적화 레이아웃에 표시 됩니다.For Japanese and Simplified Chinese, the candidate page key displays on the touch-optimized layout. 중국어 번체의 경우 이전 및 다음 후보 페이지에 대 한 별도의 키가 있습니다.For Traditional Chinese, there are separate keys for the previous and next candidate pages.

이러한 키를 누르면 터치 키보드는 SendInput 함수를 호출 하 여 다음 유니코드 개인 사용 영역 문자를 포커스가 있는 응용 프로그램으로 보냅니다 .이 문자는 IME에서 가로채서 작업을 수행할 수 있습니다.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:

  • 다음 페이지 (0xF003) -일본어 및 중국어 간체에 대 한 터치 최적화 키보드에서 후보 페이지 키를 누르거나, 중국어 번체의 경우 터치 최적화 키보드에서 다음 페이지 키를 누르면 보냅니다.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.
  • 이전 페이지 (0xF004) -후보 페이지 키를 일본어 및 중국어 간체에 대 한 터치 최적화 키보드의 Shift 키와 동시에 누르거나, 기존 중국어의 경우 터치 최적화 키보드에서 이전 페이지 키를 누르면 보냅니다.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.

이러한 문자는 유니코드 입력으로 전송 됩니다.These characters are sent as Unicode input. 다음 단락에서는 텍스트 서비스 프레임 워크 IME에서 받게 되는 키 이벤트 싱크 알림 중에 문자 정보를 추출 하는 방법을 자세히 설명 합니다.The next paragraph details how to extract the character information during the key event sink notifications that the Text Services Framework IME will receive. 이러한 문자 값은 모든 헤더 파일에 정의 되어 있지 않으므로 코드에서 정의 해야 합니다.These character values are not defined in any header file, so you will need to define them in your code.

키보드 입력을 차단 하려면 IME를 키 이벤트 싱크로 등록 해야 합니다.To intercept keyboard input, your IME must register as a key event sink. SendInput 함수를 사용 하 여 생성 된 유니코드 입력의 경우 ITfKeyEventSink 콜백 (OnKeyDown, OnKeyUp, OnTestKeyDown, Ontestkeydown)의 WPARAM 매개 변수는 항상 VK_PACKET 가상 키를 포함 하며 문자를 직접 식별 하지 않습니다.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.

다음 호출 시퀀스를 구현 하 여 문자에 액세스 합니다.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;
}

IME 검색 통합IME search integration

검색 계약 및 검색 창과의 통합을 통해 사용자에 게 검색 기능을 제공 합니다.Provide users with search features through the search contract and integration with the search pane.

검색 창 및 IME 제안
검색 창 및 IME 제안Search pane and IME suggestions

검색 창은 사용자가 모든 앱에서 검색을 수행할 수 있는 중앙 위치입니다.The search pane is a central location for users to perform searches across all of their apps. IME 사용자의 경우 Windows는 더 높은 효율성과 유용성을 위해 호환 되는 Ime를 Windows와 통합할 수 있는 고유한 검색 환경을 제공 합니다.For IME users, Windows provides a unique search experience that lets compatible IMEs integrate with Windows for greater efficiency and usability.

검색에 호환 되는 IME를 입력 하는 사용자에 게는 두 가지 주요 이점이 있습니다.Users who type with an IME that's compatible with search get two main benefits:

  • IME와 검색 환경 간의 원활한 상호 작용.Seamless interaction between the IME and the search experience. IME 후보는 occluding 검색 제안을 제외 하 고 검색 상자 아래에 인라인으로 표시 됩니다.IME candidates are shown inline under the search box without occluding search suggestions. 사용자는 키보드를 사용 하 여 검색 상자, IME 변환 후보 및 검색 제안 사이를 원활 하 게 탐색할 수 있습니다.The user can use the keyboard to navigate seamlessly between the search box, the IME conversion candidates, and the search suggestions.
  • 응용 프로그램에서 제공 하는 관련 결과 및 제안에 더 빠르게 액세스할 수 있습니다.Faster access to relevant results and suggestions provided by applications. 앱은 더 많은 관련 제안을 제공 하기 위해 모든 현재 변환 후보에 액세스할 수 있습니다.The app has access to all current conversion candidates to provide more relevant suggestions. 검색 제안의 우선 순위를 높이려면 앱에 대 한 관련성을 고려 하 여 변환 합니다.To better prioritize search suggestions, conversions are given to apps in order of relevance. 사용자는 윗주를 입력 하는 것 만으로 변환 하지 않고 원하는 결과를 찾아 선택 합니다.Users find and select the result they want without converting, just by typing in phonetic.

IME는 다음 조건을 충족 하는 경우 통합 검색 환경과 호환 됩니다.An IME is compatible with the integrated search experience if it meets the following criteria:

검색 창에서 활성화 되 면 호환 되는 IME가 위치에 배치 되 고 UI를 표시할 수 없습니다.When activated in the search pane, a compatible IME is placed in UIless mode and can't show its UI. 대신, 이전 스크린샷에서와 같이 인라인 후보 목록 컨트롤에 표시 하는 변환 후보를 Windows로 보냅니다.Instead, it sends conversion candidates to Windows, which displays them in the inline candidate list control, as shown in the previous screenshot.

또한 IME는 현재 검색을 실행 하는 데 사용 해야 하는 후보를 보냅니다.Also, the IME sends candidates that should be used to run the current search. 이러한 후보는 변환 후보와 동일 하거나 검색에 맞게 조정할 수 있습니다.These candidates could be the same as the conversion candidates, or they could be tailored for search.

좋은 검색 후보는 다음 조건을 충족 합니다.Good search candidates meet the following criteria:

  • 접두사가 겹치지 않습니다.No prefix overlap. 예를 들어 北京大学 and北京는 다른의 접두사 이므로 중복 됩니다.For example, 北京大学 and北京 are redundant because one is a prefix of the other.
  • 중복 후보가 없습니다.No redundant candidates. 모든 중복 후보는 결과를 필터링 하는 데 도움이 되지 않으므로 검색에 유용 하지 않습니다.Any redundant candidate isn't useful for search because it doesn't help filter results. 예를 들어 北京大学와 일치 하는 모든 결과가 北京 일치 합니다.For example, any result that matches 北京大学 also matches 北京.
  • 예측 후보가 없고 변환만 있습니다.No prediction candidate, only conversion. 예를 들어 사용자가 "be"를 입력 하는 경우 IME는 北를 후보로 반환할 수 있지만 北京大学는 사용할 수 없습니다.For example, if the user types "be", the IME can return 北 as a candidate, but not 北京大学. 일반적으로 예측 후보는 너무 제한적입니다.Usually, prediction candidates are too restrictive.

조건을 충족 하지 않는 Ime는 다른 컨트롤과 동일한 방식으로 검색 표시와 호환 되지 않으며 UI 통합 및 검색 후보를 활용할 수 없습니다.IMEs that don't meet the criteria aren't compatible with search display in the same way as other controls, and can't take advantage of UI integration and search candidates. 앱은 사용자가 작성을 완료 한 후에만 쿼리를 수신 합니다.Apps receive queries only after the user has finished composing.

검색 계약을 지 원하는 앱이 쿼리를 받을 때 쿼리 이벤트에는 가장 관련성이 높은 (가능성이 가장 높은)에서 가장 관련성이 높은 모든 대안 (가능성이 낮은 항목)을 포함 하는 "queryTextAlternatives" 배열이 포함 됩니다.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).

대안을 제공 하는 경우 앱은 각 대안을 쿼리로 처리 하 고 다른 대안과 일치 하는 모든 결과를 반환 해야 합니다.When alternatives are provided, the app should treat each alternative as a query and return all results that match any of the alternatives. 앱은 사용자가 동시에 여러 쿼리를 실행 하 여 결과를 제공 하는 서비스에 "또는" 쿼리를 실행 하는 것 처럼 동작 해야 합니다.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. 성능 고려 사항을 위해 앱은 가장 관련성이 가장 높은 대체 항목의 5 ~ 20 개로 제한 되는 경우가 많습니다.For performance considerations, apps often limit matching to between 5 and 20 of the most relevant alternatives.

UI 디자인 지침UI design guidelines

모든 Ime는 Windows 앱 디자인 및 코드에 설명 된 사용자 환경 지침을 따라야 합니다.All IMEs must follow the user experience guidelines described in Design and code Windows apps.

고정 창을 사용 하지 않음Don't use sticky windows

IME 창은 필요한 경우에만 표시 되며 항상 표시 되어서는 안 됩니다.Your IME windows should appear only when needed, and they shouldn't be visible all the time. 사용자가 입력 하지 않아도 되는 경우 IME 창이 표시 되지 않습니다.When users don't need to type, IME windows shouldn't show. IME 창은 전체 화면 창이 아니어야 합니다.The IME window shouldn't be a full screen window. IME 창은 서로 겹치지 않아야 합니다.IME windows shouldn't overlap each other. Windows는 windows 스타일로 디자인 되 고 UI 크기 조정을 따라야 합니다.The windows should be designed in a Windows style and follow UI scaling.

IME 아이콘IME icons

두 종류의 IME 아이콘, 브랜딩 아이콘 및 모드 아이콘이 있습니다.There are two kinds of IME icons, branding icons and mode icons. 모든 IME 아이콘은 검정과 흰색 으로만 디자인 해야 합니다.All IME icons must be designed with black and white colors only. 시스템 트레이 아이콘의 glyphic 모양에서 새 IME 아이콘이 표시 됩니다.The new IME icons borrow from the glyphic look of the system tray icons. 이 스타일은 모든 언어에서이 스타일을 사용 하 여 familial 모양을 보충 하 고 서로 차별화 하는 데 사용할 수 있습니다.This style has been created so all languages can use it to complement the familial look while also differentiating from each other.

IME 아이콘의 파일 형식은 .ICO입니다.The file format for IME icons is ICO. 다음 아이콘 크기를 제공 해야 합니다.You must provide the following icon sizes.

  • 16x16 픽셀16x16 pixels
  • 20x20 픽셀20x20 pixels
  • 24x24 픽셀24x24 pixels
  • 32x32 픽셀32x32 pixels
  • 40x40 픽셀40x40 pixels
  • 48x48 픽셀48x48 pixels

알파 채널이 있는 32 비트 아이콘이 모든 해상도로 제공 되는지 확인 합니다.Ensure that 32-bit icons with alpha channel are provided in all resolutions.

IME 브랜드 아이콘은 최신 서체에서 렌더링 된 입력 문자 모양을 배치 하는 흰색 상자에 의해 정의 됩니다.IME brand icons are defined by a white box in which a typographic glyph rendered in a modern typeface is placed. 각 언어 팀은 각 정의 문자 모양을 선택 합니다.Each defining glyph is chosen by each language team. 문자 모양이 검정색입니다.The glyph is black. 상자에는 1 픽셀의 외부 스트로크가 검정으로 50% 불투명도로 포함 됩니다.The box includes an outer stroke of 1 pixel in black at 50% opacity. "New" 버전은 상자의 왼쪽 위에서 모퉁이가 둥근 모퉁이로 정의 됩니다."New" versions are defined by a rounded corner in the upper left of the box.

IME 모드 아이콘은 1 픽셀의 외부 스트로크를 50% 불투명도의 검정색으로 포함 하는 현대 서체에서 흰색 입력 문자 모양으로 정의 됩니다.IME mode icons are defined by a white typographic glyph in a modern typeface which includes an outer stroke of 1 pixel in black at 50% opacity.

아이콘Icon DescriptionDescription
중국어 번체 ChangeJie의 예제 IME 브랜드 아이콘 중국어 번체 ChangeJie의 예제 IME 브랜드 아이콘Example IME brand icon for Traditional Chinese ChangeJie.
중국어 번체 새 ChangeJie의 예제 IME 브랜드 아이콘. 중국어 번체 ChangeJie의 예제 IME 브랜드 아이콘Example IME brand icon for Traditional Chinese ChangeJie.
중국어 모드 아이콘 예를 들어 IME 모드 아이콘이 있습니다.Example IME mode icon.

소유 창Owned window

후보 UI를 표시 하려면 IME가 창을 소유 하도록 설정 해야 합니다. 그러면 현재 실행 중인 앱 위에 표시 될 수 있습니다.To display candidate UI, an IME must set its window to be owned-window, so it can display over the currently running app. Itfcontextview:: GetWnd 메서드를 사용 하 여 소유할 창을 검색 합니다.Use the ITfContextView::GetWnd method to retrieve the window to own to. GetWnd에서 오류 또는 NULLHWND를 반환 하는 경우 GetFocus 함수를 호출 합니다.If GetWnd returns an error or a NULLHWND, call the GetFocus function.

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

밝은 해제 서피스와의 IME 후보 창 상호 작용IME candidate window interaction with light dismiss surfaces

팝업 창에 대 한 해제 모델은 사용자가 해당 창을 닫을 수 있기 때문에 "밝은 해제" 라고 합니다.The dismissal model for popup windows is called "light dismiss" because it's easy for a user to close such windows. Ime가 Windows 상호 작용 모델에서 잘 작동 하려면 IME 창이 라이트 해제 모델에 참여 해야 합니다.For IMEs to function well in the Windows interaction model, the IME windows must participate in the light dismiss model.

Light 해제 모델에 참여 하려면 IME가 NotifyWinEvent 함수 또는 유사한 함수를 사용 하 여 세 개의 새 Windows 이벤트를 발생 시켜야 합니다.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. 이러한 새 이벤트는 다음과 같습니다.These new events are:

  • EVENT_OBJECT_IME_SHOW -IME가 표시 되 면이 이벤트를 발생 시킵니다.EVENT_OBJECT_IME_SHOW - Raise this event when the IME becomes visible.
  • EVENT_OBJECT_IME_HIDE -IME를 숨기면이 이벤트를 발생 시킵니다.EVENT_OBJECT_IME_HIDE - Raise this event when the IME is hidden.
  • EVENT_OBJECT_IME_CHANGE -IME를 이동 하거나 크기를 변경할 때이 이벤트를 발생 시킵니다.EVENT_OBJECT_IME_CHANGE - Raise this event when the IME moves or changes size.

호환성 선언Declaring compatibility

Ime는 ITfCategoryMgr:: RegisterCategory를 사용 하 여 IME에 GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT 범주를 등록 하 여 호환 가능 함을 선언 합니다.IMEs declare that they are compatible by registering the category GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT for their IME using ITfCategoryMgr::RegisterCategory.

기본 IME 모드를 켜기로 설정 합니다.Set the default IME mode to on

Ime에 대해 더 나은 UX를 제공 합니다.We provide a better UX for IMEs.

데스크톱 응용 프로그램에 대 한 DPI 크기 조정 지원DPI scaling support for desktop applications

향상 된 DPI 크기 조정 지원을 통해 각 데스크톱 프로세스의 선언 된 DPI 인식 수준을 쿼리하여 UI의 크기를 조정 해야 하는지 여부를 결정할 수 있습니다.Enhanced DPI scaling support enables querying the declared DPI awareness level of each desktop process to determine if it needs to scale the UI. 다중 모니터 시나리오에서 Windows는 각 모니터의 DPI 설정에 맞게 UI의 크기를 조정 합니다.In a multi-monitor scenario, Windows scales the UI appropriately for different DPI settings on each monitor.

IME는 각 응용 프로그램 프로세스의 컨텍스트에서 실행 되므로 IME에 대 한 DPI 인식 수준을 선언 하면 안 됩니다.Because your IME runs in the context of each application's process, you shouldn't declare a DPI awareness level for your IME. 이렇게 하면 IME가 현재 프로세스의 DPI 인식 수준에서 실행 됩니다.This ensures that your IME runs at the DPI awareness level of the current process.

모든 IME UI 요소에를 실행 하는 프로세스의 UI 요소를 사용 하 여 크기 조정 패리티를 포함 하려면 다른 DPI 값에 적절 하 게 응답 해야 합니다.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.

참고

새 데스크톱 응용 프로그램을 사용 하 여 패리티를 보장 하기 위해 IME는 모니터 당 DPI 인식을 지원 해야 하지만 인식 수준 자체는 선언 하지 않아야 합니다.To ensure parity with new desktop applications, your IME should support per monitor–DPI awareness, but shouldn't declare a level of awareness itself. 시스템은 각 시나리오에서 적절 한 크기 조정 요구 사항을 결정 합니다.The system determines the appropriate scaling requirements in each scenario.

데스크톱 응용 프로그램의 DPI 크기 조정 지원 요구 사항에 대 한 자세한 내용은 높은 DPI를 참조 하세요.For details about DPI scaling support requirements for Desktop applications, see High DPI.

IME 설치IME installation

Microsoft Visual Studio를 사용 하 여 IME를 빌드하는 경우에는 InstallShield와 같은 타사 설치 관리자를 사용 하 여 IME에 대 한 설치 환경을 만듭니다.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.

다음 단계에서는 InstallShield를 사용 하 여 IME DLL에 대 한 설치 프로젝트를 만드는 방법을 보여 줍니다.The following steps show how to use InstallShield to create a setup project for your IME DLL.

  • Visual Studio를 설치합니다.Install Visual Studio.
  • Visual Studio를 시작합니다.Start Visual Studio.
  • 파일 메뉴에서 새로 만들기 를 가리키고 프로젝트를 선택 합니다.On the File menu, point to New and select Project. 새 프로젝트 대화 상자가 열립니다.The New Project dialog opens.
  • 왼쪽 창에서 템플릿 > 기타 프로젝트 형식 > 설정 및 배포로 이동 하 고 InstallShield 제한 된 버전 사용을 클릭 한 다음 확인을 클릭 합니다.In the left pane, navigate to Templates > Other Project Types > Setup and Deployment, click Enable InstallShield Limited Edition, and click OK. 설치 지침을 따릅니다.Follow the installation instructions.
  • Visual Studio를 다시 시작합니다.Restart Visual Studio.
  • IME 솔루션 (.sln) 파일을 엽니다.Open the IME solution (.sln) file.
  • 솔루션 탐색기에서 솔루션을 마우스 오른쪽 단추로 클릭 하 고 추가를 가리킨 다음 새 프로젝트를 선택 합니다.In Solution Explorer, right-click the solution, point to Add, and select New Project. 새 프로젝트 추가 대화 상자가 열립니다.The Add New Project dialog opens.
  • 왼쪽 트리 뷰 컨트롤에서 템플릿 > 다른 프로젝트 형식 > InstallShield 제한 된 버전으로 이동 합니다.In the left tree view control, navigate to Templates > Other Project Types > InstallShield Limited Edition.
  • 가운데 창에서 InstallShield 제한 된 버전 프로젝트를 클릭 합니다.In the center window, click InstallShield Limited Edition Project.
  • 이름 텍스트 상자에 "setupime"를 입력 하 고 확인을 클릭 합니다.In the Name text box, type "SetupIME" and click OK.
  • 프로젝트 도우미 대화 상자에서 응용 프로그램 정보를 클릭 합니다.In the Project Assistant dialog, click Application Information.
  • 회사 이름 및 다른 필드를 입력 합니다.Fill in your company name and the other fields.
  • 응용 프로그램 파일을 클릭 합니다.Click Application Files.
  • 왼쪽 창에서 [INSTALLDIR] 폴더를 마우스 오른쪽 단추로 클릭 하 고 새 폴더를 선택 합니다.In the left pane, right-click the [INSTALLDIR] folder, and select New Folder. 폴더 이름을 "플러그 인"으로 합니다.Name the folder "Plugins".
  • 파일 추가를 클릭 합니다.Click Add Files. IME DLL로 이동 하 여 플러그 인 폴더에 추가 합니다.Navigate to your IME DLL and add it to the Plugins folder. IME 사전에 대해이 단계를 반복 합니다.Repeat this step for the IME dictionary.
  • IME DLL을 마우스 오른쪽 단추로 클릭 하 고 속성을 선택 합니다.Right-click the IME DLL and select Properties. 속성 대화 상자가 열립니다.The Properties dialog opens.
  • 속성 대화 상자에서 COM & .net 설정 탭을 클릭 합니다.In the Properties dialog, click the COM & .NET Settings tab.
  • 등록 유형에서 직접 등록 을 선택 하 고 확인을 클릭 합니다.Under Registration Type, select Self-registration and click OK.
  • 솔루션을 빌드합니다.Build the solution. IME DLL이 빌드되고 InstallShield에서 사용자가 Windows에 IME를 설치할 수 있도록 하는 setup.exe 파일을 만듭니다.The IME DLL is built, and InstallShield creates a setup.exe file that enables users to install your IME on Windows.

사용자 고유의 설치 환경을 만들려면 ITfInputProcessorProfileMgr:: RegisterProfile 메서드를 호출 하 여 설치 하는 동안 IME를 등록 합니다.To create your own installation experience, call the ITfInputProcessorProfileMgr::RegisterProfile method to register the IME during installation. 레지스트리 항목을 직접 쓰지 않습니다.Don't write registry entries directly.

설치 후에 IME를 즉시 사용할 수 있어야 하는 경우 InstallLayoutOrTip 를 호출 하 여 사용자가 사용 하도록 설정 된 입력 방법에 다음 psz 매개 변수에 대 한 형식을 사용 하 여 ime를 추가 합니다.If the IME must be usable immediately after installation, call InstallLayoutOrTip to add the IME to user-enabled input methods, using the following format for the psz parameter:

<LangID 1>:{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}

IME 접근성IME accessibility

Ime가 접근성 요구 사항을 준수 하 고 내레이터를 사용 하도록 하려면 다음 규칙을 구현 합니다.Implement the following convention to make your IMEs conform to the accessibility requirements and to work with Narrator. 후보 목록에 액세스할 수 있도록 하려면 Ime가이 규칙을 따라야 합니다.To make candidate lists accessible, your IMEs must follow this convention.

  • 후보 목록에는 변환 후보 목록에 대 한 "IME_Candidate_Window"와 같은 UIA_AutomationIdPropertyId 또는 예측 후보 목록의 "IME_Prediction_Window"가 있어야 합니다.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.
  • 후보 목록이 표시 되 고 사라지면 각각 UIA_MenuOpenedEventIdUIA_MenuClosedEventId형식의 이벤트를 발생 시킵니다.When the candidate list appears and disappears, it raises events of type UIA_MenuOpenedEventId and UIA_MenuClosedEventId, respectively
  • 현재 선택한 후보가 변경 되 면 후보 목록에서 UIA_SelectionItem_ElementSelectedEventId발생 합니다.When the current selected candidate changes, the candidate list raises a UIA_SelectionItem_ElementSelectedEventId. 선택한 요소의 속성 UIA_SelectionItemIsSelectedPropertyId TRUE와 같아야 합니다.The selected element should have a property UIA_SelectionItemIsSelectedPropertyId equal to TRUE.
  • 후보 목록의 각 항목에 대 한 UIA_NamePropertyId 는 후보 이름 이어야 합니다.The UIA_NamePropertyId for each item in the candidate list must be the name of the candidate. 필요에 따라 UIA_HelpTextPropertyId를 통해 후보를 구분 하는 추가 정보를 제공할 수 있습니다.Optionally, you can provide additional information to disambiguate candidates through UIA_HelpTextPropertyId.