-
WM_KEYDOWN &H0100
WM_KEYUP &H0101
WM_CHAR &H0102
WM_IME_STARTCOMPOSITION &H010D
WM_IME_COMPOSITION &H010F
WM_IME_ENDCOMPOSITION &H010E
WM_IME_SETCONTEXT &H0281
WM_IME_NOTIFY &H0282
WM_IME_CONTROL &H0283
WM_IME_COMPOSITIONFULL &H0284
WM_IME_SELECT &H0285
WM_IME_CHAR &H0286
WM_IME_KEYDOWN &H0290
WM_IME_KEYUP &H0291
WM_IME_REPORT &H0280
WM_IME_REQUEST &H0288
WM_KEYDOWN:
키가 눌릴 때 발생한다.
한글 입력 중에는 wParam에 229(콘트롤의 "KeyDown"이벤트와 같음)를, lParam 에 키코드와 다른 정보를 함께 반환한다.
lParam 값을 API 함수인 "MapVirtualKey" 를 사용하여 한글 입력 중에 눌린 키를 알아낼 수 있다.
한글이 아닐 경우에는 wParam 에 콘트롤의 "KeyDown" 이벤트에서 반환하는 "KeyCode 와 같은 값을 반환한다.(이 때도 lParam 에 같은 값이 반환됨)
WM_KEYUP:
콘트롤의 "KeyUp" 이벤트와 같다.
WM_CHAR:
콘트롤의 "KeyPress" 이벤트와 같으나 한글의 경우에는 한글의 첫바이트만 반환한다.
WM_IME_STARTCOMPOSITION :
한글을 처음 입력할 때 발생한다.
영문 입력 후 또는 수자 입력 후 한글 키를 누르면 단 한번만 발생한다.
예) "123" 을 입력하다가 "ㄱ" 을 누르면 발생 (WM_IME_ENDCOMPOSITION 발생 후 한글 입력시 발생)
WM_IME_COMPOSITION:
한글 입력 중에 발생한다 (한글을 합성중이라는 의미 임)
WM_IME_STARTCOMPOSITION 가 발생한 후, 한글 키를 누를 때 마다 발생하며 wParam과 lParam에 부가적인 정보가 반환 된다.
wParam : 합성 중인 한글에 대한 ASCII Code가 반환된다.
lParam : 반환된 wParam가 합성중인 글자 인지 완성된 글자인지를 반환한다.
값 의미
&H6018 : 반환된 wParam가 합성중인 글자임
&H800 : 반환된 wParam가 완성된 글자임
WM_IME_ENDCOMPOSITION :
한글 입력을 종료할 때 발생한다.
한글 입력 중 한글키가 아닌 키를 누를 때(숫자키, Enter키, 한영 변환키, 방향키 등), 마우스로 클릭하거나, 포거스를 잃을 때 발생한다.(즉 한글 입력 중에는 검정 상자가 생기는 데, 그 검정 상자가 없어질 때)
WM_IME_CHAR:
완성된 한글에 대한 ASCII값을 반환한다.
WM_IME_COMPOSITION 발생 후(lParam 값이 &H800일 때) 발생한다.
위에서 설명한 바와 같이 한글의 경우 WM_CHAR가 한글의 첫바이트만 반환하기 때문에 완성된 한글만을 알아내기 위해서는 이 메세지를 사용해야 한다.(실제로는 WM_IME_COMPOSITION 메세지를 사용하기 때문에 별로 사용하지 않음)
WM_IME_KEYDOWN:
한글 입력중 한글키가 아닌 키를 누를 경우 그 키값을 반환한다.
WM_IME_ENDCOMPOSITION 메세지 발생 후에(한글 입력을 종료하고)발생한다.
그 외의 메세지들은 본인도 내용을 충분히 모르고 있으며 실제로 사용할 필요도 없었다. 따라서 어렴풋이 내용을 이해는 하고 있으나 여기서 설명을 하지 않는다. 아래 내용은 TextBox를 후킹하여 한글을 입력할 때 발생하는 메세지와 반환 되는 wParam, lParam 값들이다. 중급이상의 실력이 있는 분이라면 충분히 이해할 수 있을 것이라 믿는다.
- "가나다"를 입력하고 Enter를 쳤을 경우 발생하는 메세지
메세지 wParam lParam
========================= ============== =======
입력대상이 포커스를 받았을 때:
WM_IME_SETCONTEXT 1 C000000F
WM_IME_NOTIFY 10 0
WM_IME_NOTIFY 11 0
WM_IME_NOTIFY 11 0
ㄱ:
WM_KEYDOWN 229 130001
WM_IME_STARTCOMPOSITION 0 0
WM_IME_NOTIFY 11 0
WM_IME_COMPOSITION 42145(ㄱ) 6018: 합성중인 글씨임을 의미함
WM_KEYUP 82(R) C0130001
ㅏ:
WM_KEYDOWN 229 250001
WM_IME_NOTIFY 11 0
WM_IME_COMPOSITION 45217(가) 6018
WM_KEYUP 75(K) C0250001
ㄴ:
WM_KEYDOWN 229 1F0001
WM_IME_NOTIFY 11 0
WM_IME_COMPOSITION 45219(간) 6018
WM_KEYUP 83(S) C01F0001
ㅏ:
WM_KEYDOWN 229 250001
WM_IME_CHAR 45217(가) 1
WM_IME_COMPOSITION 45217(가) 800: 완성된 한글
WM_IME_COMPOSITION 45994(나) 6018: 합성중인 한글
WM_IME_NOTIFY 11 0
WM_CHAR 176 1 : wParam(176) : 한글의 첫 바이트
WM_IME_NOTIFY 11 0
WM_IME_COMPOSITION 45994(나) 6018
WM_KEYUP 75(K) C0250001
ㄷ:
WM_KEYDOWN 229 120001
WM_IME_NOTIFY 11 0
WM_IME_COMPOSITION 45998(낟) 6018
WM_KEYUP 69(E) C0120001
ㅏ:
WM_KEYDOWN 229 250001
WM_IME_CHAR 45994(나) 1
WM_IME_COMPOSITION 45994(나) 800
WM_IME_COMPOSITION 46297(다) 6018
WM_IME_NOTIFY 11 0
WM_CHAR 179 1
WM_IME_NOTIFY 11 0
WM_IME_COMPOSITION 46297(다) 6018
WM_KEYUP 75(K) C0250001
Enter:
WM_KEYDOWN 229 1C0001
WM_IME_ENDCOMPOSITION 0 0
WM_IME_CHAR 46297(다) 1
WM_IME_COMPOSITION 46297(다) 800
WM_IME_KEYDOWN 13 1C0001
WM_IME_NOTIFY 11 0
WM_CHAR 180 1
WM_KEYDOWN 13 1C0001
WM_CHAR 13 1C0001
WM_KEYUP 13 C01C0001
WM_KEYUP 229 80000001
WM_IME_SETCONTEXT 0 C000000F
출처 : http://longjourney.springnote.com/pages/1829806