Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.120.109] |
|
Сообщ.
#1
,
|
|
|
Использование глобальных/локальных ловушек.
Возможные вариации: Любые вопросы, связанные с постановкой хука. Например "Как отследить [что-то]", "Как подменить [какое-то действие]", "Как заблокировать комбинации клавиш, как заблокировать определённые действия", "Как не дать запускаться определённым приложениям, не дать открываться определённым окнам?", "Как получить список запущенных оконных приложений?" и т.д. Теория: Хуки - аспекты реализации Рабочий пример глобальной блокировки правой кнопки мыши: Пример блокировки правой кнопки мыши Если требуется перехватывать клавиши, тогда из вышеобозначенной теории нам известны варианты: 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); |