public static bool TryGetSerialPortName(HDEVINFO deviceInfoSet, ref SP_DEVINFO_DATA deviceInfoData, out string portName) { portName = null; IntPtr hkey = NativeMethods.SetupDiOpenDevRegKey(deviceInfoSet, ref deviceInfoData); if (hkey != (IntPtr)(-1)) { try { char[] portNameChars = new char[64]; int portNameLength = 63 * 2; if (0 == NativeMethods.RegQueryValueEx(hkey, "PortName", 0, IntPtr.Zero, portNameChars, ref portNameLength)) { Array.Resize(ref portNameChars, portNameLength / 2); string newPortName = NativeMethods.NTString(portNameChars); if (newPortName.Length >= 4 && newPortName.StartsWith("COM")) { portName = newPortName; } } } finally { NativeMethods.RegCloseKey(hkey); } } return(portName != null); }
public static extern Boolean SetupDiGetDeviceInterfaceDetail( HDEVINFO DeviceInfoSet, ref SP_DEVICE_INTERFACE_DATA DeviceInterfaceData, IntPtr DeviceInterfaceDetailData, //ref SP_DEVICE_INTERFACE_DETAIL_DATA DWORD DeviceInterfaceDetailDataSize, ref WORD RequiredSize, IntPtr DeviceInfoData //ref SP_DEVINFO_DATA );
public static bool TryGetDeviceRegistryProperty(HDEVINFO deviceInfoSet, ref SP_DEVINFO_DATA deviceInfoData, uint property, out string value) { value = null; uint propertyDataType; char[] propertyValueChars = new char[64]; int propertyValueLength = 63 * 2; if (SetupDiGetDeviceRegistryProperty(deviceInfoSet, ref deviceInfoData, property, out propertyDataType, propertyValueChars, propertyValueLength, IntPtr.Zero)) { if (propertyDataType == REG_SZ) { value = NativeMethods.NTString(propertyValueChars); } } return(value != null); }
private static string[] getHIDPath() { ArrayList pathList = new ArrayList(); Guid guid = new Guid(); HidD_GetHidGuid(ref guid); // HIDに関する情報を持つ構造体の配列を取得する HDEVINFO hDevInfo = SetupDiGetClassDevs(ref guid, IntPtr.Zero, IntPtr.Zero, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); SP_DEVICE_INTERFACE_DATA spid = new SP_DEVICE_INTERFACE_DATA(); spid.cbSize = (UInt32)Marshal.SizeOf(spid); int i = 0; // usbデバイスを列挙する。なくなったら0を返す。 while (SetupDiEnumDeviceInterfaces(hDevInfo, 0, ref guid, i++, ref spid)) { ushort size = 0; //デバイスインターフェース詳細情報のメモリサイズを取得する. SetupDiGetDeviceInterfaceDetail(hDevInfo, ref spid, IntPtr.Zero, 0, ref size, IntPtr.Zero); SP_DEVICE_INTERFACE_DETAIL_DATA detail = new SP_DEVICE_INTERFACE_DETAIL_DATA(); if (IntPtr.Size == 8) // for 64 bit operating systems { detail.cbSize = 8; } else { detail.cbSize = 4 + (uint)Marshal.SystemDefaultCharSize; // for 32 bit systems } ushort len = 0; if (SetupDiGetDeviceInterfaceDetail(hDevInfo, ref spid, ref detail, size, ref len, IntPtr.Zero)) { //デバイスへアクセスするためのパスが手に入った pathList.Add(detail.DevicePath); } } return((String[])pathList.ToArray(typeof(String))); }
public static bool SetupDiGetDeviceInterfaceDetail(HDEVINFO deviceInfoSet, ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData, out SP_DEVICE_INTERFACE_DETAIL_DATA deviceInterfaceDetailData) { deviceInterfaceDetailData = new NativeMethods.SP_DEVICE_INTERFACE_DETAIL_DATA(); deviceInterfaceDetailData.Size = IntPtr.Size == 8 ? 8 : (4 + Marshal.SystemDefaultCharSize); if (NativeMethods.SetupDiGetDeviceInterfaceDetail(deviceInfoSet, ref deviceInterfaceData, ref deviceInterfaceDetailData, Marshal.SizeOf(deviceInterfaceDetailData) - 4, IntPtr.Zero, IntPtr.Zero)) { return(true); } else { deviceInterfaceDetailData = default(SP_DEVICE_INTERFACE_DETAIL_DATA); return(false); } }
public static extern bool SetupDiGetDeviceRegistryProperty(HDEVINFO deviceInfoSet, ref SP_DEVINFO_DATA deviceInfoData, uint property, out uint propertyDataType, char[] buffer, int lengthInBytes, IntPtr lengthInBytesRequired);
public static extern bool SetupDiGetDeviceInterfaceDetail(HDEVINFO deviceInfoSet, ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData, ref SP_DEVICE_INTERFACE_DETAIL_DATA deviceInterfaceDetailData, int deviceInterfaceDetailDataSize, IntPtr requiredSize, IntPtr deviceInfoData);
public static extern bool SetupDiEnumDeviceInterfaces(HDEVINFO deviceInfoSet, ref SP_DEVINFO_DATA deviceInfoData, [MarshalAs(UnmanagedType.LPStruct)] Guid interfaceClassGuid, int memberIndex, ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData);
public static extern bool SetupDiDestroyDeviceInfoList(HDEVINFO deviceInfoSet);
public static extern bool SetupDiEnumDeviceInterfaces(HDEVINFO deviceInfoSet, IntPtr deviceInfoData, [MarshalAs(UnmanagedType.LPStruct)] Guid interfaceClassGuid, int memberIndex, ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData);
public static extern int SerialDisplayAdvancedSettings(HWND ParentHwnd, HDEVINFO DeviceInfoSet, [NativeTypeName("PSP_DEVINFO_DATA")] void *DeviceInfoData);
public static extern IntPtr SetupDiOpenDevRegKey(HDEVINFO deviceInfoSet, ref SP_DEVINFO_DATA deviceInfoData, int scope = DICS_FLAG_GLOBAL, int profile = 0, int keyType = DIREG_DEV, uint desiredAccess = KEY_READ);
public static extern bool SetupDiEnumDeviceInfo(HDEVINFO deviceInfoSet, int memberIndex, ref SP_DEVINFO_DATA deviceInfoData);
public static extern IntPtr SetupDiOpenDeviceInterfaceRegKey(HDEVINFO deviceInfoSet, ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData, uint reserved = 0, uint desiredAccess = KEY_READ);
public static extern bool SetupDiEnumDeviceInterfaces( HDEVINFO DeviceInfoSet, int DeviceInfoData, ref Guid InterfaceClassGuid, int MemberIndex, ref SP_DEVICE_INTERFACE_DATA DeviceInterfaceData);