Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Глобальный отлов

2.0K
22 марта 2003 года
Ignoramus
14 / / 21.10.2002
Господа!
Подскажите плз, как в Windows можно отлавливать нажатия клавиш глобально, т.е. вне зависимости от того, какому окну отсылается сообщение?
Есть вариант SetWindowsHookEx, но он мне не очень нравится... Есть что-нибудь по-лучше?
Спасибо.
3.2K
26 марта 2003 года
bryk
20 / / 26.03.2003
Конечно есть. И самый глобальный способ это написать дарйвер, который будет фильтровать IRP клавиатурного дравера.

Присмотритесь к WDM.

Однако надо отметить это не простая задача.
:D :D :D

Может помочь Driver Studio-> Driver Works.
2.0K
27 марта 2003 года
Ignoramus
14 / / 21.10.2002
Дело в том, что для такой небольшой программы как у меня создавать драйвер в kernel-mode неоправданно долго, особенно принимая во внимание мой весьма скромный опыт в написании драйверов. Кроме того, драйвер привязан к платформе Windows; необходимость поставки и установки драйвера в моем случае также можно расценивать как недостаток.
Увы, боюсь, что мне остается пользоваться хуками и удивляться, почему для обнаружения такого совершенно однозначного аппаратного события как нажатие клавиши в такой #$% операционной системе как Windows необходимо контролировать ВСЕ процессы и тем самым понижать общую производительность...

Других предложений нет, господа?
3.2K
28 марта 2003 года
bryk
20 / / 26.03.2003
Цитата:
Originally posted by Ignoramus
Дело в том, что для такой небольшой программы как у меня создавать драйвер в kernel-mode неоправданно долго, особенно принимая во внимание мой весьма скромный опыт в написании драйверов. Кроме того, драйвер привязан к платформе Windows; необходимость поставки и установки драйвера в моем случае также можно расценивать как недостаток.
Увы, боюсь, что мне остается пользоваться хуками и удивляться, почему для обнаружения такого совершенно однозначного аппаратного события как нажатие клавиши в такой #$% операционной системе как Windows необходимо контролировать ВСЕ процессы и тем самым понижать общую производительность...

Других предложений нет, господа?



Тогда видимо кроме SetWindowsHookEx лучше ничего нет. Ну или код ядра патчить, но это уже вирус получается... Да и драйвер проще будет написать.

Интересно, SetWindowsHookEx досовские приложения перехватывает ? :-? :-? :-?

2.0K
28 марта 2003 года
Ignoramus
14 / / 21.10.2002
Спасибо за совет :)
Не буду же я патчить винду на компьютере пользователя. Рассчитывать на это неправильно со стороны разработчика...

На моем компьютере Windows 2000, на ней SetWindowsHooks перехватывает сообщения для программ типа FAR и command line prompt (cmd). Правда, не в полноэкранном режиме.

А отлаживать глобальные хуки - одно удовольствие :(. Комп чуть что зависает, так как дебаггер тоже хучится. К тому же DLL-ка хука подключатся ко всем процессам и в случае аномального завершения ее нельзя перекомпилить без перезагрузки (или перелогина). Есть конечно примочки чтобы дебаггер не хучился, но это геморрой тот еще.
3.2K
28 марта 2003 года
bryk
20 / / 26.03.2003
Да по поводу отладки вы абсолютно правы. Я вчера ощутил все прелести глобального хука клавы.
2.0K
29 марта 2003 года
Ignoramus
14 / / 21.10.2002
Уже могу делиться опытом :)
А еще могу посоветовать Вам написать драйверочек :) :) :)

Кстати, хендлы хуков должны быть объявлены как глобальные в DLL, причем в секции, помеченной как SHARED, иначе каждый процесс будет иметь свой хук и нифига работать не будет. Я это не сразу сообразил...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог