找回密码
 加入
搜索
楼主: itzyx

[网络通信] 如何 读取串行总线控制器的 USB名称

[复制链接]
 楼主| 发表于 2020-11-9 15:59:40 | 显示全部楼层
afan 发表于 2020-11-9 15:30
我怎么知道你要哪个?只有你自己才清楚要干什么获取什么…
给你写段代码获取所有,可以自己添加条件过滤 ...

额,A大不好意思, 是我没表达清楚
就是一般 USB 的插入不是随机的嘛,就像插入一个名称为A的USB,我们本身是不知道插入的型号名称的, 所以通常是看设备管理器的显示,显示A  我们才知道USB的名称为A.
但是这个注册表下的 选项,都列举出来的话, 不也 不知道筛选的条件的嘛,因为我如果事先知道USB的名称为A的话,会通过字母,字符串数量筛选, 但是现在没插,怎么知道如何筛选呢
可能我的想法出问题了,或者自身太菜了,是这样的过程吧
发表于 2020-11-9 16:55:25 | 显示全部楼层
“通用串行总线控制器” 里面都是控制器的名称,比如集线器设备等。怎么又扯上插入USB的型号名称了?完全不懂你要干什么…
 楼主| 发表于 2020-11-9 17:14:37 | 显示全部楼层
afan 发表于 2020-11-9 16:55
“通用串行总线控制器” 里面都是控制器的名称,比如集线器设备等。怎么又扯上插入USB的型号名称了?完全不 ...

好吧,原来是这样,我想的太简单了,耽误A 大你这么长时间
就是一个设备, 需要用USB 连接测试,USB主要起到传输数据给上位机的作用, USB连接后,会在控制器里面显示 内部设定好的名称(AG130 这样),所以不同设备连接,显示的控制器名称也不同
我现在就是想通过AU3 读取控制器名称,或者说连接上的设备名称
额,大概就是这样( 其实直接设备管理器看也不难, 我就是想试试AU3行不行
发表于 2020-11-9 17:33:44 | 显示全部楼层
本帖最后由 afan 于 2020-11-9 17:36 编辑

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

评分

参与人数 1金钱 +20 收起 理由
itzyx + 20 赞一个! 感谢不厌其烦

查看全部评分

 楼主| 发表于 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[16]; 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[0], "long", $Index, "ptr", DllStructGetPtr($SP_DEVINFO_DATA))
        if $iResult[0] < 1 Then Exit
    $iResult = Dllcall($hDll,"int", "SetupDiGetDeviceRegistryProperty", "ptr", $hDevInfo[0], "ptr", DllStructGetPtr($SP_DEVINFO_DATA), "dword", 0, "dword*", 0, "str", "", "dword", 1024, "dword*", 0)
        ConsoleWrite("Index: " & $Index & @TAB & "Device description: " & $iResult[5] & @CRLF)
    $Index += 1
WEnd
DllClose($hDll)
参考https://www.cnblogs.com/MaxWoods/p/4022861.html
发表于 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}
发表于 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[4]'

Global Const $tagSTORAGE_DESCRIPTOR_HEADER = 'dword Version;' & _
                'dword Size'

Func _Get_DiskName($sDrive)

        Local $a_HardwareInfo[3], $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[0] = Ptr(-1) Then Return SetError(@error, @extended, '')

        Local $hDevice = $aReturn[0]

        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[0] = 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[1] = 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[2] = DllStructGetData($tTemp, "Temp")
                EndIf
        EndIf

        DllCall($hKernel32, 'int', 'CloseHandle', 'hwnd', $hDevice)
        DllClose($hKernel32)
       
        Return SetError(0, _
                        $bRemoveableMedia, _
                        StringRegExpReplace($a_HardwareInfo[0] & $a_HardwareInfo[1] & $a_HardwareInfo[2], '\h+', ' '))
EndFunc   ;==>_Get_DiskName


传参:'PhysicalDrive' & 数字

评分

参与人数 1金钱 +20 收起 理由
itzyx + 20 厉害, 太强了

查看全部评分

发表于 2020-11-11 22:19:46 | 显示全部楼层
越跑越偏了
 楼主| 发表于 2020-11-11 23:34:31 | 显示全部楼层

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

这不是厉害的问题,是答非所问。当然,你觉得帮你解决了就好~
 楼主| 发表于 2020-11-12 00:05:34 | 显示全部楼层
afan 发表于 2020-11-11 23:55
这不是厉害的问题,是答非所问。当然,你觉得帮你解决了就好~

A大 主要我太菜了,有的回答都看不懂, 研究透的话要花好长时间。
我每次提问,一是为了解决遇到的问题,最主要的——还是希望通过前辈们的指点,学习一下思路,或者学习我没接触的知识点。不然太迷茫了,不知道从何入手,怎么更好的去学习AU3
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-20 14:36 , Processed in 0.069637 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表