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 RawInput(IntPtr parentHandle) { try { base.AssignHandle(parentHandle); RawInput._rawinputDriver = new RawInputDriver(parentHandle); RawInput._rawinputDriver.EnumerateDevices(); this._devNotifyHandle = RawInput.RegisterForDeviceNotifications(parentHandle); } catch (Exception ex) { DebugCenter.GetInstance().appendToFile(ex.Message + "\r\n" + ex.StackTrace); } }
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); }