вызов setwindowshookex с WH_GETMESSAGE не работает ни в одном процессе, кроме инжектора - PullRequest
0 голосов
/ 03 декабря 2010

Ранее я задавал вопрос о чем-то похожем, но я полагаю, что в этот раз обстоятельства другие.

У меня есть DLL, в которой есть стандартные функции hook, unhook и msgProc.Я загружаю эту DLL в свое основное приложение, а затем вызываю «hook», то есть ниже:

HOOKDLL_API BOOL setHook( HWND hWnd, DWORD threadID )
{

if( hWndServer != NULL )
    return FALSE;

hook = SetWindowsHookEx( WH_GETMESSAGE, (HOOKPROC)msghook, hInstance, threadID );

if( hook != NULL )
{
    hWndServer = hWnd;

    ofstream logFile;
    logFile.open( "LOG.txt" );
    logFile << "Hooked for: " << hWndServer << endl;
    logFile.close();

    return TRUE;
}

return FALSE;
}

Проблема в том, что если я сделаю ее глобальной, с threadID = 0, то только msgHook захватываетсообщения, полученные окном процесса, который загрузил библиотеку и ничего больше, даже если предполагается, что это глобальный хук.

Если я предоставлю threadID какого-либо другого окна, я не получу сообщениявообще.

В чем может быть причина этого?

1 Ответ

3 голосов
/ 03 декабря 2010
  • Вы используете 64-разрядную версию Windows? Если так, ваш хук процесс и DLL должны совпадать битность процесса (ов) вы хочу зацепить.

  • Что такое hInstance в вашем примере? DLL или экземпляр EXE? Это должна быть DLL, которая содержит Функция msgHook.

  • Что делает ваш msgHook? Как ты определить, действительно ли это происходит называется? Обратите внимание, что это будет называться в процессе, который вы подключаете, не в вашем собственном процессе. (Так что если Вы установили точку останова на нем, это не будет срабатывать, если вы не приложите отладчик процесса, который вы подключен, а не процесс, который установлен крюк.)

...