ÈŠŸÀÔÁß¿¡ °³³äÀûÀ¸·Î °¡Àå ÀÌÇØÇϱ⠽±°í °£´ÜÇÑ Å°º¸µå ÈÅ ÇÁ·Î½ÃÀú¸¦ ÀÛ¼ºÇØ º¸ÀÚ. ´ÙÀ½ ¿¹Á¦´Â Űº¸µå ¸Þ½ÃÁö¸¦ ÈÅÅ·ÇÏ¿© ¸Þ½ÃÁö¿¡ ´ëÇÑ Á¤º¸¸¦ ÀÛ¾÷¿µ¿ª¿¡ º¸¿©ÁØ´Ù.
|
KeyHook |
char Mes[]="Űº¸µå ÈÅ Å×½ºÆ® ÇÁ·Î±×·¥ÀÔ´Ï´Ù.";
char Mes2[128];
char Mes3[128];
int Count=0;
HHOOK hKeyHook;
LRESULT CALLBACK KeyHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode>=0) {
InvalidateRect(hWndMain,NULL,TRUE);
if (wParam == VK_F2) {
wsprintf(Mes2,"F2´Â ÀÔ·ÂÀÌ ±ÝÁöµÈ ŰÀÔ´Ï´Ù.");
return 1;
} else {
wsprintf(Mes2,"nCode=%d, wParam=%u, lParam=%08x, Count=%d",
nCode, wParam, lParam,Count++);
}
}
return CallNextHookEx(hKeyHook,nCode,wParam,lParam);
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch(iMessage) {
case WM_CREATE:
hKeyHook=SetWindowsHookEx(WH_KEYBOARD,KeyHookProc,NULL,GetCurrentThreadId());
return 0;
case WM_KEYDOWN:
wsprintf(Mes3,"½ÇÁ¦ ¹ÞÀº Ű : %u",wParam);
InvalidateRect(hWnd,NULL,TRUE);
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
TextOut(hdc,100,10,Mes,strlen(Mes));
TextOut(hdc,100,30,Mes2,strlen(Mes2));
TextOut(hdc,100,50,Mes3,strlen(Mes3));
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
UnhookWindowsHookEx(hKeyHook);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.
WM_CRAETE¿¡¼ SetWindowsHookEx ÇÔ¼ö·Î KeyHookProc ÈÅ ÇÁ·Î½ÃÀú¸¦ WH_KEYBOARD ÈŠŸÀÔÀÇ ÈŠüÀο¡ Ãß°¡ÇÏ¿´´Ù. ÇöÀç ½º·¹µåÀÇ ID¸¦ ÁÖ¾úÀ¸¹Ç·Î ÀÚ±â ÀÚ½ÅÀÇ Å°º¸µå ¸Þ½ÃÁö¸¸ °¨½ÃÇÏ´Â Áö¿ª ÈÅÀÌ´Ù. »ç¿ëÀÚ°¡ Űº¸µå¸¦ ´©¸£°Å³ª ¶¿ ¶§ Áï, WM_KEYDOWN, WM_KEYUP ¸Þ½ÃÁö°¡ ¹ß»ýÇϸé KeyHookProc ÈÅ ÇÁ·Î½ÃÀú°¡ È£ÃâµÉ °ÍÀÌ´Ù. WM_DESTROY¿¡¼´Â ¼³Ä¡ÇÑ ÈÅ ÇÁ·Î½ÃÀú¸¦ ÇØÁ¦Çϵµ·Ï Çß´Ù.
ÈÅ ÇÁ·Î½ÃÀú·Î Àü´ÞµÈ nCode Àμö°¡ À½¼öÀÏ °æ¿ì´Â ¾î¶² 󸮵µ ÇØ¼´Â ¾È µÇ¸ç °ð¹Ù·Î ÈŠüÀÎÀÇ ´ÙÀ½ ÈÅ ÇÁ·Î½ÃÀú·Î ¸Þ½ÃÁö¸¦ ³Ñ°ÜÁÖ¾î¾ß ÇÑ´Ù. ¿¹Á¦¿¡¼´Â nCode°¡ 0º¸´Ù Å©°Å³ª °°À» ¶§¸¸ ¸Þ½ÃÁö¸¦ °¨½ÃÇϵµ·Ï Çß´Ù. ÈÅ ÇÁ·Î½ÃÀú´Â Àü´ÞµÈ ¸Þ½ÃÁöÀÇ ³»¿ëÀ» Á¡°ËÇÑ ÈÄ ¸Þ½ÃÁö¸¦ º¯°æÇϰųª ¾ø¾Ö¹ö¸± ¼öµµ ÀÖ°í ¾Æ´Ï¸é ±×´ë·Î üÀÎÀÇ ´ÙÀ½ ÇÔ¼ö¿¡°Ô Àü´ÞÇÒ ¼öµµ ÀÖ´Ù.
ÀÌ ¿¹Á¦´Â ÈÅ ÇÁ·Î½ÃÀú°¡ ƯÁ¤ ŰÀÔ·ÂÀ» °ÅºÎÇÒ ¼öµµ ÀÖ´Ù´Â °ÍÀ» º¸¿© ÁÖ±â À§ÇØ F2 ۰¡ ÀԷµǾúÀ» °æ¿ì 0ÀÌ ¾Æ´Ñ °ª(º¸Åë 1 ¶Ç´Â TRUE)À» ¸®ÅÏÇÏ¿© ÀÌ Å°¿¡ ´ëÇÑ ÀÔ·Â ¸Þ½ÃÁö°¡ ´ÙÀ½ ÈÅ ÇÁ·Î½ÃÀú·Î Àü´ÞµÇÁö ¾Êµµ·Ï Çß´Ù. ½Ã½ºÅÛÀº ÈÅ ÇÁ·Î½ÃÀú°¡ 0ÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇϸé ÀÌ ¸Þ½ÃÁö¸¦ Áß°£¿¡¼ ¾ø¾Ö¹ö¸®¸ç ´ÙÀ½ ÈÅ ÇÁ·Î½ÃÀú·Î Àü´ÞµÇÁö ¾ÊÀ¸¹Ç·Î °á±¹ ¸ñÇ¥ À©µµ¿ì´Â ÀÌ ¸Þ½ÃÁö¸¦ ¹ÞÁö ¸øÇÏ°Ô µÈ´Ù. F2°¡ ¾Æ´Ñ °æ¿ì´Â ¾î¶² ۰¡ ÀԷµǾú´ÂÁö wParam°ú lParam¿¡ ´ëÇÑ Á¤º¸¸¦ ȸ鿡 Ãâ·ÂÇϵµ·Ï Çß´Ù.
Űº¸µå ÈÅ ÇÁ·Î½ÃÀú´Â WM_KEYDOWN, WM_KEYUP ¸Þ½ÃÁö¿¡ ´ëÇØ È£ÃâµÇ¹Ç·Î ۰¡ ´·¯Áö°Å³ª ¶³¾îÁú ¶§ ¸ðµÎ È£ÃâµÈ´Ù. ¸¸¾à ÈÅ ÇÁ·Î½ÃÀú³»¿¡¼ ۰¡ ´·¯Áø °ÍÀÎÁö ¶³¾îÁø °ÍÀÎÁö¸¦ ±¸ºÐÇÏ°í ½Í´Ù¸é lParamÀÇ ÃÖ»óÀ§ ºñÆ®°¡ 1ÀÎÁö ¾Æ´ÑÁö¸¦ Á¡°ËÇØ º¸¸é µÈ´Ù. if ((lParam & 0x80000000)==0) Á¶°Ç¹®ÀÌ ÂüÀ̸é WM_KEYDOWN ¸Þ½ÃÁö°¡ Àü´ÞµÈ °ÍÀÌ°í °ÅÁþÀ̸é WM_KEYUPÀÌ Àü´ÞµÈ °ÍÀÌ´Ù.
À§ ¿¹Á¦¿¡¼ ÈŠŸÀÔÀ» WH_MOUSE·Î ¹Ù²Ù¸é ¸¶¿ì½º ¸Þ½ÃÁö¸¦ ÈÅÅ·ÇÒ °ÍÀÌ´Ù. ÈÅÀ» ¼³Ä¡, ÇØÁ¦ÇÏ´Â ¹æ¹ýÀº µ¿ÀÏÇ쵂 nCode ÀμöÀÇ Àǹ̳ª wParam, lParamÀ¸·Î Àü´ÞµÇ´Â Ãß°¡ Á¤º¸ÀÇ Àǹ̴ ´Þ¶óÁø´Ù. Áö¿ª ÈÅÀº »ç¿ë ¹æ¹ýÀÌ ½±°í º°´Ù¸¥ Á¦¾à »çÇ×À̳ª ÁÖÀÇ »çÇ×ÀÌ ¾ø¾î À§ÇèÇÏÁöµµ ¾ÊÀº ÆíÀÌ´Ù.