Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.012 c
2-1133938066
YDS
2005-12-07 09:47
2005.12.25
Завершение внешнего приложения в случае ошибки


14-1133445740
Vyacheslav
2005-12-01 17:02
2005.12.25
Excel - Linux


3-1131004093
AlexTer
2005-11-03 10:48
2005.12.25
Отчет с перекрестной таблицей


2-1133899550
floxi
2005-12-06 23:05
2005.12.25
MonthCalendar


14-1133327838
red_imp
2005-11-30 08:17
2005.12.25
Как в 7 отправить письмо с вложеными файлами??





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский