´Ù. Űº¸µå ÈÅ

ÈŠŸÀÔÁß¿¡ °³³äÀûÀ¸·Î °¡Àå ÀÌÇØÇϱ⠽±°í °£´ÜÇÑ Å°º¸µå ÈÅ ÇÁ·Î½ÃÀú¸¦ ÀÛ¼ºÇØ º¸ÀÚ. ´ÙÀ½ ¿¹Á¦´Â Űº¸µå ¸Þ½ÃÁö¸¦ ÈÅÅ·ÇÏ¿© ¸Þ½ÃÁö¿¡ ´ëÇÑ Á¤º¸¸¦ ÀÛ¾÷¿µ¿ª¿¡ º¸¿©ÁØ´Ù.

 

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À¸·Î Àü´ÞµÇ´Â Ãß°¡ Á¤º¸ÀÇ Àǹ̴ ´Þ¶óÁø´Ù. Áö¿ª ÈÅÀº »ç¿ë ¹æ¹ýÀÌ ½±°í º°´Ù¸¥ Á¦¾à »çÇ×À̳ª ÁÖÀÇ »çÇ×ÀÌ ¾ø¾î À§ÇèÇÏÁöµµ ¾ÊÀº ÆíÀÌ´Ù.