PDA

Показать полную графическую версию : Hook для перехвата keyboard.


Guest
07-02-2004, 15:40
Пытаюсь самым обычным образом перехватить сообщения с клавиатуры, однако вызова функции как таковой не происходит. Явно что-то делаю не так ;). Может кто подскажет или скинет исходник.


HHOOK hook;

LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
FILE *f;


if((f=fopen("c:\\logfile.txt","a"))!=NULL)
{
fputc(MapVirtualKey(wParam,2),f);
fclose(f);
}


return CallNextHookEx(hook, code, wParam, lParam);
}

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
hook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, (HINSTANCE)NULL, GetCurrentThreadId());
return 0;
}

ivank
07-02-2004, 19:53
Я могу ошщибаться, но по-моему, что бы хук работал, ф-ия реализующая его должна быть в отдельной dll. Во всяком случае, я так делал: http://ivank.ru/trash/KeyHooker.zip

2003slon
10-02-2004, 18:17
что бы хук работал, ф-ия реализующая его должна быть в отдельной dll
C этой SetWindowsHookEx бардак какой-то... Я вообще-то пишу на Дельфях, и чего только не делал, но ничего не получилость (если кнопка нажимается, когда окно программы неактивно, возникает exeption). Народ, скиньте кто-нибудь рабочий код!

hasherfrog
11-02-2004, 09:47
Хотелось бы предупредить, что с этими самыми хуками не все так просто. Хочу  поделиться опытом и немного "постращать". Когда-то я пытался написать прогу, которая следит за мышой. Несмотря на кажущуюся простоту,  почему-то программа иногда сбоила. Я накачал кучу литературы и примеров (очень хороших примеров, профессионально написаных)  и переписал все заново. Сбои продолжались. Тогда я попробовал потестировать и самые лучшие программы-примеры. Как я удивился (и, каюсь, развеселился) , когда и они начали сбоить. Хотя вроде бы, чего тут такого уж сложного-то?
Мораль. :) Хочешь чтобы хорошо работало, сделай сам. :) А еще лучше, сначала хорошо подумай, надо ли вообще делать?  Опять KeyLogger?

Для дельфистов хороший пример тут: http://community.borland.com/article/0,1410,10323,00.html
Если же пишешь на С/С++, то естественно, Examples for using the SetWindowHookEx()  function are found in the WIN32 SDK.




© OSzone.net 2001-2012