Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.25;
Скачать: CL | DM;

Вниз

Hook на нажатие клавиш   Найти похожие ветки 

 
Хинт ©   (2005-10-26 15:49) [0]

Возможно ли реализовать подобное без DLL? Насколько я знаю - нет (единственное решение - GetKeyState, но это ооочень не удобно).


 
Leonid Troyanovsky ©   (2005-10-26 15:53) [1]


> Хинт ©   (26.10.05 15:49)  
> Возможно ли реализовать подобное без DLL? Насколько я знаю



WH_KEYBOARD_LL

--
Regards, LVT.


 
hamster ©   (2005-10-26 18:24) [2]


> Насколько я знаю - нет

Кстати,меня всегда интересовало - а почему нет?


 
fellix   (2005-10-26 18:33) [3]

Экспериментировал когда-то: DLL-ка требуется под Win9x, а под 2К можешь встроить хук в EXE-шник (не забудь только функцию экспортировать).


 
hamster ©   (2005-10-26 18:59) [4]


> fellix   (26.10.05 18:33) [3]

Кхм... да... А не подскажете как это сделать?

И еще, пишу:
procedure WHKey(var Msg:TWMKey); message WH_KEYBOARD_LL;
Я правильно делаю? Почему-то на WH_KEYBOARD_LL компилятор ругается - undeclaired identifer. Что надо подключить?


 
fellix   (2005-10-26 19:26) [5]

Литературы с примерами множество. И на этом сайте в т.ч.
Или посмотрите в MSDN.

WinUser.h
---------
#if (_WIN32_WINNT >= 0x0400)
#define WH_KEYBOARD_LL     13
#define WH_MOUSE_LL        14
#endif // (_WIN32_WINNT >= 0x0400)


 
fellix   (2005-10-26 19:31) [6]

http://groups.google.com/group/fido7.ru.delphi.chainik/msg/ba088c4f6ad9649f


 
Fay ©   (2005-10-26 19:58) [7]

>> procedure WHKey(var Msg:TWMKey); message WH_KEYBOARD_LL
LOL!
8)


 
programania ©   (2005-10-26 20:15) [8]


TForm1 = class(TForm)
.....
 procedure WMHotkey(var a:TWMHotkey); message WM_HOTKEY;
....
end;
....
RegisterHotKey(form1.handle,29,MOD_CONTROL,37);//ctrl+Лево
.....
procedure TForm1.WMHotkey(var a:TWMHotkey);
......
unRegisterHotKey(unRegisterHotKey(form1.handle,29);
.....


 
Fay ©   (2005-10-27 00:36) [9]

2 Leonid Troyanovsky ©   (26.10.05 15:53) [1]
Хук WH_KEYBOARD_LL есть global only.
Из этого, как я понимаю, следует, что условие "реализовать подобное без DLL" не очень выполнимо. Так ведь?


 
ShiFT   (2005-10-27 06:26) [10]


> Хук WH_KEYBOARD_LL есть global only.
> Из этого, как я понимаю, следует, что условие "реализовать
> подобное без DLL" не очень выполнимо. Так ведь?

Вот как раз ЭТОТ хук, можно спокойно реализовывать в EXE.

LT> Установка системных WH_KEYBOARD_LL и WH_MOUSE_LL, т.е. хуков низкого
LT> уровня, не требуют библиотеки.


 
Leonid Troyanovsky ©   (2005-10-27 11:13) [11]


> Fay ©   (27.10.05 00:36) [9]

> Из этого, как я понимаю, следует, что условие "реализовать
> подобное без DLL" не очень выполнимо. Так ведь?


msdn: LowLevelKeyboardProc Function, Remarks:

This hook is called in the context of the thread that installed it.

И, сл-но, dll не обязательна.

--
Regards, LVT.


 
Fay ©   (2005-10-27 13:55) [12]

2 Leonid Troyanovsky ©   (27.10.05 11:13) [11]

Если Вас не затруднит, объясните, каким образом фраза "This hook is called in the context of the thread that installed it" доказывает утверждение "И, сл-но, dll не обязательна".
Я не очень силён в американском языке, т.о. буду очень рад услышать буквальный перевод.


 
ShiFT   (2005-10-27 14:28) [13]


> Fay ©   (27.10.05 13:55) [12]

http://rsdn.ru/article/controls/WinHotkeyCtrl.xml  (в одном из примечаний нашёл)

Как написано в документации PlatformSDK, большинство глобальных системных хуков должны обязательно находиться в динамически подключаемой библиотеке DLL. При этом DLL подгружается в адресное пространство процесса производящего какое-либо «отлавливаемое» действие (например, посылку сообщений окну в случае WH_GETMESSAGE).

Всё вышесказанное не относится к так называемым RAW INPUT хукам (WH_KEYBOARD_LL и WH_MOUSE_LL), появившимся в Windows NT 4.0 SP3. Их фильтрующая функция вызывается в том же потоке, который установил хук, методом посылки сообщения этому потоку. Таким образом, фильтрующая функция RAW INPUT хука может находиться и в EXE, а SetWindowsHookEx должна вызываться из GUI потока, имеющего очередь сообщений (окно).


 
Leonid Troyanovsky ©   (2005-10-27 14:44) [14]


> Fay ©   (27.10.05 13:55) [12]
> 2 Leonid Troyanovsky ©   (27.10.05 11:13) [11]
>
> Если Вас не затруднит, объясните, каким образом фраза "This
> hook is called in the context of the thread that installed
> it" доказывает утверждение "И, сл-но, dll не обязательна".
>
> Я не очень силён в американском языке, т.о. буду очень рад
> услышать буквальный перевод.


"Этот хук вызывается в контексте установившего его потока."

Читай: выполняется тем же потоком (в том же процессе),
и, сл-но, местонахождение процедуры хука (exe or dll) безразлично.

--
Regards, LVT.


 
Fay ©   (2005-10-27 14:45) [15]

2 ShiFT   (27.10.05 14:28) [13]
Ясненько. Спасибо!


 
Leonid Troyanovsky ©   (2005-10-27 14:58) [16]


> ShiFT   (27.10.05 14:28) [13]

> из GUI потока, имеющего очередь сообщений (окно).


Про окно там нет ничего, хотя в одном месте пишут:

The call is made by sending a message to the thread that installed the hook.

Хотя,  вначале:

The system calls this function every time a new keyboard input event is about to be posted into a thread input queue.

Проверять же мне влом :)

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2005-10-27 15:04) [17]


> Leonid Troyanovsky ©   (27.10.05 14:58) [16]

> The system calls this function every time a new keyboard
> input event is about to be posted into a thread input queue.



Здесь, видимо, имелось ввиду клавиатурные события другого приложения.

Т.е., пусть "окно" будет.

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2005.12.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.031 c
3-1131431309
makvell
2005-11-08 09:28
2005.12.25
Псевдонимы...


4-1130425689
Deren
2005-10-27 19:08
2005.12.25
Получить все Хенделы дочерных окон...?


2-1133966544
Dead.MorozZ
2005-12-07 17:42
2005.12.25
Как устанавливать компоненты


14-1133138436
Kerk
2005-11-28 03:40
2005.12.25
Samara Mastak Party


14-1133636713
Юзверюга
2005-12-03 22:05
2005.12.25
А это что за клон?