와 assosiated 또는 PictureBox를 로케일 영어 1033 (국가 및 언어 설정에서 설정 가능)에서 ANSI 창입니다. WM_IME_CHAR 또는 WM_UNICHAR 또는 WM_CHAR에서 MS IME 또는 Baidu 입력을 통해 유니 코드를 입력 할 때 wParam은 항상 63 (Char '?')입니다.C 번호 :받는 방법 IME 유니 코드 숯불는 VB6, UserControl을 또는 형태의 ANSI 창 (UC 또는 PictureBox를)
비교를 위해 IsWindowUnicode API가 CreateWindowExW API에서 사용하는 SDK TextBox를 만듭니다. 유니 코드 창이므로 유니 코드 창이므로 wParam이 유니 코드 키 코드임을 알 수 있습니다. WM_UN_CHAR 및 WM_UNICHAR 및 WM_CHAR을 하위 클래스로 만들 때 볼 수 있습니다. 그래서 유니 코드 문자를 쉽게 얻을 수 있습니다.
나는 ANSI 윈도우와 OS 계약을 생각하고 유니 코드 창 다릅니다. IME 유니 코드 문자를 얻으려면 어떻게해야합니까?
C#에서 동일한 코드가 작동 어떤 로케일 중 1033 (영어, 미국) 또는 2052 (중국어 PRC), C#을 윈도우 유니 코드 항상 때문이다. http://support.microsoft.com/kb/193540/en-us :
어렵지만 여전히 실행 가능합니다. - vbforums의 [이 긴 스레드의 14 페이지] (http://www.vbforums.com/showthread.php?698563-CommonControls- (MS 대체 공통 컨트롤)/14 페이지 참조)를 참조하십시오. 유니 코드 메시지 펌프를 검색하십시오 (필요하지 않음). – wqw
링크를 제공해 주셔서 감사합니다. 하지만 Krool의 TextBox는 유니 코드 창이므로 wParam은 유니 코드 키 코드입니다. UC 또는 Form 또는 PictureBox의 경우 유니 코드를 입력 할 때 locale = 1033 (영어, 미국)의 ANSI 창입니다. Subclass 프로 시저에서 wParam은 항상 63입니다. 이것이 루트 문제입니다. 유일한 방법은 IMM 윈도우를 서브 클래스화할 수 있습니다. 쉽게 테스트 됨 : 개인 선언 함수 IsWindowUnicode Lib "user32"(ByVal hWnd As Long) 긴 숫자로 – Jonney
GetWithowLong ** W ** 'GWL_WNDPROC'를 사용하여 모든 hWnd를 유니 코드로 "전환"할 수 있으므로 IsWindowUnicode 테스트 이것이 당신 문제라고 생각한다면 긍정적입니다. VB의 ANSI 메시지 펌프는 여전히 더 큰 문제 IMHO입니다. Krool은 (내가 프로젝트에서했던 것처럼) 좋은 메시지 고리를 얻기 위해 의지하지 않고 유니 코드 지원을 해킹했다. 코드가 정상적으로 작동하는 이유와 문제가 발생한 이유를 알아 내야합니다. – wqw