C++ KeyboardProc返回TRUE导致性能下降
我正在为游戏的附加组件开发一个界面。我不能使用游戏API(有几个原因,包括代码必须与游戏无关),我需要从用户那里获取键盘输入,因此我决定在满足某些条件时使用键盘挂钩(WHU键盘)来处理用户输入。C++ KeyboardProc返回TRUE导致性能下降,c++,windows,winapi,hook,C++,Windows,Winapi,Hook,我正在为游戏的附加组件开发一个界面。我不能使用游戏API(有几个原因,包括代码必须与游戏无关),我需要从用户那里获取键盘输入,因此我决定在满足某些条件时使用键盘挂钩(WHU键盘)来处理用户输入。 问题是,虽然我可以正确地接收和处理输入,但当我的钩子返回TRUE而不是系统返回TRUE时,在让事情按预期进行之前,似乎要花费大量时间(远远超过800毫秒),这是不可接受的,因为它甚至不允许流畅的打字体验。 我必须做到的是阻止关键新闻信息到达WndProc,所以问题是:我能做些什么来实现我的目标,而不会对
问题是,虽然我可以正确地接收和处理输入,但当我的钩子返回TRUE而不是系统返回TRUE时,在让事情按预期进行之前,似乎要花费大量时间(远远超过800毫秒),这是不可接受的,因为它甚至不允许流畅的打字体验。
我必须做到的是阻止关键新闻信息到达WndProc,所以问题是:我能做些什么来实现我的目标,而不会对游戏性能造成太大的伤害,以至于结果无法接受?
编辑:由于特定要求(使用反切球的游戏可能会在我的代码中产生问题,尽管它与作弊无关),将活动wndproc子类化不是一个选项
不过,它应该可以工作。键盘挂钩不应该让事情变得那么慢。可能还有其他原因导致800毫秒的延迟。如果钩子什么也不做,只是返回TRUE,那么它仍然很慢吗?如果您想阻止消息到达WndProc,那么您需要使用子类,这样您就能够捕获所有消息并决定是否继续它们的路由 虽然我不喜欢回答自己的问题,但我已经找到了延误的原因。我测试代码所针对的游戏的消息泵是用while(PeekMessage){GetMessage…}实现的,删除键盘输入消息会导致GetMessage阻塞一段时间。使用PostMessage和WM_NULL有助于防止GetMessage被阻止。谢谢你的建议,但正如你指出的,anticheats不会喜欢这个,虽然我这样做不是为了作弊,但我真的无法承担引发误报的后果。键盘钩子的优点是anticheats不会标记它,因为许多程序将其用于合法目的…Windows子类化也被许多程序用于合法目的。是的,即使我处理键盘事件不会对性能造成任何影响(但这对我来说不好,因为我处理的按键不应该由游戏处理),只要返回TRUE就足以导致速度减慢,而返回FALSE就可以了。我已经在两个不同的游戏上用不同的引擎进行了测试,结果是一样的。谢谢,但正如上面所评论的,子类化不是一个选项。