c # - Er RegisterRawInputDevices () blok standard tastetryk behandling?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger RegisterRawInputDevices () til at modtage WM\_INPUT-meddelelser af tastaturindgang, som giver mig mulighed for at identificere hvilket tastatur indgangen var fra. Det virker godt.


Indgangen registrerer imidlertid ikke faktisk med formularvinduet. Jeg kan se, at der blev trykket en nøgle i debuggeren, men tekstboksen på formularen modtager aldrig nogen tekstindtastning. Så det jeg har en latterligt svært tid at finde ud af, er, hvordan man tillader normal behandling at fortsætte. Det lader til, at registrering af det rå input forhindrer min ansøgning på at få det 'naturligt' så at sige.


Jeg har gravet internettet siden i går, og jeg har ikke fundet svar. Så vil enhver input blive værdsat her.


 protected override void WndProc(ref Message m)
    {
        switch (m.Msg)
        {
            case (int)WindowsMessages.INPUT:
                int size = Marshal.SizeOf(typeof(RAWINPUT));
                uint dwSize = 0;
                Native.GetRawInputData(m.LParam, (uint)RawInputCommand.Input, IntPtr.Zero, ref dwSize, (uint)Marshal.SizeOf(typeof(RAWINPUTHEADER)));
                IntPtr buffer = Marshal.AllocHGlobal((int)dwSize);

                if (Native.GetRawInputData(m.LParam, (uint)RawInputCommand.Input, buffer, ref dwSize, (uint)Marshal.SizeOf(typeof(RAWINPUTHEADER))) == dwSize)
                {
                    RAWINPUT raw = (RAWINPUT)Marshal.PtrToStructure(buffer, typeof(RAWINPUT));

                    if (raw.header.dwType == RawInputType.Keyboard)
                    {
                        string character = Enum.Parse(typeof(VirtualKeys), raw.data.Keyboard.VKey.ToString()).ToString();

                        switch (raw.data.Keyboard.Message)
                        {
                            case (int)WindowsMessages.KEYDOWN:
                                OnKeyDown(new KeyEventArgs(KeyType.KeyDown, m, character));
                                break;
                            case (int)WindowsMessages.KEYUP:
                                OnKeyUp(new KeyEventArgs(KeyType.KeyUp, m, character));
                                break;
                            default:
                                break;
                        }
                    }
                }
                break;
            default:
                break;
        }
        base.WndProc(ref m);
    }

Bedste reference