WM_INPUT messages blocked by Device Manager

0

I have an application which monitors touchscreen messages in a Windows tablet. I want to wake up some hardware when the user touches the touchscreen. I have used the approach from Using Raw Input from C# to handle multiple keyboards.

I call RegisterRawInputDevices() to register to receive touchscreen messages:

        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
        }

I then receive WM_INPUT messages in my message pump:

    protected override void WndProc(ref Message message)
    {
      switch (message.Msg)
        {
            case WmInput:
                // handle touch messages
                break;
        }
        base.WndProc(ref message);
    }

This works fine most of the time. I can touch anywhere on the screen and my application gets a WM_INPUT message. But if I run Windows Device Manager, I do not get touch messages when I touch inside the Device Manager.

I have tested this with the Microsoft Digiinfo tool, and it has the same behaviour.

I also see the same behaviour with the Computer Management application.

Is there a class of applications that can block WM_INPUT messages? Is there some way around this problem? I may just have to accept this behaviour, but I would still like to understand it.

c#
windows-8.1
touchscreen
raw-input
asked on Stack Overflow Nov 20, 2015 by Journeyman

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0