WM_INPUT不在焦点上时没有收到
本文关键字:焦点 INPUT WM | 更新日期: 2023-09-27 17:56:08
我在C#中使用Windows Forms和SharpDX RawInput。
一切正常,但是当窗口失去焦点时,消息会停止。
我已经向Application.AddMessageFilter
注册了自己的消息过滤器,一旦失去焦点,消息甚至不会到达那里。
WM_INPUT消息不是应该独立于焦点吗?当窗口在后台时,如何使它工作?
诀
窍是设置RIDEV_INPUTSINK
标志。在SharpDX中,这被称为DeviceFlags.InputSink
。
您可以编辑演示应用程序,以便即使窗口未聚焦,仍能接收原始输入消息,方法是执行以下操作:
替换以下两行:
Device.RegisterDevice(UsagePage.Generic, UsageId.GenericMouse, DeviceFlags.None);
Device.RegisterDevice(UsagePage.Generic, UsageId.GenericKeyboard, DeviceFlags.None);
有了这两行:
Device.RegisterDevice(UsagePage.Generic, UsageId.GenericMouse, DeviceFlags.InputSink, form.Handle);
Device.RegisterDevice(UsagePage.Generic, UsageId.GenericKeyboard, DeviceFlags.InputSink, form.Handle);
因此,您将标志更改为 InputSink,并且您正在获取窗口的句柄,而在标志为 none 并且未指定窗口之前。