应该是使用WH_CALLWNDPROC类型钩子截取消息。但是我好像很难做成全局钩子。

解决方案 »

  1.   

    http://www.pcmag.com/article2/0,4149,10206,00.asp
    到裡面下載一個VNC的源程序.裡面有個VNCHook程序..那個就是.應該有別的更好的地址.我只是方便給你貼一下.
      

  2.   

    你要自己生一个共享段
    #pragma data_seg("PublicData") //定义全局数据段
    HHOOK hhook=NULL; //钩子句柄
    HINSTANCE pInstance=NULL; //钩子模块句柄,必须要初始化
    #pragma data_seg()
      

  3.   

    #include "StdAfx.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif#pragma data_seg("data")
    HHOOK      g_hCallWndHook=NULL;
    HINSTANCE    g_hInst=NULL;
    #pragma data_seg()
    #pragma comment(linker, "/section:data,rws")extern "C" __declspec(dllexport) BOOL StartHook();
    extern "C" __declspec(dllexport) BOOL Endhook();
    LRESULT WINAPI CallWndProc(int nCode, WPARAM wParam, LPARAM lParam);extern "C" int APIENTRY
    DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
    {
    UNREFERENCED_PARAMETER(lpReserved);     g_hInst = hInstance; if (dwReason == DLL_PROCESS_ATTACH)
    {
    if (!AfxInitExtensionModule(CaptureDLL, hInstance))
    return 0;
    new CDynLinkLibrary(CaptureDLL);
    }
    else if (dwReason == DLL_PROCESS_DETACH)
    {
    AfxTermExtensionModule(CaptureDLL);
    }
    return 1;
    }BOOL StartHook()
    {                                       
    if (g_hCallWndHook)
    {
    return FALSE;
    }
    else
    {
    g_hCallWndHook = SetWindowsHookEx(WH_CALLWNDPROC,CallWndProc,g_hInst,0);
    return TRUE;
    }      
    }BOOL  Endhook()
    {                        
     if (g_hCallWndHook)    
     {
            UnhookWindowsHookEx(g_hCallWndHook);
            g_hCallWndHook=NULL;
    return TRUE;
             }         
     else
     {
              return FALSE;
     }
    }LRESULT WINAPI CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    if (nCode < 0 || nCode == HC_NOREMOVE)
       return CallNextHookEx(g_hCallWndHook,nCode,wParam,lParam); if( ((LPCWPSTRUCT)lParam)->message == WM_CLOSE)
    {
    MessageBeep(0);
    } return CallNextHookEx(g_hCallWndHook,nCode,wParam,lParam);
    }