На главную
Подписка
Новости


Рейтинг@Mail.ru











Главная / DELPHI / Часто задаваемые вопросы и ответы на них / Win Api / Включение и выключение устройств ввода/вывода из программы на Delphi Сделать домашней страницей Добавить в избранное Написать писмо

Включение и выключение устройств ввода/вывода из программы на 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
Hosted by uCoz