public void ProcessRawInput(IntPtr hdevice) { //Debug.WriteLine(_rawBuffer.data.keyboard.ToString()); //Debug.WriteLine(_rawBuffer.data.hid.ToString()); //Debug.WriteLine(_rawBuffer.header.ToString()); if (_deviceList.Count == 0) { return; } var dwSize = 0; Win32.GetRawInputData(hdevice, DataCommand.RID_INPUT, IntPtr.Zero, ref dwSize, Marshal.SizeOf(typeof(Rawinputheader))); if (dwSize != Win32.GetRawInputData(hdevice, DataCommand.RID_INPUT, out _rawBuffer, ref dwSize, Marshal.SizeOf(typeof(Rawinputheader)))) { Debug.WriteLine("Error getting the rawinput buffer"); return; } int virtualKey = _rawBuffer.data.keyboard.VKey; int makeCode = _rawBuffer.data.keyboard.Makecode; int flags = _rawBuffer.data.keyboard.Flags; if (virtualKey == Win32.KEYBOARD_OVERRUN_MAKE_CODE) { return; } var isE0BitSet = ((flags & Win32.RI_KEY_E0) != 0); KeyPressEvent keyPressEvent; if (_deviceList.ContainsKey(_rawBuffer.header.hDevice)) { lock (_padLock) { keyPressEvent = _deviceList[_rawBuffer.header.hDevice]; } } else { Debug.WriteLine("Handle: {0} was not in the device list.", _rawBuffer.header.hDevice); return; } var isBreakBitSet = ((flags & Win32.RI_KEY_BREAK) != 0); keyPressEvent.KeyPressState = isBreakBitSet ? "BREAK" : "MAKE"; keyPressEvent.Message = _rawBuffer.data.keyboard.Message; keyPressEvent.VKeyName = KeyMapper.GetKeyName(VirtualKeyCorrection(virtualKey, isE0BitSet, makeCode)).ToUpper(); keyPressEvent.VKey = virtualKey; if (KeyPressed != null) { KeyPressed(this, new RawInputEventArg(keyPressEvent)); } }
public bool ProcessRawInput(IntPtr hdevice, out RawInputEvent inputEvent) { inputEvent = new RawInputEvent(); inputEvent.Filter = false; if (this._deviceList.Count == 0) { return(false); } if (this.CaptureOnlyIfTopMostWindow && !this.isForegroundProcess()) { return(false); } int num = 0; Win32.GetRawInputData(hdevice, DataCommand.RID_INPUT, IntPtr.Zero, ref num, Marshal.SizeOf(typeof(Rawinputheader))); if (num != Win32.GetRawInputData(hdevice, DataCommand.RID_INPUT, out RawInputDriver._rawBuffer, ref num, Marshal.SizeOf(typeof(Rawinputheader)))) { return(false); } int vKey = (int)RawInputDriver._rawBuffer.data.keyboard.VKey; int makecode = (int)RawInputDriver._rawBuffer.data.keyboard.Makecode; int flags = (int)RawInputDriver._rawBuffer.data.keyboard.Flags; if (vKey == 255) { return(false); } bool isE0BitSet = (flags & 2) != 0; if (this._deviceList.ContainsKey(RawInputDriver._rawBuffer.header.hDevice)) { lock (this._padLock) { inputEvent = this._deviceList[RawInputDriver._rawBuffer.header.hDevice]; goto IL_129; } return(false); IL_129: inputEvent.RawInputData = RawInputDriver._rawBuffer; if (inputEvent.DeviceType.Equals("KEYBOARD")) { bool flag2 = (flags & 1) != 0; inputEvent.KeyPressState = (flag2 ? "BREAK" : "MAKE"); inputEvent.Message = RawInputDriver._rawBuffer.data.keyboard.Message; inputEvent.VKeyName = KeyMapper.GetKeyName(RawInputDriver.VirtualKeyCorrection(vKey, isE0BitSet, makecode)).ToUpper(); inputEvent.VKey = vKey; } if (this.InputEvent != null) { this.InputEvent(this, new InputEventArg(inputEvent)); } return(true); } return(false); }
public bool ProcessRawInput(IntPtr hdevice) { if (this._deviceList.Count == 0) { return(false); } if (this.CaptureOnlyIfTopMostWindow && !this.isForegroundProcess()) { return(false); } int num = 0; Win32.GetRawInputData(hdevice, DataCommand.RID_INPUT, IntPtr.Zero, ref num, Marshal.SizeOf(typeof(Rawinputheader))); if (num != Win32.GetRawInputData(hdevice, DataCommand.RID_INPUT, out RawInputDriver._rawBuffer, ref num, Marshal.SizeOf(typeof(Rawinputheader)))) { return(false); } if (RawInputDriver._rawBuffer.header.dwType != 2u) { if (RawInputDriver._rawBuffer.header.dwType == 1u) { int vKey = (int)RawInputDriver._rawBuffer.data.keyboard.VKey; int makecode = (int)RawInputDriver._rawBuffer.data.keyboard.Makecode; int flags = (int)RawInputDriver._rawBuffer.data.keyboard.Flags; if (vKey == 255) { return(false); } bool isE0BitSet = (flags & 2) != 0; if (this._deviceList.ContainsKey(RawInputDriver._rawBuffer.header.hDevice)) { RawInputEvent rawInputEvent; lock (this._padLock) { rawInputEvent = this._deviceList[RawInputDriver._rawBuffer.header.hDevice]; goto IL_144; } return(false); IL_144: bool flag2 = (flags & 1) != 0; rawInputEvent.RawInputData = RawInputDriver._rawBuffer; rawInputEvent.KeyPressState = (flag2 ? "BREAK" : "MAKE"); rawInputEvent.Message = RawInputDriver._rawBuffer.data.keyboard.Message; rawInputEvent.VKeyName = KeyMapper.GetKeyName(RawInputDriver.VirtualKeyCorrection(vKey, isE0BitSet, makecode)).ToUpper(); rawInputEvent.VKey = vKey; if (this.InputEvent != null) { this.InputEvent(this, new InputEventArg(rawInputEvent)); return(true); } return(true); } return(false); } else { if (RawInputDriver._rawBuffer.header.dwType == 0u) { if (this._deviceList.ContainsKey(RawInputDriver._rawBuffer.header.hDevice)) { RawInputEvent rawInputEvent2; lock (this._padLock) { rawInputEvent2 = this._deviceList[RawInputDriver._rawBuffer.header.hDevice]; goto IL_241; } return(false); IL_241: rawInputEvent2.RawInputData = RawInputDriver._rawBuffer; rawInputEvent2.mouseMessage = (ulong)RawInputDriver._rawBuffer.data.mouse.usButtonFlags; if (this.InputEvent != null) { this.InputEvent(this, new InputEventArg(rawInputEvent2)); return(true); } return(true); } return(false); } } } return(true); }