ÅëÇÕ°Ë»ö
¡¤ ¸¶À»¼­ºñ½º¶õ?  ¡¤ Æ÷·³¸¶À»  ¡¤ ÀϹݸ¶À»  ¡¤ Å׸¶¸¶À»  ¡¤ ¸¶À»·©Å·  ¡¤ Ȱµ¿¿Õ
¡¤ µ¦½ºÆÛÆ®¶õ?  ¡¤ TECBOX   ¡¤ PRSBOX   ¡¤ ÀÌ¿ë¾È³»  
¡¤ DEXTÁ¦Ç°±º  ¡¤ ³»ºÎÅëÁ¦½Ã½ºÅÛ  ¡¤ ¼Ö·ç¼Çº£ÀÌ  ¡¤ S/W & ESD ÄÄÆ÷³ÍÆ®
¡¤ ¾ÆÀÌÆ¼Æ®·£µå  ¡¤ Á¦ÈÞ¹®ÀÇ  ¡¤ Event Mall
¡¤ ImDev-¸®Äí¸£ÆÃ  ¡¤ ImDev-¾Æ¿ô¼Ò½Ì  ¡¤ ´å³ÝÄÁ¼³ÆÃ
¡¤ IT °úÁ¤  ¡¤ DOT Zone
¡¤ LiveSeminar  ¡¤ LiveConference
Visual C++ Æ÷·³¸¶À» ÀÔ´Ï´Ù.
  ¸¶À»µî±Þ Visual C++   ÀÌ ¸¶À»Àº Æ÷·³¸¶À» ÀÔ´Ï´ÙÀÌ ¸¶À»Àº ÀÚÀ¯°¡ÀÔÁ¦ ¸¶À» ÀÔ´Ï´Ù ¸¶À»¼Ò°³ ÆäÀÌÁö·Î À̵¿ ÀüÀÔ½Åû
¸¶À»ÃÌÀåÃÌÀå ³ª¼ºÈÆ ÁֹΠ31089 since 2006-12-29
¿ì¸®¸¶À» °øÁö»çÇ×
Áú¹®&´äº¯
°­ÁÂ&ÆÁ
ÀÚÀ¯°Ô½ÃÆÇ
ÀÚ·á½Ç
¾Ù¹ü
°³ÀÎ°Ô½ÃÆÇ
¸¶À» °Ô½ÃÆÇ
µî·ÏµÈ ¸¶À» °Ô½ÃÆÇÀÌ
¾ø½À´Ï´Ù.
¶ûµ¥ºê °Ô½ÃÆÇ
Ä®·³ °Ô½ÃÆÇ
°³¹ßÀÚ °íÃæ»ó´ã
Dev Talk
ÀÚÀ¯Åä·Ð¹æ
º­·è½ÃÀå
À糪¹Ì ¿ì½º°³
  ITÀ̾߱â
  ³ë¶¥¿£Áö´Ï¾îÀÇ ³ëÆ®
  °í°´Áö¿ø °Ô½ÃÆÇ
¸¶ÀÌ µ¥ºêÇǾÆ
 ³ªÀÇ e-Money ³»¿ª
 È°µ¿¿Õ My Page
 ½ºÅ©·¦ÇÑ °Ô½Ã±Ûº¸±â
 ÂÊÁö°ü¸®
 Áּҷϰü¸®
 ÀÏÁ¤°ü¸®

 °­ÁÂ&ÆÁ
 [hook] win32 ±Û·Î¹ß ÈÄÅ·Çϱ⠠| VC++ ÀÏ¹Ý 2001-12-19 ¿ÀÈÄ 2:09:12
Á¶°æ¹Î ¹øÈ£: 3647  / ÀÐÀ½:10,323

 ¿ÀÀü 1:42 2000/10/05
 Á¶°æ¹Î
 Global Hooking in Win32
 ====================================================

 ÈÄÅ©¿¡´Â µÎ°¡Áö°¡ ÀÖ´Ù. 
   Local Hook   - ÇϳªÀÇ ½º·¹µå³ª ÇÁ·Î¼¼½º ¾È¿¡¼­ÀÇ ÈÄÅ·
   Global Hook  - Àü¿ª ¸ðµç À©µµ¿ìµé¿¡ ´ëÇÑ ÈÄÅ·

 ÈÄÅ©¸¦ Çϱâ À§Çؼ­´Â ±âº»ÀûÀ¸·Î µÎ°¡Áö ÀÚ·áÇüÀ» ¾Ë¾Æ¾ß ÇÑ´Ù.
   HHOOK - ÈÄÅ© Çڵ頠À©µµ¿ì ½Ã½ºÅÛ¿¡¼­ Çѹø À̺¥Æ®°¡
           ¹ß»ýÇϸé ÈÄÅ© Ã¼ÀÎÀǠù ÈÄÅ©Çڵ鿡°Ô À̺¥Æ®¸¦
           ³Ñ±ä´Ù. °¢ ÈÄÅ©µéÀº ´ÙÀ½ ÈÄÅ©¸¦ È£ÃâÇÏ¿© ÈÄũüÀο¡
           Àִ ¸ðµç ÈÄÅ© ÇÁ·Î½ÃÁ®¸¦ È£ÃâÇϰԠµÈ´Ù.
   HOOKPROC - ÈÄÅ© ÇÁ·Î½ÃÁ®·Î ÈÄÅ©½Ã È£ÃâµÇ´Â ÇÁ·Î½ÃÁ®ÀÌ´Ù.
    LRESULT CALLBACK fnHookProc(int nCode, WPARAM wParam, LPARAM lParam)
    ¶ó´Â ÀÚ·áÇüÀ» °®´Â´Ù.

 1. ·ÎÄàÈÄÅ·
   SetWindowHookEx¸¦ ÀÌ¿ëÇϸ頰£´ÜÈ÷ ±¸ÇöÀÌ °¡´ÉÇÏ´Ù.
   °¢ ÈÄÅ©´Â ÈÄÅ© Å¸ÀÔÀÌ Àִµ¥ ¾Æ·¡¿Í °°´Ù.
      WH_CALLWNDPROC - À©µµ¿ì ¸Þ¼¼Áö°¡ ¸ñÀûÁö·Î Àü´ÞµÇ±â Àü¿¡
                       ¸Þ¼¼Áö¸¦ ÈÄÅ©ÇÒ¶§ ¾´´Ù (SendMessage)
                       CallWndProc¶ó´Â ÈÄÅ©ÇÁ·Î½ÃÁ®¸íÀÇ µµ¿ò¸» ÂüÁ¶ÇÑ´Ù.
      WH_CALLWNDPROCRET - À©µµ¿ì ¸Þ¼¼Áö°¡ ¸ñÀûÁö¿¡ Àü´ÞµÇ¾î Ã³¸®
                          µÈ ÈÄ ÈÄÅ©°¡ ÀϾ´Ù
                          CallWndRetProcÇÔ¼ö¸í µµ¿ò¸» ÂüÁ¶
      WH_CBT - computer-based training (CBT) application ¿¡ À¯¿ëÇÑ
               ÈÄÅ© Å¸ÀÔ CBTProc ÇÔ¼ö ÂüÁ¶
      WH_DEBUG - µð¹ö±ë¿¡ À¯¿ëÇÑ ÈÄÅ© DebugProc ÂüÁ¶
      WH_FOREGROUNDIDLE - Foreground»óÅÂÀִ À©µµ¿ì°¡ idle»óÅ·Πµé¾î°¥
                          ¶§ »ý±â´Â ÈÄÅ© À̴ idle½Ã ³·Àº ¿ì¼±¼øÀ§
                          (low priority)¸¦ ÁÙ¶§ À¯¿ëÇÏ´Ù ForegroundIdleProc
      WH_GETMESSAGE - ¸Þ¼¼Áö°¡ PostµÈ ÈÄ ÈÄÅ©µÊ (PostMessage)
                      GetMsgProc ÇÔ¼ö ÂüÁ¶
      WH_JOURNALPLAYBACK - WH_JOURNALRECORD¿¡ ÀÇÇØ¼­ RecordµÇ±â Àü¿¡
                           ÀϾ´Â ÈÄÅ© JournalPlaybackProc
      WH_JOURNALRECORD - Input message°¡ ½Ã½ºÅÛ ¸Þ¼¼Áö Å¥·Î µé¾î°¡´Â°ÍÀ»
                         RecordÇϴ ÈÄÅ© JournalRecordProc 
      WH_KEYBOARD - µîµîÀÌ ÀÖ´Ù.... -_- µµ¿ò¸» ÂüÁ¶..

 
 --------------------- ·ÎÄàÈÄÅ© ¿¹Á¦ ------------------------------
    HHOOK hHook;
    HOOKPROC hProc;
              :
    hProc = CallWndProc;            // CallWndProc ÈÄÅ© ÇÁ·Î½ÃÁ®·Î ¿¬°á
    hHook = ::SetWindowsHookEx(     // ÈÄÅ©¸¦ ¼³Ä¡ÇÑ´Ù. ( ÈÄũüÀο¡ ³¢¿ö³Ö´Â´Ù )
                 WH_CALLWNDPROC,    // WH_CALLWNDPROC ÈÄÅ© ¼³Ä¡
                 hProc,             // ÈÄÅ©Â÷·Ê°¡ ¿À¸é ºÐ±âµÇ´Â ÄݹéÈÄÅ© ÇÁ·Î½ÃÁ®
                 (HINSTANCE) NULL,  // Àü¿ª ÈÄÅ©°¡ ¾Æ´Ñ ·ÎÄàÈÄÅ©ÀÓÀ» ¸»ÇÑ´Ù
                 dwTreadID);        // Æ¯Á¤ ½º·¹µå¸¦ Á¤ÇÑ´Ù 0 À̸é ÇöÀç ½º·¹µå


    ¸¸ÀÏ ¿©·¯ ½º·¹µåÁß ÇÑ HWND°¡ ¼ÓÇÑ ½º·¹µå¸¦ ¾ò°í ½ÍÀ¸¸é
    DWORD    dwProcessID = NULL;
    DWORD    dwTreadID = ::GetWindowThreadProcessId( hWnd, &dwProcessID );

    if( dwProcessID )
    {
                 : 
         ÈÄÅ© ¼³Ä¡Äڵ堸Ǡ¸¶Áö¸·ÀÎÀÚ¿¡ dwThreadID¸¦ ³ÖÀ¸¸é µÈ´Ù.     
    }

// ÀÚ¼¼ÇÑ ÇÁ·Î½ÃÁ® µµ¿ò¸»À» º¸¸é ÀÚ¼¼È÷ ¾Ë¼ö ÀÖ´Ù.
LRESULT WINAPI CallWndProc(int nCode, WPARAM wParam, LPARAM lParam) 

    CWPSTRUCT* lpWp = (CWPSTRUCT*)lParam;
     //PMSG lpMsg = (PMSG)lParam;    
    if (nCode < 0 && hWnd == lpWp->hwnd )  // do not process message 
        return CallNextHookEx(m_stHookCallProc.hHook, nCode, wParam, lParam); 

    switch(  lpWp->message  )
    {
         case EM_REPLACESEL :
         TRACE("CallWndProc EM_REPLACESEL %s\r\n ", (char*)lpWp->lParam );
         break;

         default : 
         break;
    }    
    return CallNextHookEx(m_stHookCallProc.hHook, nCode, 
        wParam, lParam); 

 
2 Àü¿ª ÈÄÅ· 
  Àü¿ª ÈÄÅ·À» Çϱâ À§Çؼ­´Â ÈÄÅ© ÇÁ·Î½ÃÁ®¸¦ dll¾È¿¡ ³Ö¾î¾ß ÇÑ´Ù.
 


 --------------------- Àü¿ª ÈÄÅ© ¿¹Á¦ --------------------------

  testdll.dll ¿¡¼­ ............

// dll¿¡¼­ ¾²´Â ÀÚ·á´Â dll°øÀ¯¸¦ Çß´Ù.
// ÀÌ ÈÄÅ© ÇÁ·Î½ÃÁ® dllÀº ³» ÇÁ·Î±×·¥¿¡¼­ ¾²À̱⵵ ÇÏÁö¸¸
// ½Ã½ºÅÛ¿¡ ÀÇÇØ¼­ ÀÌ dllÀÌ ¶Ç ¿­¸®°Ô µÈ´Ù. ( dllÀÇ ÂüÁ¶Ä«¿îÆ® Áõ°¡
//  °¡ ÀϾÁö ¾Ê°í »õ·Î dllÀÌ »ý±ä´Ù. µû¶ó¼­ µÎ dllÀº ÀÚ·á°¡
//  ºÐ¸®µÇ¾î Àִ ¼ÀÀÌ´Ù. )
// ±×·¯¹Ç·Î ºÎµæÀÌ ÇϰԠÀڷḦ °øÀ¯ÀÚ·á·Î ÇؾߠÇÑ´Ù.
#pragma data_seg(".shared")
    HHOOK             _hHook = NULL;
    HWND            _hTarget = NULL;
#pragma data_seg()
// °øÀ¯ ÀÚ·á·Î ÇßÀ» °æ¿ì ¾Æ·¡Ã³·³ ¸µÄ¿ ¿É¼Çµµ ÁÖ¾î¾ß ÇÑ´Ù.
#pragma comment(linker, "/SECTION:.shared,RWS")

// Àڷᠾ\½º ÇÔ¼ö ¸¶·Ã...
extern "C" __declspec(dllexport) void fnSetHook( HHOOK hHook )
{
    _hHook = hHook;
}

extern "C" __declspec(dllexport) void fnSetHWND( HWND hWnd )
{
    _hTarget = hWnd;
    char szBuf[20];
    wsprintf( szBuf, "%lu", (ULONG)_hTarget );
    MessageBox( NULL, szBuf, "fnSetHWND´ç½ÃÀÇ _hTarget°ª", MB_OK);


extern "C" __declspec(dllexport) HHOOK fnGetHook()
{
    return _hHook;
}

// ÄݹéÀ» À§ÇÑ CALLBACK ÄݸµÄÁº¥¼Ç Å°¿öµå¸¦ ³Ö°Ô µÇ¸é ³ªÁß¿¡ GetAddressProc½Ã
// NULL°ªÀ» ¸®ÅÏÇϹǷΠ±×³É ÄݸµÄÁº¥¼ÇÀ» ¹«½ÃÇß´Ù
//extern "C" __declspec(dllexport) LRESULT CALLBACK fnCallWndProc(int nCode, WPARAM wParam, LPARAM 
lParam)
extern "C" __declspec(dllexport) LRESULT fnCallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    CWPSTRUCT* lpWp = (CWPSTRUCT*)lParam;
     
    if( nCode >= 0  ) //&& _hTarget == lpWp->hwnd ) // do not process message 
    { 
        switch(  lpWp->message  )
        {
        case EM_REPLACESEL :
            if( _hTarget == lpWp->hwnd )
            {
                MessageBox( NULL, "EM_REPLACESEL ¸Þ¼¼Áö ¹ß½ß", "¸Þ¼¼Áö ¹ß½ßin 
dll", MB_OK);
            }
            break;

        default : 
            break;
        }    
    }
    return CallNextHookEx( _hHook, nCode, wParam, lParam); 
}


 ³» ÇÁ·Î±×·¥¿¡¼­ .........................
HINSTANCE    hInstDll = NULL
HHOOK        hHook = NULL;

// dllÀ» ¿¬´Ù.
hInstDll = LoadLibrary("TestDll.dll"); 
if( hInstDll )
{
    // ÈÄÅ© ÇÁ·Î½ÃÁ®¸¦ Ã£¾Æ³½´Ù.
    LRESULT (*hHookDllProc)(int, WPARAM, LPARAM ) = (LRESULT (*)(int, WPARAM, LPARAM ))
GetProcAddress(hInstDll, "fnCallWndProc"); 
    if( hHookDllProc ) // ÀÖÀ¸¸é ÈÄÅ©¸¦ ¼³Ä¡ÇÑ´Ù.
        hHook = SetWindowsHookEx( WH_CALLWNDPROC, (HOOKPROC)hHookDllProc, hInstDll, 0); 
    
        // dll³»ÀÇ ÀڷḦ ¼¼ÆÃÇÑ´Ù. HHOOK¿Í HWND °ª ¼¼ÆÃ
    void (*lpfnSetHook)(HHOOK) = (void (*)(HHOOK))GetProcAddress(hInstDll, "fnSetHook");
    if( lpfnSetHook )
        (*lpfnSetHook)( hHook );
        void (*lpfnSetHWND)(HWND) = (void (*)(HWND))GetProcAddress
(hInstDll, "fnSetHWND");
    if( lpfnSetHWND )
        (*lpfnSetHWND)( m_hTarget );
}
ÄÚ¸àÆ®¾²±â
  ÁÁÀ½   ³î¶÷   ±Ã±Ý   È­³²   ½½ÇÄ   ÃÖ°í   ħ¹¬   ½Ã¹«·è   ºÎ²ô·³   ³­°¨
* ÄÚ¸àÆ®´Â 500ÀÚ À̳»(¶ç¾î¾²±â Æ÷ÇÔ)·Î Àû¾îÁÖ¼¼¿ä.
¸ñ·Ï º¸±â   Áö±Ý º¸°í °è½Ã´Â ±ÛÀ» ȸ¿ø´ÔÀÇ my Mblog >> ½ºÅ©·¦¿¡ ³Ö¾îµÎ°í ´ÙÀ½¿¡ ¹Ù·Î º¸½Ç ¼ö ÀÖ½À´Ï´Ù.  

 µ¦½ºÆÛÆ®(dExpert)
15,000¿ø
15,000¿ø
15,000¿ø
10,000¿ø
15,000¿ø
15,000¿ø
10,000¿ø
50,000¿ø
3,000¿ø
3,000¿ø
10,000¿ø
5,000¿ø
3,000¿ø
10,000¿ø
ȸ»ç¼Ò°³  |   °³ÀÎÁ¤º¸Ãë±Þ¹æÄ§  |   Á¦ÈÞ¹®ÀÇ  |   ±¤°í¹®ÀÇ  |   E-Mail ¹«´Ü¼öÁý°ÅºÎ  |   °í°´Áö¿ø  |   ÀÌ¿ë¾È³»  |   ¼¼±Ý°è»ê¼­
°øÁ¤°Å·¡À§¿øÈ¸ °í½Ã Á¦ 2000-1È£¿¡ µû¸¥ »ç¾÷ÀÚµî·Ï¹øÈ£ ¾È³»: 220-81-90008 / ´ëÇ¥: È«¿µÁØ
¼­¿ï½Ã °­³²±¸ ¿ª»ïµ¿ 662-18 °­³²ÅÚ·¹ÇǾƺôµù 9Ãþ / TEL. 02_511_4824 / FAX. 02_511_4823
Copyright ¨Ï (ÁÖ) µ¥ºêÇǾÆ. All rights reserved.