- g_hHook = SetWindowsHookEx(
- WH_SYSMSGFILTER | WH_MSGFILTER, //截获消息类型,可组合使用
- (HOOKPROC)HookShowWindow, //消息回调函数
- g_hInst, //消息回调函数所在模块的handle,因为是跨进程线程钩子,消息处理函数必须放到dll里面,故,这必须是dll的句柄。就因为这的错误,我折腾了几个小时。这个句柄可以在dllmain函数的hModule参数保存得到。
- progID);//要挂钩子的线程ID
- DWORD progID = GetWindowThreadProcessId(FindWindow("xvt320mditask100", NULL )->m_hWnd, NULL);
- HINSTANCE g_hInst;
- BOOL APIENTRY DllMain( HANDLE hModule,
- DWORD ul_reason_for_call,
- LPVOID lpReserved
- )
- {
- switch(ul_reason_for_call)
- {
- case DLL_PROCESS_ATTACH:
- g_hInst = HINSTANCE(hModule);
- break;
- case DLL_PROCESS_DETACH:
- break;
- case DLL_THREAD_ATTACH:
- break;
- case DLL_THREAD_DETACH:
- break;
- }
- return 1;
- }
UnhookWindowsHookEx(g_hHook);
就这么简单!