public RawKeyboard(IntPtr hwnd, bool captureOnlyInForeground) { var rid = new RawInputDevice[1]; rid[0].UsagePage = HidUsagePage.GENERIC; rid[0].Usage = HidUsage.Keyboard; rid[0].Flags = (captureOnlyInForeground ? RawInputDeviceFlags.NONE : RawInputDeviceFlags.INPUTSINK) | RawInputDeviceFlags.DEVNOTIFY; rid[0].Target = hwnd; if(!Win32.RegisterRawInputDevices(rid, (uint)rid.Length, (uint)Marshal.SizeOf(rid[0]))) { throw new ApplicationException("Failed to register raw input device(s)."); } }
internal static extern bool RegisterRawInputDevices(RawInputDevice[] pRawInputDevice, uint numberDevices, uint size);