private static bool HasTabletDevices() { uint deviceCount = 0; // Determine the number of devices first (result will be -1 if fails and cDevices will have count) int result = (int)MS.Win32.UnsafeNativeMethods.GetRawInputDeviceList(null, ref deviceCount, (uint)Marshal.SizeOf(typeof(NativeMethods.RAWINPUTDEVICELIST))); if (result >= 0 && deviceCount != 0) { NativeMethods.RAWINPUTDEVICELIST[] ridl = new NativeMethods.RAWINPUTDEVICELIST[deviceCount]; int count = (int)MS.Win32.UnsafeNativeMethods.GetRawInputDeviceList(ridl, ref deviceCount, (uint)Marshal.SizeOf(typeof(NativeMethods.RAWINPUTDEVICELIST))); if (count > 0) { for (int i = 0; i < count; i++) { if (ridl[i].dwType == NativeMethods.RIM_TYPEHID) { NativeMethods.RID_DEVICE_INFO deviceInfo = new NativeMethods.RID_DEVICE_INFO(); deviceInfo.cbSize = (uint)Marshal.SizeOf(typeof(NativeMethods.RID_DEVICE_INFO)); uint cbSize = (uint)deviceInfo.cbSize; int cBytes = (int)MS.Win32.UnsafeNativeMethods.GetRawInputDeviceInfo(ridl[i].hDevice, NativeMethods.RIDI_DEVICEINFO, ref deviceInfo, ref cbSize); if (cBytes > 0) { if (deviceInfo.hid.usUsagePage == NativeMethods.HID_USAGE_PAGE_DIGITIZER) { switch (deviceInfo.hid.usUsage) { case NativeMethods.HID_USAGE_DIGITIZER_DIGITIZER: case NativeMethods.HID_USAGE_DIGITIZER_PEN: case NativeMethods.HID_USAGE_DIGITIZER_TOUCHSCREEN: case NativeMethods.HID_USAGE_DIGITIZER_LIGHTPEN: { return(true); } } } } else { System.Diagnostics.Debug.WriteLine("TabletDeviceCollection: GetRawInputDeviceInfo failed!"); } } } } else if (count < 0) { System.Diagnostics.Debug.WriteLine("TabletDeviceCollection: GetRawInputDeviceList failed!"); } } return(false); }
private static bool HasTabletDevices() { uint deviceCount = 0; // Determine the number of devices first (result will be -1 if fails and cDevices will have count) int result = (int)MS.Win32.UnsafeNativeMethods.GetRawInputDeviceList(null, ref deviceCount, (uint)Marshal.SizeOf(typeof(NativeMethods.RAWINPUTDEVICELIST))); if (result >= 0 && deviceCount != 0) { NativeMethods.RAWINPUTDEVICELIST[] ridl = new NativeMethods.RAWINPUTDEVICELIST[deviceCount]; int count = (int)MS.Win32.UnsafeNativeMethods.GetRawInputDeviceList(ridl, ref deviceCount, (uint)Marshal.SizeOf(typeof(NativeMethods.RAWINPUTDEVICELIST))); if (count > 0) { for (int i = 0; i < count; i++) { if (ridl[i].dwType == NativeMethods.RIM_TYPEHID) { NativeMethods.RID_DEVICE_INFO deviceInfo = new NativeMethods.RID_DEVICE_INFO(); deviceInfo.cbSize = (uint)Marshal.SizeOf(typeof(NativeMethods.RID_DEVICE_INFO)); uint cbSize = (uint)deviceInfo.cbSize; int cBytes = (int)MS.Win32.UnsafeNativeMethods.GetRawInputDeviceInfo(ridl[i].hDevice, NativeMethods.RIDI_DEVICEINFO, ref deviceInfo, ref cbSize); if (cBytes > 0) { if (deviceInfo.hid.usUsagePage == NativeMethods.HID_USAGE_PAGE_DIGITIZER) { switch (deviceInfo.hid.usUsage) { case NativeMethods.HID_USAGE_DIGITIZER_DIGITIZER: case NativeMethods.HID_USAGE_DIGITIZER_PEN: case NativeMethods.HID_USAGE_DIGITIZER_TOUCHSCREEN: case NativeMethods.HID_USAGE_DIGITIZER_LIGHTPEN: { return true; } } } } else { System.Diagnostics.Debug.WriteLine("TabletDeviceCollection: GetRawInputDeviceInfo failed!"); } } } } else if (count < 0) { System.Diagnostics.Debug.WriteLine("TabletDeviceCollection: GetRawInputDeviceList failed!"); } } return false; }