暗花豆瓣:VC挂线程钩子的小经验

来源:百度文库 编辑:中财网 时间:2024/04/19 13:20:31

VC挂线程钩子的小经验

2008-11-20 09:34:01 阅读(14) 发表评论

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

双击代码全选12345g_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获取如下:

双击代码全选1234567891011121314151617181920HINSTANCEg_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);

  就这么简单!