繁体   English   中英

在游戏的特定UI区域中未处理SendInput事件

[英]SendInput events don't get processed in specific UI area of game

我有一个C#应用程序,它将键盘和鼠标事件发送到游戏。 在游戏中,有一小部分UI可以根据我们想要看到的内容进行更改(例如GPS地图,采取的不同操作等)。 有时,在用户界面的这一部分中,我们必须按“ Enter”(或另一个键,具体取决于用户如何配置游戏键)以激活某些内容(例如,按Enter激活Rescue服务)。

现在,问题来了:从C#应用程序发送的所有关键事件都在该UI的外部进行了很好的处理,除了“激活”之外。 起初,我认为'ENTER'(返回)键事件存在问题,但是在将其更改为游戏中可以使用的另一个键之后,我注意到该键也被忽略了。

我不确定这是否是与我发送消息的方式有关的问题(也许它需要一个特定的参数),是否可以通过修改我的应用程序来解决,或者游戏中是否存在某种阻塞-在这种情况下,没有任何问题我可以。

这是我用来发送关键事件的代码:

public static void PressKey(short key)
        {
            INPUT[] inputs = new INPUT[]
            {
                new INPUT
                {
                    type = INPUT_KEYBOARD,
                    u = new InputUnion
                    {
                        ki = new KEYBDINPUT
                        {
                            wVk = (ushort)0,
                            wScan = (ushort)key,
                            dwFlags = KEYEVENTF_SCANCODE,
                            dwExtraInfo = IntPtr.Zero,
                        }
                    }
                },
                new INPUT
                {
                    type = INPUT_KEYBOARD,
                    u = new InputUnion
                    {
                        ki = new KEYBDINPUT
                        {
                            wVk = (ushort)0,
                            wScan = (ushort)key,
                            dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP,
                            dwExtraInfo = GetMessageExtraInfo(),
                        }
                    }
                }
            };
            SendInput((uint)inputs.Length, inputs, Marshal.SizeOf(typeof(INPUT)));
        }

但是希望它是第一种情况,对此我将提供任何帮助。

添加了屏幕截图,以便尝试更好地解释问题

  • (A)->这是UI窗口,需要按下“ ENTER”。 假设我修改了游戏的设置,以使ACTIVATE操作具有“ E”而不是“ Enter”。 然后,文本“呼叫协助服务(ENTER)”现在将显示“呼叫协助服务(E)”。 默认情况下,“ E”键是游戏中的引擎启动。 并且它工作得很好(在(B)情况下)。 一旦我将E更改为'Activate',它就会被完全忽略。
  • 可能(或可能不)相关的另一点是,可以位于UI窗口底部的F键,也可以正常工作。 我希望这可以使事情更加清晰。

我已经找到了问题所在,并且我很确定这与游戏处理输入的方式有关(但是由于不是我编写游戏的代码,所以我不能保证)。

无论如何,要解决我的问题,需要在KEYDOWN和KEYUP事件之间添加延迟。 目前,我正在使用带有回调的Timer,但是可能还有其他方法(更好或不是)。

希望有一天能对某人有所帮助:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM