我正在尝试对一个应用程序(游戏)进行逆向工程(OllyDbg),该应用程序(游戏)在其窗口(D3D)处于活动状态(Ctrl-Alt-Del 除外)时禁用(捕获/拦截/阻止)所有全局热键。
我的问题是此类应用程序在其窗口处于活动状态时可以通过哪些方式捕获/禁用全局热键(包括在其他应用程序中设置的 winkey、CTRL+Esc 和全局热键)?
它似乎使用 DirectInput (如果重要的话)。我看到它没有设置任何低级挂钩(SetWindowsHookEx
)。这样的事情可以通过哪些其他方式来完成?
观察到:
- 当应用程序被挂起时(当它的窗口仍然处于焦点时),热键在窗口处于焦点时仍然被禁用。将窗口切换到其他东西可以启用它们。切换回暂停的应用程序窗口会再次禁用热键。
- 如果做同样的事情,但在窗口失去焦点后暂停应用程序,然后切换回暂停的窗口,热键完全可以工作。
- 编辑:该应用程序似乎阻止了用 设置的全局热键
RegisterHotKey
,但不会禁用任何借助钩子 (SetWindowsHookEx
) 制作的热键。
上面的实验似乎表明它是与窗口相关的一些设置,即使应用程序被挂起也能正常工作。会不会是某种 DirectInput 设置?(尽管我看到的唯一 DINPUT API 函数调用是DINPUT8.DirectInput8Create
。)
我这样做是希望改变这种行为,使其他应用程序的热键在游戏窗口集中时像往常一样工作。任何想法和提示表示赞赏。