diff -r 0d0c62b1df48 -r 94850bfc12b5 RemoteControlDevice.cs
--- a/RemoteControlDevice.cs Thu Nov 06 21:57:53 2014 +0100
+++ b/RemoteControlDevice.cs Fri Nov 07 20:49:51 2014 +0100
@@ -3,13 +3,11 @@
using System.Runtime.InteropServices;
using System.Diagnostics;
using Hid.UsageTables;
+using Win32;
namespace Devices.RemoteControl
{
-
-
-
public enum InputDevice
{
Key,
@@ -127,159 +125,6 @@
public sealed class RemoteControlDevice
{
-
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- internal struct RAWINPUTDEVICE
- {
- [MarshalAs(UnmanagedType.U2)]
- public ushort usUsagePage;
- [MarshalAs(UnmanagedType.U2)]
- public ushort usUsage;
- [MarshalAs(UnmanagedType.U4)]
- public int dwFlags;
- public IntPtr hwndTarget;
- }
-
-
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- internal struct RAWINPUTHEADER
- {
- [MarshalAs(UnmanagedType.U4)]
- public int dwType;
- [MarshalAs(UnmanagedType.U4)]
- public int dwSize;
- public IntPtr hDevice;
- [MarshalAs(UnmanagedType.U4)]
- public int wParam;
- }
-
-
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- internal struct RAWHID
- {
- [MarshalAs(UnmanagedType.U4)]
- public int dwSizeHid;
- [MarshalAs(UnmanagedType.U4)]
- public int dwCount;
- //
- //BYTE bRawData[1];
- }
-
-
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- internal struct BUTTONSSTR
- {
- [MarshalAs(UnmanagedType.U2)]
- public ushort usButtonFlags;
- [MarshalAs(UnmanagedType.U2)]
- public ushort usButtonData;
- }
-
-
- [StructLayout(LayoutKind.Explicit, Pack = 1)]
- internal struct RAWMOUSE
- {
- [MarshalAs(UnmanagedType.U2)]
- [FieldOffset (0)] public ushort usFlags;
- [MarshalAs(UnmanagedType.U4)]
- [FieldOffset (4)] public uint ulButtons;
- [FieldOffset (4)] public BUTTONSSTR buttonsStr;
- [MarshalAs(UnmanagedType.U4)]
- [FieldOffset (8)] public uint ulRawButtons;
- [MarshalAs(UnmanagedType.U4)]
- [FieldOffset (12)] public int lLastX;
- [MarshalAs(UnmanagedType.U4)]
- [FieldOffset (16)] public int lLastY;
- [MarshalAs(UnmanagedType.U4)]
- [FieldOffset (20)] public uint ulExtraInformation;
- }
-
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- internal struct RAWKEYBOARD
- {
- [MarshalAs(UnmanagedType.U2)]
- public ushort MakeCode;
- [MarshalAs(UnmanagedType.U2)]
- public ushort Flags;
- [MarshalAs(UnmanagedType.U2)]
- public ushort Reserved;
- [MarshalAs(UnmanagedType.U2)]
- public ushort VKey;
- [MarshalAs(UnmanagedType.U4)]
- public uint Message;
- [MarshalAs(UnmanagedType.U4)]
- public uint ExtraInformation;
- }
-
-
- [StructLayout(LayoutKind.Explicit, Pack=1)]
- internal struct RAWINPUT
- {
- [FieldOffset (0)] public RAWINPUTHEADER header;
- [FieldOffset (16)] public RAWMOUSE mouse;
- [FieldOffset (16)] public RAWKEYBOARD keyboard;
- [FieldOffset (16)] public RAWHID hid;
- }
-
-
- [StructLayout(LayoutKind.Sequential, Pack=1)]
- internal struct RID_DEVICE_INFO_MOUSE
- {
- public uint dwId;
- public uint dwNumberOfButtons;
- public uint dwSampleRate;
- public bool fHasHorizontalWheel;
- }
-
-
- [StructLayout(LayoutKind.Sequential, Pack=1)]
- internal struct RID_DEVICE_INFO_KEYBOARD
- {
- public uint dwType;
- public uint dwSubType;
- public uint dwKeyboardMode;
- public uint dwNumberOfFunctionKeys;
- public uint dwNumberOfIndicators;
- public uint dwNumberOfKeysTotal;
- }
-
- [StructLayout(LayoutKind.Sequential, Pack=1)]
- internal struct RID_DEVICE_INFO_HID
- {
- public uint dwVendorId;
- public uint dwProductId;
- public uint dwVersionNumber;
- public ushort usUsagePage;
- public ushort usUsage;
- }
-
- [StructLayout(LayoutKind.Explicit, Pack=1)]
- internal struct RID_DEVICE_INFO
- {
- [FieldOffset(0)]
- public uint cbSize;
- [FieldOffset(4)]
- public uint dwType;
- [FieldOffset(8)]
- public RID_DEVICE_INFO_MOUSE mouse;
- [FieldOffset(8)]
- public RID_DEVICE_INFO_KEYBOARD keyboard;
- [FieldOffset(8)]
- public RID_DEVICE_INFO_HID hid;
- }
-
-
-
- [DllImport("User32.dll")]
- extern static bool RegisterRawInputDevices(RAWINPUTDEVICE[] pRawInputDevice, uint uiNumDevices, uint cbSize);
-
- [DllImport("User32.dll")]
- extern static uint GetRawInputData(IntPtr hRawInput, uint uiCommand, IntPtr pData, ref uint pcbSize, uint cbSizeHeader);
-
- [DllImport("User32.dll", SetLastError=true)]
- extern static int GetRawInputDeviceInfo(IntPtr hDevice, uint uiCommand, IntPtr pData, ref uint pcbSize);
-
-
private const int WM_KEYDOWN = 0x0100;
private const int WM_APPCOMMAND = 0x0319;
private const int WM_INPUT = 0x00FF;
@@ -308,35 +153,6 @@
private const int FAPPCOMMAND_KEY = 0;
private const int FAPPCOMMAND_OEM = 0x1000;
- ///
- /// GetRawInputDeviceInfo pData points to a string that contains the device name.
- ///
- public const uint RIDI_DEVICENAME = 0x20000007;
- ///
- /// GetRawInputDeviceInfo For this uiCommand only, the value in pcbSize is the character count (not the byte count).
- ///
- public const uint RIDI_DEVICEINFO = 0x2000000b;
- ///
- /// GetRawInputDeviceInfo pData points to an RID_DEVICE_INFO structure.
- ///
- public const uint RIDI_PREPARSEDDATA = 0x20000005;
-
-
- ///
- /// Data comes from a mouse.
- ///
- public const uint RIM_TYPEMOUSE = 0;
- ///
- /// Data comes from a keyboard.
- ///
- public const uint RIM_TYPEKEYBOARD = 1;
- ///
- /// Data comes from an HID that is not a keyboard or a mouse.
- ///
- public const uint RIM_TYPEHID = 2;
-
-
-
public delegate void RemoteControlDeviceEventHandler(object sender, RemoteControlEventArgs e);
@@ -367,7 +183,7 @@
rid[2].usUsage = 0x80;
rid[2].dwFlags = 0;
- if (!RegisterRawInputDevices(rid,
+ if (!Function.RegisterRawInputDevices(rid,
(uint) rid.Length,
(uint) Marshal.SizeOf(rid[0]))
)
@@ -538,7 +354,7 @@
uint sizeOfHeader=(uint)Marshal.SizeOf(typeof(RAWINPUTHEADER));
//Get the size of our raw input data.
- GetRawInputData(message.LParam, RID_INPUT, IntPtr.Zero, ref dwSize, sizeOfHeader);
+ Win32.Function.GetRawInputData(message.LParam, RID_INPUT, IntPtr.Zero, ref dwSize, sizeOfHeader);
//Allocate a large enough buffer
IntPtr rawInputBuffer = Marshal.AllocHGlobal((int) dwSize);
@@ -548,7 +364,7 @@
return;
//Now read our RAWINPUT data
- if (GetRawInputData(message.LParam, RID_INPUT, rawInputBuffer, ref dwSize, (uint) Marshal.SizeOf(typeof(RAWINPUTHEADER))) != dwSize)
+ if (Win32.Function.GetRawInputData(message.LParam, RID_INPUT, rawInputBuffer, ref dwSize, (uint)Marshal.SizeOf(typeof(RAWINPUTHEADER))) != dwSize)
{
return;
}
@@ -560,7 +376,7 @@
uint deviceInfoSize = (uint)Marshal.SizeOf(typeof(RID_DEVICE_INFO));
IntPtr deviceInfoBuffer = Marshal.AllocHGlobal((int)deviceInfoSize);
- int res = GetRawInputDeviceInfo(raw.header.hDevice, RIDI_DEVICEINFO, deviceInfoBuffer, ref deviceInfoSize);
+ int res = Win32.Function.GetRawInputDeviceInfo(raw.header.hDevice, Const.RIDI_DEVICEINFO, deviceInfoBuffer, ref deviceInfoSize);
if (res <= 0)
{
Debug.WriteLine("WM_INPUT could not read device info: " + Marshal.GetLastWin32Error().ToString());
@@ -573,13 +389,13 @@
//Check type of input device and quite if we don't like it
switch (deviceInfo.dwType)
{
- case RIM_TYPEHID:
+ case Const.RIM_TYPEHID:
Debug.WriteLine("WM_INPUT source device is HID.");
break;
- case RIM_TYPEMOUSE:
+ case Const.RIM_TYPEMOUSE:
Debug.WriteLine("WM_INPUT source device is Mouse.");
return;
- case RIM_TYPEKEYBOARD:
+ case Const.RIM_TYPEKEYBOARD:
Debug.WriteLine("WM_INPUT source device is Keyboard.");
return;
default:
@@ -591,7 +407,7 @@
Debug.WriteLine("Usage Page: 0x" + deviceInfo.hid.usUsagePage.ToString("X4") + " Usage: 0x" + deviceInfo.hid.usUsage.ToString("X4"));
//Check that our raw input is HID
- if (raw.header.dwType == RIM_TYPEHID && raw.hid.dwSizeHid>0)
+ if (raw.header.dwType == Const.RIM_TYPEHID && raw.hid.dwSizeHid>0)
{
//Allocate a buffer for one HID message
byte[] bRawData = new byte[raw.hid.dwSizeHid];
@@ -633,11 +449,11 @@
}
}
}
- else if(raw.header.dwType == RIM_TYPEMOUSE)
+ else if(raw.header.dwType == Const.RIM_TYPEMOUSE)
{
// do mouse handling...
}
- else if(raw.header.dwType == RIM_TYPEKEYBOARD)
+ else if(raw.header.dwType == Const.RIM_TYPEKEYBOARD)
{
// do keyboard handling...
}