如何在动态链接库中使用全局钩子函数,当鼠标移动时来修改来和隐藏别的窗口--例子代码

解决方案 »

  1.   

    #pragma data_seg("mydata")
    HWND glPreTarWnd = NULL;
    HWND glTargetWnd = NULL;
    HWND glSelfWnd = NULL;
    #pragma data_seg() //定义
    LRESULT WINAPI MouseMoveProc(int code,WPARAM wParam,LPARAM lParam)
    {
    if(code < 0)
    return CallNextHookEx(glMouseHook,code,wParam,lParam);  LPMOUSEHOOKSTRUCT pMouseHookWnd=(MOUSEHOOKSTRUCT FAR *)lParam;
    glTargetWnd = pMouseHookWnd->hwnd;//获取相应的窗口的句柄 char szWinCaption[]=_T("一切可以修改的句柄标题已多经过修改...");
    ::EnableWindow(glTargetWnd,szWinCaption);//标题修改
              ::EnableWindow(glTargetWnd,FALSE);//隐藏窗口        return CallNextHookEx(glMouseHook,code,wParam,lParam);
    }extern "C" _declspec(dllexport) BOOL WINAPI ExternMouseMoveToWinText(HWND hWndDes)
    {
    if(hWndDes == NULL)
    return FALSE;
    glSelfWnd = hWndDes;
    glPreTarWnd = hWndDes;
    glMouseHook = SetWindowsHookEx(WH_MOUSE,MouseMoveProc,glMouseInstance,0);
    return TRUE;
    }extern "C" _declspec(dllexport) void WINAPI StopHook()
    {
    UnhookWindowsHookEx(glMouseHook);
    glMouseHook = NULL;
    }
      

  2.   

    //连上的全局定义 glMouseInstance 是用DllMain传入的参数
    #pragma data_seg("shareddata")
    int nNum=0;
    HHOOK glMouseHook = NULL;
    HINSTANCE glMouseInstance = NULL;
    #pragma data_seg()