//コンストラクタ public HidDevice(HidDeviceInfo devInfo) { this.devInfo = devInfo; InitDevInfo(); intrInCtrl = new InterruptInCtrl(devInfo.DevicePath, tCaps.InputReportByteLength); }
// public HidDeviceInfo[] GetDeviceList(int vendorID, int productID) { HidDeviceInfo[] devInfoList; try { devInfoList = GetDeviceList(false, vendorID, productID); } catch { devInfoList = new HidDeviceInfo[0]; } hidDevInfoList = devInfoList; return(devInfoList); }
//デバイスを検索し、基本情報を取得する public HidDeviceInfo[] GetDeviceList() { HidDeviceInfo[] devInfoList; try { devInfoList = GetDeviceList(true, 0, 0); } catch { devInfoList = new HidDeviceInfo[0]; } hidDevInfoList = devInfoList; return(devInfoList); }
// private HidDeviceInfo[] GetDeviceList(bool isFindAll, int vendorID, int productID) { //デバイス情報セットを取得する Guid hidGuid = new Guid(); HidD_GetHidGuid(ref hidGuid); IntPtr hDevInfoSet = SetupDiGetClassDevs( ref hidGuid, null, IntPtr.Zero, DIGCF.DIGCF_DEVICEINTERFACE | DIGCF.DIGCF_PRESENT); //各デバイス情報からデバイスのパス名を取得する SP_DEVICE_INTERFACE_DATA DeviceInterfaceData = new SP_DEVICE_INTERFACE_DATA(); DeviceInterfaceData.cbSize = Marshal.SizeOf(DeviceInterfaceData); int MemberIndex = 0; StringCollection scDevicePath = new StringCollection(); while (SetupDiEnumDeviceInterfaces(hDevInfoSet, IntPtr.Zero, ref hidGuid, MemberIndex++, ref DeviceInterfaceData)) { string devicePath = GetDevicePath(hDevInfoSet, ref DeviceInterfaceData); if (string.IsNullOrEmpty(devicePath) || scDevicePath.Contains(devicePath)) { continue; } scDevicePath.Add(devicePath); } //デバイス情報セットを破棄する SetupDiDestroyDeviceInfoList(hDevInfoSet); //目的のデバイスを検索する HIDD_ATTRIBUTES HiddAttributes = new HIDD_ATTRIBUTES(); HiddAttributes.Size = Marshal.SizeOf(HiddAttributes); ArrayList alHidDevInfos = new ArrayList(); foreach (string devicePath in scDevicePath) { //問い合わせモードでデバイスをオープンする SafeFileHandle hHidDev = DeviceAccess.OpenQueryMode(devicePath); if (hHidDev.IsInvalid) { continue; } //デバイスの属性を取得する if (HidD_GetAttributes(hHidDev, ref HiddAttributes)) { //目的のデバイスであれば追加情報を取得する if (isFindAll || (HiddAttributes.VendorID == vendorID && HiddAttributes.ProductID == productID)) { string devVenderName, devDeviceName, devSerialNumber; GetAdditionalInfo(hHidDev, out devVenderName, out devDeviceName, out devSerialNumber); HidDeviceInfo hidDevInfo = new HidDeviceInfo(devicePath, ref HiddAttributes, devVenderName, devDeviceName, devSerialNumber); alHidDevInfos.Add(hidDevInfo); } } //クローズ hHidDev.Close(); } //取得したデバイス情報を配列に格納する(長さ0以上の配列となる) HidDeviceInfo[] hidDevInfos = new HidDeviceInfo[alHidDevInfos.Count]; alHidDevInfos.CopyTo(hidDevInfos); return(hidDevInfos); }