我正在编写一个游戏,其中我使用 GetAsyncKeyState() 进行字符控制,如 WASD 和鼠标按钮,并使用 Windows 消息系统进行菜单内容,如文本输入和光标控制。
每隔一段时间,我的计算机似乎就会进入 GetAsyncKeyState() 不返回任何内容的奇怪状态。这似乎与我的游戏崩溃的时间有关。一旦计算机处于这种状态,除非我重新启动计算机,否则我不知道如何将其取出。
在这种情况下,Windows 消息传递系统仍然可以正常工作 - 如果我键入“W”键,我仍然会收到 WM_KEYDOWN 消息,并且该字母可以显示在我的菜单系统中,但是以下通常有效的方法将失败:
bool result = (GetAsyncKeyState(vkey) & 0x8000) != 0;
据我所知,这是由外部程序(例如 Synergy+,我用来在计算机之间共享鼠标/键盘输入)引起的,但是我还不能证明这一点。
不管是什么原因,我都不希望最终用户出现这个问题。是否有任何技术可以诊断和修复这样的状态?
编辑:也许这是某种驱动程序问题?我刚刚注意到,当我的计算机进入这种状态时,我的鼠标不再处理我分配给其额外按钮的快捷方式。我不知道这一切是如何运作的,不知道在这种情况下应该责备什么。