Глобальный отлов
Подскажите плз, как в Windows можно отлавливать нажатия клавиш глобально, т.е. вне зависимости от того, какому окну отсылается сообщение?
Есть вариант SetWindowsHookEx, но он мне не очень нравится... Есть что-нибудь по-лучше?
Спасибо.
Присмотритесь к WDM.
Однако надо отметить это не простая задача.
:D :D :D
Может помочь Driver Studio-> Driver Works.
Увы, боюсь, что мне остается пользоваться хуками и удивляться, почему для обнаружения такого совершенно однозначного аппаратного события как нажатие клавиши в такой #$% операционной системе как Windows необходимо контролировать ВСЕ процессы и тем самым понижать общую производительность...
Других предложений нет, господа?
Цитата:
Originally posted by Ignoramus
Дело в том, что для такой небольшой программы как у меня создавать драйвер в kernel-mode неоправданно долго, особенно принимая во внимание мой весьма скромный опыт в написании драйверов. Кроме того, драйвер привязан к платформе Windows; необходимость поставки и установки драйвера в моем случае также можно расценивать как недостаток.
Увы, боюсь, что мне остается пользоваться хуками и удивляться, почему для обнаружения такого совершенно однозначного аппаратного события как нажатие клавиши в такой #$% операционной системе как Windows необходимо контролировать ВСЕ процессы и тем самым понижать общую производительность...
Других предложений нет, господа?
Дело в том, что для такой небольшой программы как у меня создавать драйвер в kernel-mode неоправданно долго, особенно принимая во внимание мой весьма скромный опыт в написании драйверов. Кроме того, драйвер привязан к платформе Windows; необходимость поставки и установки драйвера в моем случае также можно расценивать как недостаток.
Увы, боюсь, что мне остается пользоваться хуками и удивляться, почему для обнаружения такого совершенно однозначного аппаратного события как нажатие клавиши в такой #$% операционной системе как Windows необходимо контролировать ВСЕ процессы и тем самым понижать общую производительность...
Других предложений нет, господа?
Тогда видимо кроме SetWindowsHookEx лучше ничего нет. Ну или код ядра патчить, но это уже вирус получается... Да и драйвер проще будет написать.
Интересно, SetWindowsHookEx досовские приложения перехватывает ? :-? :-? :-?
Не буду же я патчить винду на компьютере пользователя. Рассчитывать на это неправильно со стороны разработчика...
На моем компьютере Windows 2000, на ней SetWindowsHooks перехватывает сообщения для программ типа FAR и command line prompt (cmd). Правда, не в полноэкранном режиме.
А отлаживать глобальные хуки - одно удовольствие :(. Комп чуть что зависает, так как дебаггер тоже хучится. К тому же DLL-ка хука подключатся ко всем процессам и в случае аномального завершения ее нельзя перекомпилить без перезагрузки (или перелогина). Есть конечно примочки чтобы дебаггер не хучился, но это геморрой тот еще.
Да по поводу отладки вы абсолютно правы. Я вчера ощутил все прелести глобального хука клавы.
А еще могу посоветовать Вам написать драйверочек :) :) :)
Кстати, хендлы хуков должны быть объявлены как глобальные в DLL, причем в секции, помеченной как SHARED, иначе каждый процесс будет иметь свой хук и нифига работать не будет. Я это не сразу сообразил...