逆向工程全局热键块

时间:2012-02-19 03:53:48

标签: c++ winapi reverse-engineering hotkeys directinput

我试图对一个应用程序(游戏)进行反向工程(OllyDbg),该应用程序禁止(捕获/拦截/阻止)所有全局热键,同时其窗口(D3D)处于活动状态(Ctrl-Alt-Del除外)。

我的问题是,当它的窗口处于活动状态时,此类应用程序可以通过哪些方式捕获/禁用全局热键(包括其他应用程序中设置的winkey,CTRL + Esc和全局热键)?

似乎使用DirectInput(如果重要的话)。我发现它没有设置任何低级钩子(SetWindowsHookEx)。在其他方面可以做这样的事情吗?

观察:

  • 当应用程序暂停时(当窗口仍处于焦点时),当窗口处于焦点时,仍会禁用热键。将窗口切换为其他内容可启用它们。切换回暂停的应用程序窗口会再次禁用热键。
  • 如果做同样的事情,但在窗口失去焦点后暂停应用程序,然后切换回暂停的窗口,热键完全正常工作。
  • 编辑:应用程序似乎会阻止使用RegisterHotKey设置的全局热键,但不会禁用借助挂钩(SetWindowsHookEx)创建的任何热键。

上面的实验似乎表明它有一些与窗口相关的设置,即使应用程序被暂停也能正常工作。它可能是某种DirectInput设置吗? (虽然我看到唯一的DINPUT API函数调用是DINPUT8.DirectInput8Create。)

我这样做是为了改变这种行为,使其他应用程序的热键在游戏窗口聚焦时照常工作。任何想法和提示表示赞赏。

1 个答案:

答案 0 :(得分:1)

正如Hans Passant在评论中所建议的那样,由于DISCL_EXCLUSIVE标志设置为IDirectInputDevice8::SetCooperativeLevel,导致此行为的是DirectInput。