Я пытаюсь перепроектировать (OllyDbg) приложение (игру), которое отключает (захватывает / перехватывает / блокирует) все глобальные горячие клавиши, когда его окно (D3D) активно (кроме Ctrl-Alt-Del).
У меня вопрос, каким образом такое приложение может захватывать / отключать глобальные горячие клавиши (в том числе winkey, CTRL + Esc и глобальные горячие клавиши, установленные в других приложениях), когда его окно активно?
Кажетсяиспользовать DirectInput (если это имеет значение).Я вижу, что он не устанавливает никаких низкоуровневых хуков (SetWindowsHookEx
).Какими еще способами это можно сделать?
Наблюдения сделаны:
- Когда приложение приостановлено (пока его окно все еще находится в фокусе), горячие клавиши по-прежнему отключеныпока окно находится в фокусе.Переключение окна на что-то другое позволяет им.При возврате к окну приостановленных приложений горячие клавиши снова отключаются.
- Если сделать то же самое, но приостановить работу приложения после того, как окно потеряло фокус, а затем переключиться обратно к приостановленному окну, горячие клавиши полностью работают.
- Редактировать: Приложение, похоже, блокирует глобальные горячие клавиши, установленные с помощью
RegisterHotKey
, но не отключает никакие горячие клавиши, созданные с помощью ловушки (SetWindowsHookEx
).
Эксперимент выше показывает, что некоторые настройки, связанные с окном, работают даже тогда, когда приложение приостановлено.Может быть, это какая-то настройка DirectInput?(Хотя я вижу только один вызов функции DINPUT API: DINPUT8.DirectInput8Create
.)
Я делаю это в надежде изменить это поведение, чтобы заставить горячие клавиши из других приложений работать как обычно, пока игровое окно сфокусировано.,Любые идеи и советы приветствуются.