WEB开发网
开发学院软件开发VC VC挂线程钩子的小经验 阅读

VC挂线程钩子的小经验

 2010-06-23 20:40:49 来源:WEB开发网   
核心提示:挂线程钩子,最主要的是调用SetWindowsHookEx函数,VC挂线程钩子的小经验,使用例下:g_hHook=SetWindowsHookEx(WH_SYSMSGFILTER|WH_MSGFILTER,//截获消息类型,可组合使用(HOOKPROC)HookShowWindow,//消息回调函数g_hInst,//

挂线程钩子,最主要的是调用SetWindowsHookEx函数,使用例下:

g_hHook=SetWindowsHookEx(
 WH_SYSMSGFILTER|WH_MSGFILTER,//截获消息类型,可组合使用
 (HOOKPROC)HookShowWindow,//消息回调函数
 g_hInst,//消息回调函数所在模块的handle,因为是跨进程线程钩子,消息处理函数必须放到dll里面,故,这必须是dll的句柄。就因为这的错误,我折腾了几个小时。这个句柄可以在dllmain函数的hModule参数保存得到。
 progID);//要挂钩子的线程ID

其中,progID获取可如下:

DWORDprogID=GetWindowThreadProcessId(FindWindow("xvt320mditask100",NULL)->m_hWnd,NULL);

g_hInst获取如下:

HINSTANCEg_hInst;
BOOLAPIENTRYDllMain(HANDLEhModule,
           DWORD ul_reason_for_call,
           LPVOIDlpReserved
   )
{
switch(ul_reason_for_call)
{
caseDLL_PROCESS_ATTACH:
 g_hInst=HINSTANCE(hModule);
 break;
caseDLL_PROCESS_DETACH:
 break;
caseDLL_THREAD_ATTACH:
 break;
caseDLL_THREAD_DETACH:
 break; 
}
return1;
}

g_hHook是挂钩子成功后返回的钩子句柄,须保存起来后面解钩使用。

UnhookWindowsHookEx(g_hHook);

就这么简单!

Tags:VC 线程 钩子

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接