gpt4 book ai didi

c++ - KeyboardProc 返回 TRUE 会导致性能下降

转载 作者:行者123 更新时间:2023-11-30 04:40:36 25 4
gpt4 key购买 nike

我正在为游戏的附加组件开发界面。我不能使用游戏 API(出于多种原因,包括代码必须与游戏无关)并且我需要从用户那里获取键盘输入,所以我决定使用键盘 Hook (WH_KEYBOARD) 来处理用户满足特定条件时输入。
问题是,虽然我可以正确接收和处理输入,但当我的钩子(Hook)返回 TRUE 而不是 CallNextHookEx 时该系统似乎在让事情按预期进行之前占用了很多时间(超过 800 毫秒),这是 Not Acceptable ,因为它甚至不允许流畅的打字体验。
我必须实现的是防止按键消息到达 WndProc,所以问题是:我可以做些什么来实现我的目标而不会对游戏性能造成太大的伤害以至于结果是 Not Acceptable ?
编辑:由于特定要求(使用反作弊的游戏可能会给我的代码带来问题,尽管它与作弊无关)子类化事件的 wndproc 不是一个选项。

最佳答案

  1. 首先,您需要通过 Hook 或 any other way 将 DLL 注入(inject)到目标进程中.

  2. 找到感兴趣的窗口句柄。

  3. 通过调用 GetWindowLongPtr(wnd, GWLP_WNDPROC) 获取该窗口的当前窗口过程,并保存它。

  4. 通过调用 SetWindowLongPtr( wnd, GWLP_WNDPROC, &NewWndProc ) 对窗口进行子类化,其中 NewWndProc 是您的 DLL 实现的消息过程。

在 NewWndProc 中,您需要处理键盘消息(有很多,在 MSDN 索引中键入“键盘输入”,我不能发布超过 1 个链接)。对于其余的 Windows 消息,调用您在 (3) 中保存的原始窗口过程,并返回它返回的值。不要直接调用它,而是使用 CallWindowProc。

这种方式不是很可靠,一些防病毒和反机器人(例如“ jail 长客户端”)软件可能不喜欢它,并且调试可能具有挑战性。

但它应该有效。

关于c++ - KeyboardProc 返回 TRUE 会导致性能下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1052992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com