c++ - 将键盘敲击限制为单个进程

标签 c++ windows directx

我有一款游戏正在运行,我正试图在游戏中显示一个叠加层;用户可以在其中输入他的详细信息。这里的问题是用户输入的击键可用于游戏源,我想将击键限制为仅覆盖。
我正在使用 native c++ dll 来显示使用 CEF 呈现内容的叠加层。
有没有什么方法可以安全地做这件事,这样用户的详细信息就不会暴露给任何其他程序/进程。

非常感谢任何帮助。

最佳答案

您可以尝试使用 SetWindowHookEx .通过这种方式,您可以 Hook 所有发送到进程的键盘消息并完全停止传递它们(例如,在您自己的应用程序中处理它们而无需关注)。这是一种非常稳健的方式,但某些复制保护可能不喜欢它。

正常的步骤是:

  • 创建一个 DLL(一定是因为您需要将它加载到另一个进程/地址空间)来挂接 Windows 消息并进行第一次过滤。通常你使用一些 IPC 机制来获得你自己进程的形成。如果您只 Hook 鼠标消息,则可以使用 Windows 消息将信息发送到您自己的一条隐藏消息。如果您不希望消息到达,您可以在那里停止链。

  • 当 IPC 调用到达您自己的窗口时;处理它就像您自己收到键盘消息一样。尝试注意焦点等。

您唯一无法通过这种方式捕捉到的是您尝试更改的应用程序行为是否依赖于 GetAsyncKeyState。 ().在这种情况下,您唯一的选择是将您的 DLL 注入(inject)其他地址空间并 Hook 调用本身,但这是更高级别的黑客攻击。

忠告:开发windows hooking软件时:常存,常存!如果你犯了一个错误,你可能会一下子让一大堆应用程序崩溃......

关于c++ - 将键盘敲击限制为单个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10094817/

相关文章:

c++ - 从 vector 创建树

windows - Windows 版 Git 已停止工作

windows - 如何使用ffmpeg一次记录两个窗口?

windows - 批处理脚本中的管道运算符

c++ - Direct3D 导入库的用途是什么?

c++ - HLSL:SV_Position,为什么/如何从 float3 到 float4?

c++ - 合理的压缩 block 大小

c++ - 如何改变QTableWidget垂直表头的背景颜色?

c++ - std::merge 和 std::inplace_merge 之间的区别?

c++ - 如何在 directx 对象上使用 win32 C++ 获取鼠标单击的 x,y 坐标?