我怎么知道你要哪个?只有你自己才清楚要干什么获取什么…
给你写段代码获取所有,可以自己添加条件过滤 ...
额,A大不好意思, 是我没表达清楚
就是一般 USB 的插入不是随机的嘛,就像插入一个名称为A的USB,我们本身是不知道插入的型号名称的, 所以通常是看设备管理器的显示,显示A我们才知道USB的名称为A.
但是这个注册表下的 选项,都列举出来的话, 不也 不知道筛选的条件的嘛,因为我如果事先知道USB的名称为A的话,会通过字母,字符串数量筛选, 但是现在没插,怎么知道如何筛选呢
可能我的想法出问题了,或者自身太菜了,是这样的过程吧 “通用串行总线控制器” 里面都是控制器的名称,比如集线器设备等。怎么又扯上插入USB的型号名称了?完全不懂你要干什么… afan 发表于 2020-11-9 16:55
“通用串行总线控制器” 里面都是控制器的名称,比如集线器设备等。怎么又扯上插入USB的型号名称了?完全不 ...
好吧,原来是这样,我想的太简单了,耽误A 大你这么长时间
就是一个设备, 需要用USB 连接测试,USB主要起到传输数据给上位机的作用, USB连接后,会在控制器里面显示 内部设定好的名称(AG130 这样),所以不同设备连接,显示的控制器名称也不同
我现在就是想通过AU3 读取控制器名称,或者说连接上的设备名称
额,大概就是这样( 其实直接设备管理器看也不难, 我就是想试试AU3行不行{:1_336:}) 本帖最后由 afan 于 2020-11-9 17:36 编辑
应该还是可以在注册表读取,你可以分别在连接后和断开后获取该处注册表信息,如果有差异就可作为判断并添加过滤条件了~
另外,可能也可以通过连接后的相关窗口控件信息获取,没有用过仅猜测一下~ afan 发表于 2020-11-9 17:33
应该还是可以在注册表读取,你可以分别在连接后和断开后获取该处注册表信息,如果有差异就可作为判断并添加 ...
好的谢谢A大 haijie1223 发表于 2020-11-8 22:39
建议下载devcon的代码研究一下,一看便知
发哥这个设备类怎么定义,VC定义是DEFINE_GUID( GUID_DEVCLASS_USB, 0x36fc9e60L, 0xc465, 0x11cf, 0x80, 0x56, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 );Global Const $DIGCF_ALLCLASSES = 4
Global Const $DIGCF_PRESENT = 2
Local $hDll = DllOpen("SetupAPI.dll"), $Index = 0
Local $SP_DEVINFO_DATA = DllStructCreate("dword cbSize;byte ClassGuid; dword DevInst; ulong_ptr Reserved")
$SP_DEVINFO_DATA.cbSize = DllStructGetSize($SP_DEVINFO_DATA)
Local $hDevInfo = Dllcall($hDll, "hwnd", "SetupDiGetClassDevs", "ptr", 0, "ptr", 0, "hwnd", 0,"dword", BitOR($DIGCF_ALLCLASSES, $DIGCF_PRESENT))
While 1
$iResult = DllCall($hDll,"int", "SetupDiEnumDeviceInfo", "ptr", $hDevInfo, "long", $Index, "ptr", DllStructGetPtr($SP_DEVINFO_DATA))
if $iResult < 1 Then Exit
$iResult = Dllcall($hDll,"int", "SetupDiGetDeviceRegistryProperty", "ptr", $hDevInfo, "ptr", DllStructGetPtr($SP_DEVINFO_DATA), "dword", 0, "dword*", 0, "str", "", "dword", 1024, "dword*", 0)
ConsoleWrite("Index: " & $Index & @TAB & "Device description: " & $iResult & @CRLF)
$Index += 1
WEnd
DllClose($hDll)参考https://www.cnblogs.com/MaxWoods/p/4022861.html 繁星 发表于 2020-11-9 23:52
发哥这个设备类怎么定义,VC定义是参考https://www.cnblogs.com/MaxWoods/p/4022861.html
这是个CLSID
ClassGUID = {36FC9E60-C465-11CF-8056-444553540000} 本帖最后由 itsky2 于 2020-11-11 18:38 编辑
Global Const $tagSTORAGE_PROPERTY_QUERY = 'ULONG_ptr PropertyId;' & _
'ULONG_ptr QueryType;' & _
'byte AdditionalParameters'
Global Const $tagSTORAGE_DESCRIPTOR_HEADER = 'dword Version;' & _
'dword Size'
Func _Get_DiskName($sDrive)
Local $a_HardwareInfo, $aReturn, $tTemp, $ptrTemp
Local $hKernel32 = DllOpen('Kernel32.dll')
$aReturn = DllCall($hKernel32, 'ptr', 'CreateFileW', _
'wstr', '\\.\' & $sDrive, _
'dword', 0, _
'dword', 7, _
'ptr', 0, _
'dword', 3, _
'dword', 0, _
'ptr', 0 _
)
If @error Or $aReturn = Ptr(-1) Then Return SetError(@error, @extended, '')
Local $hDevice = $aReturn
Local $tSTORAGE_PROPERTY_QUERY = DllStructCreate($tagSTORAGE_PROPERTY_QUERY)
DllStructSetData($tSTORAGE_PROPERTY_QUERY, 'PropertyId', 0)
DllStructSetData($tSTORAGE_PROPERTY_QUERY, 'QueryType', 0)
Local $tSTORAGE_DESCRIPTOR_HEADER = DllStructCreate($tagSTORAGE_DESCRIPTOR_HEADER)
$aReturn = DllCall($hKernel32, 'int', 'DeviceIoControl', _
'handle', $hDevice, _
'dword', 0x002D1400, _
'ptr', DllStructGetPtr($tSTORAGE_PROPERTY_QUERY), _
'dword', DllStructGetSize($tSTORAGE_PROPERTY_QUERY), _
'ptr', DllStructGetPtr($tSTORAGE_DESCRIPTOR_HEADER), _
'dword', DllStructGetSize($tSTORAGE_DESCRIPTOR_HEADER), _
'dword*', 0, _
'ptr', 0 _
)
If @error Then Return SetError(@error, @extended, '')
Local $bRemoveableMedia = False
If DllStructGetData($tSTORAGE_DESCRIPTOR_HEADER, "Size") Then
Local Const $tagSTORAGE_DEVICE_DESCRIPTOR = 'ulong Version;' & _
'ulong Size;' & _
'byte DeviceType;' & _
'byte DeviceTypeModifier;' & _
'boolean RemovableMedia;' & _
'boolean CommandQueueing;' & _
'ulong VendorIdOffset;' & _
'ulong ProductIdOffset;' & _
'ulong ProductRevisionOffset;' & _
'ulong SerialNumberOffset;' & _
'ulong BusType;' & _
'ulong RawPropertiesLength;' & _
'byte RawDeviceProperties[' & DllStructGetData($tSTORAGE_DESCRIPTOR_HEADER, "Size") & ']'
Local $tSTORAGE_DEVICE_DESCRIPTOR = DllStructCreate($tagSTORAGE_DEVICE_DESCRIPTOR)
$aReturn = DllCall($hKernel32, 'int', 'DeviceIoControl', _
'handle', $hDevice, _
'dword', 0x002D1400, _
'ptr', DllStructGetPtr($tSTORAGE_PROPERTY_QUERY), _
'dword', DllStructGetSize($tSTORAGE_PROPERTY_QUERY), _
'ptr', DllStructGetPtr($tSTORAGE_DEVICE_DESCRIPTOR), _
'dword', DllStructGetSize($tSTORAGE_DEVICE_DESCRIPTOR), _
'dword*', 0, _
'ptr', 0 _
)
$bRemoveableMedia = DllStructGetData($tSTORAGE_DEVICE_DESCRIPTOR, "RemovableMedia")
If DllStructGetData($tSTORAGE_DEVICE_DESCRIPTOR, "VendorIdOffset") Then
$ptrTemp = DllStructGetPtr($tSTORAGE_DEVICE_DESCRIPTOR) + DllStructGetData($tSTORAGE_DEVICE_DESCRIPTOR, "VendorIdOffset")
$tTemp = DllStructCreate("char Temp[" & _WinAPI_StringLenA($ptrTemp) & "]", $ptrTemp)
$a_HardwareInfo = DllStructGetData($tTemp, "Temp")
EndIf
If DllStructGetData($tSTORAGE_DEVICE_DESCRIPTOR, "ProductIdOffset") Then
$ptrTemp = DllStructGetPtr($tSTORAGE_DEVICE_DESCRIPTOR) + DllStructGetData($tSTORAGE_DEVICE_DESCRIPTOR, "ProductIdOffset")
$tTemp = DllStructCreate("char Temp[" & _WinAPI_StringLenA($ptrTemp) & "]", $ptrTemp)
$a_HardwareInfo = DllStructGetData($tTemp, "Temp")
EndIf
If DllStructGetData($tSTORAGE_DEVICE_DESCRIPTOR, "ProductRevisionOffset") Then
$ptrTemp = DllStructGetPtr($tSTORAGE_DEVICE_DESCRIPTOR) + DllStructGetData($tSTORAGE_DEVICE_DESCRIPTOR, "ProductRevisionOffset")
$tTemp = DllStructCreate("char Temp[" & _WinAPI_StringLenA($ptrTemp) & "]", $ptrTemp)
$a_HardwareInfo = DllStructGetData($tTemp, "Temp")
EndIf
EndIf
DllCall($hKernel32, 'int', 'CloseHandle', 'hwnd', $hDevice)
DllClose($hKernel32)
Return SetError(0, _
$bRemoveableMedia, _
StringRegExpReplace($a_HardwareInfo & $a_HardwareInfo & $a_HardwareInfo, '\h+', ' '))
EndFunc ;==>_Get_DiskName
传参:'PhysicalDrive' & 数字
越跑越偏了 afan 发表于 2020-11-11 22:19
越跑越偏了
哈哈,居然跑偏了嘛
不过我确实菜鸡也看不懂DLL,就感觉一大堆挺厉害的,我肯定是写不出来 itzyx 发表于 2020-11-11 23:34
哈哈,居然跑偏了嘛
不过我确实菜鸡也看不懂DLL,就感觉一大堆挺厉害的,我肯定是写不出来
这不是厉害的问题,是答非所问。当然,你觉得帮你解决了就好~ afan 发表于 2020-11-11 23:55
这不是厉害的问题,是答非所问。当然,你觉得帮你解决了就好~
A大 主要我太菜了,有的回答都看不懂, 研究透的话要花好长时间。
我每次提问,一是为了解决遇到的问题,最主要的——还是希望通过前辈们的指点,学习一下思路,或者学习我没接触的知识点。不然太迷茫了,不知道从何入手,怎么更好的去学习AU3
页:
1
[2]