На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Rouse_, jack128, Krid
  
    > Использование хуков , Блокировка клавиатуры, мыши
      Использование глобальных/локальных ловушек.

      Возможные вариации: Любые вопросы, связанные с постановкой хука. Например "Как отследить [что-то]", "Как подменить [какое-то действие]", "Как заблокировать комбинации клавиш, как заблокировать определённые действия", "Как не дать запускаться определённым приложениям, не дать открываться определённым окнам?", "Как получить список запущенных оконных приложений?" и т.д.

      Теория:
      Хуки - аспекты реализации

      Рабочий пример глобальной блокировки правой кнопки мыши:
      Пример блокировки правой кнопки мыши

      Если требуется перехватывать клавиши, тогда из вышеобозначенной теории нам известны варианты: WH_KEYBOARD, WH_KEYBOARD_LL или WH_GETMESSAGE+WM_CHAR/WM_KEYDOWN/UP
      Однако, если требуется перехватить всего лишь отдельную клавишу, будь то одну либо с нажатым Ctrl, Alt, Shift, рациональней для этого воспользоваться назначением горячей клавиши, через RegisterHotKey().
      Рабочий пример такого приёма:
      Пример регистрации горячих клавиш

      Блокировка клавиатуры/мыши.

      Родственная тема, поэтому помещена в этот же вопрос.

      Итак, заблокировать можно хуком. Но в некоторых случаях можно обойтись и "малой кровью".
      Вы можете использовать ф-ию BlockInput. Она живёт в user32.dll Также она блокирует одновременно и мышь.

      Procedure BlockInput(ABlockInput : Boolean); stdcall; external 'USER32.DLL';
       
      BlockInput(True); - заблокировать
       
      BlockInput(False); - разблокировать

      Однако имейте ввиду, что BlockInput() не заблокирует CAD. Кроме того, её работа блокируется по нажатию трёх пальцев.Для блокировки CAD в w9x, мы можем использовать режим скринсэйвера, в NT, увы никак.
      Ф-ия BlockInput() явилась продолжением ф-ии EnableHardwareInput(), которая как мы знаем использовалась в 16-разрядных приложениях.
      Кроме того, для блокировки, мы можем использовать некоторые недокументированные возможности, однако их недастаток в том, что обратно клавиатуру/мышь уже включить нельзя:

      "rundll32 keyboard,disable" - заблокироовать клавиатуру
      "rundll32 mouse,disable" - заблокировать мышь

      Запустить эти команды мы можем самое простое через ShellExecute() или WinExec():
      ShellExecute(Application.Handle,'open','C:\Windows\Rundll32.exe',
      'команда','C:\Windows',SW_HIDE);
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0198 ]   [ 16 queries used ]   [ Generated: 2.05.24, 05:55 GMT ]