//デバイスの基本情報をセットする private bool InitDevInfo() { SafeFileHandle hHidDev = DeviceAccess.OpenQueryMode(devInfo.DevicePath); if (hHidDev.IsInvalid) { return(false); } //各種レポートのバッファサイズを取得する bool isOK = false; IntPtr pPreparsedData; if (HidD_GetPreparsedData(hHidDev, out pPreparsedData)) { tCaps = new HIDP_CAPS(); isOK = HidP_GetCaps(pPreparsedData, ref tCaps); HidD_FreePreparsedData(pPreparsedData); } //その他、必要な情報があればここで処理する // hHidDev.Close(); return(isOK); }
// 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); }