2011-03-04 6 views
0

안녕하세요 다국어 앱을 쓰고 있는데 WH_KEYBOARD_LL 후크를 사용하고 있습니다. 나는 왜 내가 후크를 사용하는지 mater하지 않는다, 나는 여러 가지를 시도했다. 그러나 이것은 그것을하는 가장 간단하고 빠른 길이다. 지금 후크 PROC메시지를 WH_KEYBOARD_LL에서 unicode 문자를 corespondig로 변환하는 방법

LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam, LPARAM lParam); 

내부 나는 누른 키에 대한 정보를 포함하는 KBDLLHOOKSTRUCTLPARAM에서 매개 변수를받을 수 있습니다. 사용자가 이전에 설정 한 현재 키보드 레이아웃에 따라 유니 코드 문자로이 정보를 콘서트하는 방법이 있습니까? 사용자가 중국어 자판 배열을 설정하고 "a"키를 표시하면 "a"키 스캔 코드가 포함 된 KBDLLHOOKSTRUCT이 수신되며이 스캔 코드를 해당 유니 코드 문자로 변환해야합니다. 나는 당신이 Microsoft Word에서 중국어로 글을 쓸 수 있기 때문에 이것이 가능하다는 것을 안다, 나는 단지 그것을하는 방법을 이해할 수 없다.

감사합니다.

답변

0

MapVirtualKeyEx 또는 ToUnicodeEx와 같을 수 있습니다. 어쨌든 MSDN의 키보드 입력 섹션에있는 함수가 적절한 함수를 포함하고 있다고 생각합니다 (그 목록은 짧습니다).

2

ToUnicodeEx(). 키보드 레이아웃이 단순하지 않으면 실제로 작동하지 않습니다. 죽은 열쇠는 당신을 죽이는 열쇠입니다. 마이클 카플란은 그것에 대해 11 part blog serial을 썼지 만 그는 그것을 끝내지 않고 그냥 포기했다. 당신이 그것을 어떻게 살릴 수 있는지 보시고 희망을 얻지 마십시오. 중국어는 IME (Input Method Editor)를 사용합니다. 소프트웨어, 나는 그것이 뇌졸중에 의해 캐릭터를 구축한다고 생각합니다.

0

변환이 복잡합니다. 간단한 데드 키조차 처리하기가 짜증이 나서 IME를 사용할 때 매우 못 생깁니다.

입력 컨트롤이 이미 변환 된 문자를받는 메시지를 가로 채는 것을 고려하십시오. 물론 코드 작성이 훨씬 더 어렵습니다.

문제는 정상적인 메시지 후크는 대상 프로세스에 dll을 주입해야하며 해당 DLL은 C#으로 작성되어서는 안됩니다. 그러나 아마도 dll을 삽입하지 않고 작동하는 다른 메시지 차단 API가있을 수 있습니다.

+0

당신은 내가 한스 패스언트의 대답을 읽은 후에 당신과 같은 생각을했습니다. 나는 둘 다 시도 할 것이다. – geth

+1

@geth 문제는 단순히 C#에서 전역 메시지 후크를 작성하면 안된다는 것입니다. – CodesInChaos

관련 문제