 ) вопросов.
 ) вопросов.Оба хука на перехват нажатия клавиш. DLL использую впервые.
1. Хук глобальный.
Делаю так.
DLL:
- Код: Выделить всё
- function KeyBoardHook(code:integer; wparam:wparam; lparam:lparam):Lresult; stdcall; export;
 begin
 beep(2000,15);
 result:=CallNextHookEx(HINSTANCE,code,wParam,lparam);
 end;
В исполняемом:
- Код: Выделить всё
- descDLL:=LoadLibrary('keyboardhook.dll');
 descFunc:=HOOKPROC(GetProcAddress(descDLL, 'KeyBoardHook'));
 descHook:=SetWindowsHookEx(WH_KEYBOARD, descFunc, descDLL,0);
 s:='1';
 while s<>'0' do begin
 readln(s);
 end;
 UnhookWindowsHookEx(descHook);
И тут, как не странно, всё заработало. Бикает при нажатии клавиш в любом месте. Правда бикает как-то чрезмерно долго...но бикает же!=)
Вопросы:
1. Почему для глобального процедура обработки обязана быть в dll?
2. Как в dll получить дескриптор текущей хуки для передачи в CallNextHookEx? HINSTANCE совершенно точно не то. Если не ошибаюсь - то есть дескриптор текущего модуля, а функция требует именно хуку..
3. Возможно, вопрос еще тупей первого, но всё же.. Как, например, посчитать кол-во сработанных ловушек, если параметры функции-обработки статичны и вызывается она из библиотеки?
2. Хук локальный.
- Код: Выделить всё
- function KeyBoardHook(code:integer; wparam:wparam; lparam:lparam):Lresult; stdcall;
 begin
 Windows.Beep(100,100);
 writeln('YES');
 result:=CallNextHookEx(descHook,code,wParam,lparam);
 end;
 begin
 descHook:=SetWindowsHookEx(WH_KEYBOARD, @KeyBoardHook, 0,GetCurrentThreadID());
 s:='1';
 while s<>'0' do begin
 readln(s);
 end;
 UnhookWindowsHookEx(descHook);
 end.
Казалось, что оно должно быть проще, но...скомпилировалось а не заработало. При этом функция установки возвращает значение, отличное от нуля, следовательно хук вроде как поставился.
Вопрос пока только один:
Почему не работает? Вообще никакой реакции при вводе в приложении. Никакого тебе бипа...ничего
 Пробовал хук мыши - тоже самое: ноль реакций, фон презрения...
 Пробовал хук мыши - тоже самое: ноль реакций, фон презрения...Добавлено спустя 15 часов 14 минут 44 секунды:
Плюс вопрос к глобальным.
Отчего-то срабатывают ловушки на клавиши лишь у открытых до старта хука программ. Если открыть новую и там хоть что-то вжать - все виснет:(
Добавлено спустя 1 час 32 минуты 25 секунд:
А нет. Это просто в некоторых, преимущественно системных, приложениях хук вызывает вылет..



