Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Hook для перехвата keyboard. (http://forum.oszone.net/showthread.php?t=29998)

Guest 07-02-2004 15:40 206657

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


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 206658

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

2003slon 10-02-2004 18:17 206659

Цитата:

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

hasherfrog 11-02-2004 09:47 206660

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

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


Время: 13:06.

Время: 13:06.
© OSzone.net 2001-