c++ - 使用 windowsAPI 防止其他窗口使用 "overriding"热键

标签 c++ windows winapi

我正在尝试通过制作一个程序来学习 Windows API 的基础知识,当按下 PRINTSCREEN 按钮时,该程序将保存一个 .jpeg 并立即将其上传到 imgur。目前,当我玩大多数游戏或只是浏览桌面时,此程序运行良好。

但是,某些游戏似乎阻止了我使用此热键的能力。 (黑暗之魂 2 专门这样做。)我目前使用

RegisterHotKey(NULL, 1, 0, VK_SNAPSHOT)

将按钮分配给我的程序。但是,在某些游戏运行时,按键按下时,上面的RegisterHotKey和下面的GetAsyncKeyState都不工作。

GetAsyncKeyState(VK_SNAPSHOT)

(我不想使用 GetAsyncKeyState,因为它会不断窃听 Windows API 并使程序不必要地变慢,它只是为了测试。)

有谁知道阻止这种情况发生的方法吗?

(并且,在一个不相关的说明上:如果这是一个简单的任务,我将如何截取跨多个显示器的屏幕截图?我的目前只能在我的主显示器上工作...)

最佳答案

如果应用程序正在使用 raw input对于它的键盘映射,键盘处理代码会绕过热键检查器。我个人不知道 Dark Souls 是否这样做,但我熟悉执行键盘处理的 Windows 内核代码。

关于c++ - 使用 windowsAPI 防止其他窗口使用 "overriding"热键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23819698/

相关文章:

c++ - 用预处理器确定 time_t 的大小?

c++ - CreateFile 异常安全吗?

windows - 查找给定进程 ID 的进程的所有线程

delphi - 在DCOM中传输记录最快的方法是什么

language-agnostic - Win32 : Is it possible to build an app that houses other apps?

c++ - 如何在 Xcode C++ 控制台应用程序中使用 dlib

c++ - 如何声明一个存储通过引用返回的对象的变量?

windows - docker wsarecv : An existing connection was forcibly closed by the remote host

linux - 将共享 NTFS 上的文件批量重命名为 Windows 风格的文件名

windows - 为什么 @ECHO ON/OFF 在批处理文件 IF block 中不起作用?