设备管理器阻止WM_INPUT消息

时间:2015-11-20 15:44:56

标签: c# windows-8.1 touchscreen raw-input

我有一个监控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消息的应用程序?有什么方法可以解决这个问题吗?我可能只需要接受这种行为,但我仍然希望理解它。

0 个答案:

没有答案