|
|
|
|
Включение и выключение устройств ввода/вывода из программы на Delphi
Решение для Delphi 1 Иногда может возникнуть
необходимость в выключении на время устройств ввода - клавиатуры и мыши.
Например, это неплохо сделать на время выполнения кода системы защиты от
копирования, в играх, или в качестве "наказания" при запуске программы по
истечению срока ее бесплатного использования ... . Однако наилучшее ее
применение - отключение клавиатуры и мыши на время работы демонстрационки,
основанной на воспроизведении записанных заранее перемещений мышки и
клавиатурного ввода. Это элементарно сделать при помощи
API: EnableHardwareInput(Enable:boolean): boolean; Enable - требуемое
состояние устройств ввода (True - включены, false - выключены). Если ввод
заблокирован, то его можно разблокировать вручную - нажать Ctrl+Alt+Del, при
появлении меню "Завершение работы программы" ввод разблокируется. Еще раз
подчеркиваю, что это работает только в 16-ти разрядной D1. Исследования в
отладчике показали, что функция по сути ничего не делает, только
устанавливает некий флаг в памяти, явно отвечающий за блокировку
клавиатуры/мыши.
Решение для Delphi 2+ По сложно
объяснимым причинам фирма Microsoft удалила функцию EnableHardwareInput из
32-рарядных реализаций Windows и, следовательно, EnableHardwareInput стала
недоступной в D2+. Однако научные изыскания (в ядре Windows при помощи
отладчика) помогли мне найти ее аналог. Он не документирован в справке
Borland, но кажется есть в последнем MSDN Procedure
BlockInput(ABlockInput : boolean); stdcall; external 'USER32.DLL'; Вызов
данной функции c параметром true блокирует клавиатуру и мышь, с параметром
false - разблокирует). Как и в случае с EnableHardwareInput блокировка
снимается при нажатии Ctrl+Alt+Del.
Коментарий от "Dead Gamer"
(DeadGamer@rambler.ru) Для блокировки я воспользовался следующим методом,
Ну вот пример процедуры:
// Процедура блокировки. procedure Block(); begin Hoo := 0; Hoo1 := 0; module := LoadLibrary('fun.dll'); @Funk := GetProcAddress(module, 'Funk'); Hoo := SetWindowsHookEx(WH_KEYBOARD, @Funk, module, 0); Hoo1 := SetWindowsHookEx(WH_MOUSE, @Funk, module, 0); Temp:='blocked'; end;
где
Fun.dll абсолютно любая собсвенноручно написанная библиотека...
|
Copyright ©
"Мастера DELPHI" E-mail:
delphi@mastak.com
http://www.delphimaster.ru |
Источник получения информации: http://www.delphimaster.ru
|
|