![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Piton |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.8.2003 Репутация: нет Всего: нет |
Есть проблема! Надо отловить все нажатия клавиш пользователя и определить, какая именно клавиша нажата.
Под Windows все работает, но с DOS есть неувязки! Я использую комманду GetAsyncKeyState, может есть другой путь решения? |
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
ну так GetAsyncKeyState это из виндосовского АПИ так что под досом не заработает 100%
используй какуюнить стандартную функцию как к примеру getchar() в Си в паскале не знаю просто как -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Однозначно тебе нужно использовать Хук. Перехват всех событий в Windows (в том числе и событий от клавиатуры) выполняется с помощью вызова функции SetWindowsHook[Ex](). Данная функция регистрирует в системе Windows ловушку (hook) для определенного типа событий/сообщений. Ловушка - это пользовательская процедура, которая будет обрабатывать указанное событие.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Небольшое дополнение: можно вызвать прежний обработчик клавиатуры, вызвав функцию CallNextHookEx()
И еще, все объявления находятся тут: WinTypes, WinProcs; -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
neutrino не будет оно в дос сессии ловить кнопочки
покрайне мере я делал не получилось в виндосе все ловит прекрасно просто вопрос так поставлен что его можно по разному понять еслиб Piton уточнил что он имеет в виду под словом DOS (чистый дос, дос сессию (эмуляцию) в виндосе) тогдаб можно было и по конкретней обьяснить -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Угу, в эмуляции запустить :etWindowsHook будет крайне тяжело.
![]() А мой способ с Дос окном должен работать... -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 6 Всего: 137 |
Если надо под чистым ДОСом, могу написать программу. (Ну, типа клавиатурный шпион). А под винду - хуки. Это уже написали.
|
|||
|
||||
cot |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 4.6.2003 Репутация: нет Всего: нет |
Ловит нажатие любой клавиши в DOC, но это правдв чистый Паскаль
function ReadKeyWord:word; var Regs:Registers; begin with Regs do begin AH:=0; intr($16,Regs); ReadKeyWord:=AX end end; Вообще ничего такого, чтобы не работало в Delphi здесь нет. |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Сколько хуков я не перепробовал...
нормально работают только хуки в самой программе, т.е. в самом хуке, а отлавливать в во всей системе тяжело, это надо быть очень умным, у меня есть три или четыре примера и ни один нормально не работает. |
|||
|
||||
dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 6 Всего: 137 |
cot, боюсь что это не все клавиши.
С Shift-Ctrl-Alt, с xxxxLock, с PrintScreen, c Pause/Break работать не будет. |
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
dsergey
ну не знаю недавно написал кейлогер все ловит окромя доссесии обычный глобальный хук на клаву использовал -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
давай я пришлю свои, а ты посмотришь чего я на партачил, отпиши адрес, если ты не против.
А то я уже совсем замучился с этими хуками. |
|||
|
||||
dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 6 Всего: 137 |
dsergey, прочитай статью и посмотри прилагаемые к ней исходники.
http://www.delphimaster.ru/articles/hooks/index.html Это уже классика жанра ![]() |
|||
|
||||
cot |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 4.6.2003 Репутация: нет Всего: нет |
cot, боюсь что это не все клавиши.
Насчет клавиш не знаю по идее должно перехватывать все. Дело в другом в Делфи нет Паскалевого модуля Dos или WinDos , которые содержат запись Register |
|||
|
||||
dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 6 Всего: 137 |
cot, да не в этом дело. Это можно сделать на асме. Твоя функция:
Только это не даст тебе возможности ловить клавиши всех процессов. Не путай ДОС с многозадачной системой. |
|||
|
||||
Piton |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.8.2003 Репутация: нет Всего: нет |
Здравствуйте, извините, что долго не отвечал - болел и на работу не ходил!
Хочется чуть пояснить - нужна программа, отлавливающая в системе нажатия клавиш с буквами и цифрами, но проблема в том, что пользователь частенько сидит в редакторе под Norton Commander (в DOS сессии), и вот здесь я уже не могу что-либо отловить. Хуки тоже не срабатывают!
Кстати, neutrino, как можно передать дальнейшую обработку системе событий, поступающих с клавы, т.к. после установки данного хука, клава "замолкает", а файлик растет! |
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
ну ты его ставиш с SetWindowsHookEx
а потом после получения кнопочки передаеш дальше с CallNextHookEx -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |