Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 反向工程全局热键块_C++_Winapi_Reverse Engineering_Hotkeys_Directinput - Fatal编程技术网

C++ 反向工程全局热键块

C++ 反向工程全局热键块,c++,winapi,reverse-engineering,hotkeys,directinput,C++,Winapi,Reverse Engineering,Hotkeys,Directinput,我正在尝试反向工程(OllyDbg)一个应用程序(游戏),它在窗口(D3D)处于活动状态时禁用(捕获/拦截/阻止)所有全局热键(Ctrl-Alt-Del除外) 我的问题是,当窗口处于活动状态时,此类应用程序可以通过哪些方式捕获/禁用全局热键(包括winkey、CTRL+Esc和其他应用程序中设置的全局热键) 它似乎使用DirectInput(如果有必要的话)。我看到它没有设置任何低级钩子(SetWindowsHookEx)。这样的事情还能用其他什么方法来做呢 提出的意见: 当应用程序挂起时(当

我正在尝试反向工程(OllyDbg)一个应用程序(游戏),它在窗口(D3D)处于活动状态时禁用(捕获/拦截/阻止)所有全局热键(Ctrl-Alt-Del除外)

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

它似乎使用DirectInput(如果有必要的话)。我看到它没有设置任何低级钩子(
SetWindowsHookEx
)。这样的事情还能用其他什么方法来做呢

提出的意见:

  • 当应用程序挂起时(当其窗口仍处于焦点时),热键在窗口处于焦点时仍处于禁用状态。将窗口切换到其他窗口可以启用它们。切换回暂停的应用程序窗口将再次禁用热键
  • 如果执行相同的操作,但在窗口失去焦点后挂起应用程序,然后切换回挂起的窗口,则热键完全工作
  • 编辑:应用程序似乎会阻止使用
    注册表快捷键设置的全局快捷键,但不会禁用通过挂钩(
    SetWindowsHookEx
    )创建的任何快捷键
上面的实验似乎表明,这是一些与窗口相关的设置,即使应用程序被挂起也能起作用。可能是某种DirectInput设置吗?(尽管我看到的唯一一个DINPUT API函数调用是
DINPUT8.DirectInput8Create


我这样做的目的是希望改变这种行为,使其他应用程序的热键在游戏窗口集中时能正常工作。任何想法和建议都值得赞赏。

正如Hans Passant在评论中所建议的,是直接输入导致了这种行为,由于使用IDirectInputDevice8::SetCooperativeLevel设置了
DISCL_EXCLUSIVE
标志,您无法禁用所有热键-系统始终会截取Ctrl-Alt-Del。@KerrekSB:您可能会发现Doom 3感兴趣的源的windows部分:(有趣的是,他们在那里也禁用了任务管理器,ctrl+alt+del&crtl+shift+esc)@Necralis,链接不错,谢谢。他们想要捕获并禁用那些热键,OllyDbg告诉我,在这种情况下,这些热键并不存在。但也许是/我只是因为某种原因没有找到那个调用(我在这方面非常新手)。(如果调试器没有列出它,我怎么能找到它?以某种方式钩住它?)我会看看IDirectInputDevice8::SetCollaborativeLevel()。DISCL_EXCLUSIVE和DISCL_NOWINKEY标志很有希望。