2010-01-25 44 views
0

我們正在全局鉤住TextOut(),ExtTextOut()和DrawText()方法。VC++:如何鉤住/解除特定單個線程

即 hhook = SetWindowsHookEx(WH_CBT,function_address,module_handle,0);

但我們只想鉤住/解除特定的EXE。誰能告訴我如何檢查所有現有線程和獲得所需的EXE和鉤/只脫鉤。

請提供幫助。

謝謝

+0

我需要掛接這些方法爲好。有人可以發佈關於如何做到這些鉤子的代碼? – Jeremy 2010-08-07 01:48:34

回答

0

您可以使用PSAPI專門EnumProcesses

你會從SDK需要#include "psapi.h"並添加PSAPI.lib到連接器的輸入枚舉過程。

例:

DWORD aiPID[1000], iCb=1000; 
DWORD iCbneeded = 0; 

if (!EnumProcesses(aiPID, iCb, &iCbneeded)) return(E_FAIL); 

int iNumProc=iCbneeded/sizeof(DWORD); 
for(int i=0; i < iNumProc; i++) 
{ 
    // First, get a handle to the process 
    HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, FALSE, aiPID[i]); 
    if (!hProc) continue; 

    TCHAR szName[MAX_PATH] = _T("<unknown>"); 

    HINSTANCE hMod = NULL; 
    if (EnumProcessModules(hProc, &hMod, sizeof(hMod), &iCbneeded)) 
    { 
     GetModuleFileNameEx(hProc, hMod, (LPTSTR)szName, MAX_PATH); 
    } 

    CloseHandle(hProc); 
} 

編輯:對不起 - 這只是給你的進程列表...得到線程每個看到ListProcessThreads傳入PID每個枚舉進程。

相關問題