itzyx 发表于 2020-11-9 15:59:40

afan 发表于 2020-11-9 15:30
我怎么知道你要哪个?只有你自己才清楚要干什么获取什么…
给你写段代码获取所有,可以自己添加条件过滤 ...

额,A大不好意思, 是我没表达清楚
就是一般 USB 的插入不是随机的嘛,就像插入一个名称为A的USB,我们本身是不知道插入的型号名称的, 所以通常是看设备管理器的显示,显示A我们才知道USB的名称为A.
但是这个注册表下的 选项,都列举出来的话, 不也 不知道筛选的条件的嘛,因为我如果事先知道USB的名称为A的话,会通过字母,字符串数量筛选, 但是现在没插,怎么知道如何筛选呢
可能我的想法出问题了,或者自身太菜了,是这样的过程吧

afan 发表于 2020-11-9 16:55:25

“通用串行总线控制器” 里面都是控制器的名称,比如集线器设备等。怎么又扯上插入USB的型号名称了?完全不懂你要干什么…

itzyx 发表于 2020-11-9 17:14:37

afan 发表于 2020-11-9 16:55
“通用串行总线控制器” 里面都是控制器的名称,比如集线器设备等。怎么又扯上插入USB的型号名称了?完全不 ...

好吧,原来是这样,我想的太简单了,耽误A 大你这么长时间
就是一个设备, 需要用USB 连接测试,USB主要起到传输数据给上位机的作用, USB连接后,会在控制器里面显示 内部设定好的名称(AG130 这样),所以不同设备连接,显示的控制器名称也不同
我现在就是想通过AU3 读取控制器名称,或者说连接上的设备名称
额,大概就是这样( 其实直接设备管理器看也不难, 我就是想试试AU3行不行{:1_336:})

afan 发表于 2020-11-9 17:33:44

本帖最后由 afan 于 2020-11-9 17:36 编辑

应该还是可以在注册表读取,你可以分别在连接后和断开后获取该处注册表信息,如果有差异就可作为判断并添加过滤条件了~
另外,可能也可以通过连接后的相关窗口控件信息获取,没有用过仅猜测一下~

itzyx 发表于 2020-11-9 18:08:19

afan 发表于 2020-11-9 17:33
应该还是可以在注册表读取,你可以分别在连接后和断开后获取该处注册表信息,如果有差异就可作为判断并添加 ...

好的谢谢A大

繁星 发表于 2020-11-9 23:52:31

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

haijie1223 发表于 2020-11-10 17:59:43

繁星 发表于 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:36:39

本帖最后由 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:46

越跑越偏了

itzyx 发表于 2020-11-11 23:34:31

afan 发表于 2020-11-11 22:19
越跑越偏了

哈哈,居然跑偏了嘛
不过我确实菜鸡也看不懂DLL,就感觉一大堆挺厉害的,我肯定是写不出来

afan 发表于 2020-11-11 23:55:49

itzyx 发表于 2020-11-11 23:34
哈哈,居然跑偏了嘛
不过我确实菜鸡也看不懂DLL,就感觉一大堆挺厉害的,我肯定是写不出来

这不是厉害的问题,是答非所问。当然,你觉得帮你解决了就好~

itzyx 发表于 2020-11-12 00:05:34

afan 发表于 2020-11-11 23:55
这不是厉害的问题,是答非所问。当然,你觉得帮你解决了就好~

A大 主要我太菜了,有的回答都看不懂, 研究透的话要花好长时间。
我每次提问,一是为了解决遇到的问题,最主要的——还是希望通过前辈们的指点,学习一下思路,或者学习我没接触的知识点。不然太迷茫了,不知道从何入手,怎么更好的去学习AU3
页: 1 [2]
查看完整版本: 如何 读取串行总线控制器的 USB名称