Почему SetWindowsHookEx возвращает 0? - PullRequest
3 голосов
/ 08 декабря 2010

Я пытаюсь установить хук WH_CBT, и он все время возвращает 0. Я проверил на ошибку, и я получил ошибку 1428. Я немного исследовал и обнаружил, что у меня есть проблема с параметром hMod, хотя я не вижу, что я должен вставить вместо null. Кто-нибудь знает, что я делаю не так?

Это мой код:

#include "stdafx.h"
#include "Windows.h"
#include <iostream>
using namespace std;

HHOOK hookHandle;

LRESULT CALLBACK CBTProc( int nCode,  WPARAM wParam,  LPARAM lParam);

int _tmain(int argc, _TCHAR* argv[]) 
{
hookHandle = SetWindowsHookEx(WH_CBT,CBTProc,NULL,0);

 if(hookHandle == NULL) 
 {
  cout << "ERROR CREATING HOOK: ";
  cout << GetLastError() << endl;
  getchar();
  return 0;
 }

 MSG message;

 while(GetMessage(&message, NULL, 0, 0) != 0) 
 {
  TranslateMessage( &message );
  DispatchMessage( &message );
 }



 cout << "Press any key to quit...";
 getchar();

 UnhookWindowsHookEx(hookHandle);

 return 0;
}

LRESULT CALLBACK CBTProc( int nCode,WPARAM wParam, LPARAM lParam)
{
cout << "hello" << endl;
    return CallNextHookEx(hookHandle, nCode, 
            wParam, lParam);
}

P.S. Я извиняюсь, если в коде есть глупые элементы. Я не новичок в программировании, просто в C ++.

Ответы [ 2 ]

3 голосов
/ 08 декабря 2010

Если вы укажете 0 для идентификатора потока, который определяет глобальный хук.Для того, чтобы это работало, хук должен быть введен в другие процессы.Это означает, что хук должен быть выставлен из DLL.Вам нужно либо переместить процедуру подключения в DLL, либо указать поток в вашем процессе.

1 голос
/ 08 декабря 2010

Используйте GetModuleHandle(NULL) и GetCurrentThreadId(), чтобы получить дескриптор и идентификатор потока, который необходимо передать этой функции.

Пример:

hookHandle = SetWindowsHookEx(WH_CBT,CBTProc,
                              GetModuleHandle(NULL),  
                              GetCurrentThreadId());

Как говорит Логан, это подключит только текущий процесс. Вам нужно поместить код в dll для разработки системного хука.

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