程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> VC掛線程鉤子的小經驗

VC掛線程鉤子的小經驗

編輯:關於VC++

掛線程鉤子,最主要的是調用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);

就這麼簡單!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved