internal RawInputDigitizer(RawInputDeviceHandle device, RawInputDeviceInfo deviceInfo) : base(device, deviceInfo) { if (!IsSupported(deviceInfo.Hid.UsageAndPage)) { throw new ArgumentException($"UsagePage and Usage {deviceInfo.Hid.UsageAndPage} is not supported as a digitizer.", nameof(deviceInfo)); } }
internal RawInputMouse(RawInputDeviceHandle device, RawInputDeviceInfo deviceInfo) : base(device, deviceInfo) { if (deviceInfo.Type != RawInputDeviceType.Mouse) { throw new ArgumentException($"Device type must be {RawInputDeviceType.Mouse}.", nameof(deviceInfo)); } }
internal RawInputKeyboard(RawInputDeviceHandle device, RawInputDeviceInfo deviceInfo) : base(device, deviceInfo) { if (deviceInfo.Type != RawInputDeviceType.Keyboard) { throw new ArgumentException($"Device type must be {RawInputDeviceType.Keyboard}", nameof(deviceInfo)); } }
internal RawInputHid(RawInputDeviceHandle device, RawInputDeviceInfo deviceInfo) : base(device, deviceInfo) { if (deviceInfo.Type != RawInputDeviceType.Hid) { throw new ArgumentException($"Device type must be {RawInputDeviceType.Hid}.", nameof(deviceInfo)); } hidReader = new Lazy <HidReader>(() => new HidReader(GetPreparsedData())); }
private void DeviceListAdd(RawInputDevice device) { string vid = "0000"; string pid = "0000"; if (device.DevicePath != null) { vid = device.VendorId.ToString("X4"); pid = device.ProductId.ToString("X4"); } string[] row = { RawInputDeviceHandle.GetRawValue(device.Handle).ToString("X8"), device.DeviceType.ToString(), vid, pid, device.ProductName, device.ManufacturerName, "?", "?", "?", (screenWidth / 2).ToString(), (screenHeight / 2).ToString(), GetFancyDeviceName(device), device.DevicePath }; table.Rows.Add(row); }
protected override void WndProc(ref Message m) { // Raw input event if (m.Msg == WM_INPUT) { var data = RawInputData.FromHandle(m.LParam); if (data == null) { Log("RawInputData NULL!"); base.WndProc(ref m); return; } // Device type switch (data) { case RawInputMouseData mouse: string handleM = "00000000"; if (mouse.Device != null) { handleM = RawInputDeviceHandle.GetRawValue(mouse.Device.Handle).ToString("X8"); } var nameM = GetFancyDeviceName(mouse.Device); var mode = mouse.Mouse.Flags; var x = mouse.Mouse.LastX; var y = mouse.Mouse.LastY; for (int i = 0; i < table.Rows.Count; i++) { if ((string)(table.Rows[i].Cells[0].Value) == handleM) { bool resize = false; if (table.Rows[i].Cells[6].Value.ToString() != mode.ToString()) { resize = true; } table.Rows[i].Cells[6].Value = mode; table.Rows[i].Cells[7].Value = x; table.Rows[i].Cells[8].Value = y; if (mode.HasFlag(RawMouseFlags.MoveRelative)) { // Super advanced position determination table.Rows[i].Cells[9].Value = Math.Min(Math.Max(Int32.Parse(table.Rows[i].Cells[9].Value.ToString()) + x, 0), screenWidth); table.Rows[i].Cells[10].Value = Math.Min(Math.Max(Int32.Parse(table.Rows[i].Cells[10].Value.ToString()) + y, 0), screenHeight); } else if (mode.HasFlag(RawMouseFlags.MoveAbsolute)) { table.Rows[i].Cells[9].Value = Math.Round((float)x / (float)0xFFFF * (float)screenWidth).ToString(); table.Rows[i].Cells[10].Value = Math.Round((float)y / (float)0xFFFF * (float)screenHeight).ToString(); } if (resize) { table.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells); } break; } } // Log event? if (chkEnabled.Checked) { if (mouse.Mouse.Buttons != RawMouseButtonFlags.None || (mouse.Mouse.Buttons == RawMouseButtonFlags.None && chkPosition.Checked)) { Log($"Handle: {handleM:X8}\tName: {nameM}\tX: {mouse.Mouse.LastX}\tY: {mouse.Mouse.LastY}\tFlags: {mouse.Mouse.Flags}\tButtons: {mouse.Mouse.Buttons}\tData: {mouse.Mouse.ButtonData}"); } } break; case RawInputKeyboardData keyboard: string handleK = "00000000"; if (keyboard.Device != null) { handleK = RawInputDeviceHandle.GetRawValue(keyboard.Device.Handle).ToString("X8"); } var nameK = GetFancyDeviceName(keyboard.Device); // Log event? if (chkEnabled.Checked) { Log($"Handle: {handleK:X8}\tName: {nameK}\tKeyCode: {keyboard.Keyboard.VirutalKey}\tScanCode: {keyboard.Keyboard.ScanCode}\tKey: {(Keys)keyboard.Keyboard.VirutalKey}\tFlags: {keyboard.Keyboard.Flags}"); } break; case RawInputHidData hid: Log(hid.Hid.ToString()); break; } } // Device added or removed event else if (m.Msg == WM_DEVICECHANGE) { if ((int)m.WParam == DBT_DEVNODES_CHANGED) { DeviceListUpdate(); } } base.WndProc(ref m); }