gpt4 book ai didi

windows-10 - 如何识别同时连接到 USB 集线器的相同 USB 适配器

转载 作者:太空宇宙 更新时间:2023-11-03 20:07:51 25 4
gpt4 key购买 nike

我有一个 USB 集线器 (D-Link DUB-H7) 连接到我的 Windows 10 笔记本电脑。连接到集线器的是 4 个相同的 PEAK 加密狗,用于与 CANbus 通信。现在,我的问题是以编程方式识别这 4 个独立的加密狗并知道哪个是哪个。加密狗固定在集线器中。

首先,我下载并安装了 USBDeview 来查看我的设备。在程序中,我可以看到我的 4 个 PCAN-USB 加密狗,并且可以看到它们的实例 ID 不同。很好,现在我有了我的标识符。然而,当我尝试使用 Python 获取 ID 时,情况看起来不太好。这是我的以下测试程序:

import win32com.client


wmi = win32com.client.GetObject("winmgmts:")

input("Connect the hub")

dongle_list = [(usb.name, usb.DeviceID) for usb in wmi.InstancesOf("Win32_USBHub")]

input("Disconnect the hub")

nod_list = [(usb.name, usb.DeviceID) for usb in wmi.InstancesOf("Win32_USBHub")]

diff = list(set(dongle_list) - set(nod_list))
for d in diff:
print(d)

运行此命令只会给我 2 个新的 USB 设备,并且 ID 指向 USB 集线器,而不是连接到集线器的加密狗。我还尝试使用 wmi.InstancesOf("CIM_USBDevice") 但结果保持不变。

('Generic USB Hub', 'USB\\VID_05E3&PID_0608\\5&4A43CD6&0&4') 
('Generic USB Hub', 'USB\\VID_05E3&PID_0608\\6&9EBFB9C&0&4')

那么如何使用Python或Python调用的powershell/cmd检索连接到USBhub的设备的USB信息?

我认为可以采取的另一条路线是使用端口标识符。如果我断开适配器,我可以看到它已连接到 Port_#0001.Hub_#000x,其中 x 是一个正整数。因此,也许我可以轮询端口以查看加密狗是否已连接,然后我也知道哪个是哪个(加密狗固定在集线器中)。虽然我认为使用Instance ID更加万无一失。

最佳答案

我最终创建了一个 powershell 命令并使用 Python 调用它。然而,我注意到InstanceID是USB集线器的硬件地址,而不是加密狗的硬件地址。我还注意到,加密狗有时会根据连接方式切换地址。因此,我还需要禁用它们,然后按照我想要的顺序再次启用它们。

这就是我现在拥有的:

poll_cmd = """
$ret = (Get-PnpDevice | ? {($_.description -like "*pcan*") -and ($_.status -eq "ok")} | sort instanceid).instanceid;
$ret | % {Disable-PnpDevice $_ -Confirm:$False};
$ret | % {Start-Sleep -Seconds 1; Enable-PnpDevice $_ -Confirm:$False};
$ret
"""

usbs = (
subprocess.check_output(["powershell.exe", poll_cmd])
.decode()
.strip()
.split("\r\n")
)

usbs 包含我感兴趣的 USB 适配器列表。

然而,这又给我带来了一个问题:UAC。我需要管理员权限才能启用 USB。并使用了 Request UAC elevation from within a Python script? 中的最佳答案授予我的程序管理员权限。

关于windows-10 - 如何识别同时连接到 USB 集线器的相同 USB 适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58873893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com