Как создать глобальный WH_GETMESSAGE HOOK без DLL

Я пытаюсь создать глобальный WH_GETMESSAGE HOOK без DLL, но безуспешно. Моя ОС Win7 32Bit, это мой код:

SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,GetModuleHandle(NULL),0);

Пожалуйста, помогите мне, если у вас есть время. :)


person italkboy    schedule 20.06.2011    source источник


Ответы (3)


Как указано,

hMod [в]

Тип: ИНСТАНС

Дескриптор библиотеки DLL, содержащей процедуру ловушки, на которую указывает параметр lpfn. Параметр hMod должен быть установлен в NULL, если параметр dwThreadId указывает поток, созданный текущим процессом, и если процедура подключения находится в коде, связанном с текущим процессом.

hMod должен быть дескриптором DLL. Не EXE. Это связано с тем, что DLL будет загружена во все запущенные процессы для перехвата, и ее код запустится прямо из этих процессов.

person bdonlan    schedule 20.06.2011
comment
Спасибо за ваш ответ, но он кажется мне бесполезным. - person italkboy; 20.06.2011
comment
Я думаю, есть другой способ сделать. Спасибо~. - person italkboy; 20.06.2011
comment
@italkboy, вы должны написать свой альтернативный метод в качестве ответа, чтобы помочь кому-то еще с той же проблемой ... - person bdonlan; 20.06.2011
comment
@italkboy, тогда нет проблем - просто полезно оставить подсказку будущим путешественникам, если вы найдете решение :) Обычный подход - создать DLL специально для хука, кстати. - person bdonlan; 20.06.2011
comment
Спасибо за внимание, я сообщу вам после того, как найду решение. - person italkboy; 20.06.2011

Вам нужен цикл сообщений в вызывающем потоке SetWindowsHookEx.

while(GetMessage(&msg, NULL, 0, 0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}
person user1290952    schedule 30.06.2012

Очевидно, что последний параметр не должен быть равен «0», это должен быть идентификатор потока, в котором вы хотите вызвать функцию. Вы не можете передать значение null как для последнего, так и для предпоследнего параметров. Используйте GetThreadId(), чтобы получить идентификатор текущего потока, скорее всего, это то, что вы хотите сделать.

Ответ предыдущего автора был очень полезен для вас, если бы вы его прочитали, вы бы сами увидели вышеизложенное.

person Roel    schedule 22.06.2011
comment
Большое спасибо, я нашел компромисс, и я попробую еще раз. :) - person italkboy; 23.06.2011