VC ++: как подключить / отсоединить конкретный поток - PullRequest
0 голосов
/ 25 января 2010

Мы подключаем методы TextOut (), ExtTextOut () и DrawText () ГЛОБАЛЬНО.

т.е. hhook = SetWindowsHookEx (WH_CBT, адрес_функции, дескриптор модуля, 0);

Но мы хотим зацепить / отцепить только определенный exe. Может кто-нибудь сказать нам, как проверить все существующие потоки и получить требуемый exe и подключить / отцепить только это.

Пожалуйста, предоставьте помощь.

Спасибо

1 Ответ

0 голосов
/ 25 января 2010

Вы можете перечислить процессы, используя PSAPI , в частности EnumProcesses

Вам потребуется #include "psapi.h" из SDK и добавить PSAPI.lib к входам компоновщика.

Ex:

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 для каждого перечисленного процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...