我有一个监控Windows平板电脑中触摸屏消息的应用程序。我想在用户触摸触摸屏时唤醒一些硬件。我使用了Using Raw Input from C# to handle multiple keyboards的方法。
我调用RegisterRawInputDevices()来注册接收触摸屏消息:
var rid = new RawInputDevice[1];
rid[0].UsagePage = 13; // HidUsagePage.Digitizer
rid[0].Usage = 4; // HidUsage.TouchScreen
rid[0].Flags = 0x00000100; // RawInputDeviceFlags.InputSink
rid[0].Target = this.Handle;
if (!RegisterRawInputDevices(rid, (uint)rid.Length, (uint)Marshal.SizeOf(rid[0])))
{
// report error
}
然后我在消息泵中收到WM_INPUT消息:
protected override void WndProc(ref Message message)
{
switch (message.Msg)
{
case WmInput:
// handle touch messages
break;
}
base.WndProc(ref message);
}
大部分时间都可以正常使用。我可以触摸屏幕上的任何地方,我的应用程序会收到WM_INPUT消息。但是,如果我运行Windows设备管理器,当我触摸设备管理器时,我不会收到触摸消息。
我使用Microsoft Digiinfo工具对此进行了测试,它具有相同的行为。
我也看到了与计算机管理应用程序相同的行为。
是否有一类可以阻止WM_INPUT消息的应用程序?有什么方法可以解决这个问题吗?我可能只需要接受这种行为,但我仍然希望理解它。