You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Windows下检测特定VID/PID的USB设备插入时自动触发Python脚本

Windows下特定USB设备插入自动运行Python脚本的实现方案

方案一:原生任务计划程序+事件日志监听(推荐,无额外依赖)

  • 步骤1:确认目标USB设备的VID/PID
    打开设备管理器,找到目标USB设备,右键→属性→详细信息→硬件ID,复制类似USB\VID_XXXX&PID_XXXX的字符串。也可以用命令行工具devcon find *usb*(需先获取devcon)查看所有USB设备的ID。

  • 步骤2:配置事件筛选器

    1. 打开「事件查看器」,定位到「Windows日志→系统」。
    2. 点击右侧「筛选当前日志」,设置:
      • 日志:系统
      • 来源:PlugPlayManager
      • 事件ID:2003(设备成功安装事件,若不匹配可插入设备后查看最新的PlugPlayManager事件)
    3. 切换到「XML」标签,勾选「手动编辑查询」,替换为以下XML(将VID_XXXX&PID_XXXX换成你的设备ID):
      <QueryList>
        <Query Id="0" Path="System">
          <Select Path="System">*[System[Provider[@Name='PlugPlayManager'] and EventID=2003]] and *[EventData[Data[@Name='HardwareId'] and Data='USB\VID_XXXX&PID_XXXX']]</Select>
        </Query>
      </QueryList>
      
    4. 测试筛选:插入目标USB设备,确认事件能被筛选出来。
  • 步骤3:创建自动触发的任务计划

    1. 打开「任务计划程序」,点击「创建基本任务」。
    2. 名称填「USB触发Python脚本」,下一步。
    3. 触发器选「当特定事件被记录时」,日志选「系统」,来源选「PlugPlayManager」,事件ID填2003,下一步。
    4. 操作选「启动程序」,程序或脚本填python.exe(若Python未加入系统PATH,需填完整路径如C:\Python3.10\python.exe)。
    5. 添加参数填你的Python脚本完整路径,比如"C:\scripts\auto_run_script.py",下一步。
    6. 勾选「不管用户是否登录都要运行」,并设置权限为最高权限,避免脚本执行失败。
    7. 完成任务创建,测试插入USB设备,确认脚本自动运行。

方案二:Python实时监听USB事件(适合自定义逻辑场景)

  • 步骤1:依赖安装
    执行命令安装pywin32库:

    pip install pywin32
    
  • 步骤2:编写监听脚本
    以下脚本通过监听Windows的WM_DEVICECHANGE消息,检测USB设备插入并匹配目标VID/PID:

    import win32api
    import win32gui
    import win32con
    import subprocess
    from win32com.client import GetObject
    
    # 替换为你的目标USB设备ID
    TARGET_USB_ID = "VID_1234&PID_5678"
    
    def get_usb_devices():
        # 通过WMI获取当前USB设备列表
        wmi = GetObject("winmgmts:")
        devices = wmi.InstancesOf("Win32_USBControllerDevice")
        usb_ids = []
        for dev in devices:
            try:
                pnp_id = dev.Dependent.PNPDeviceID
                if "VID_" in pnp_id and "PID_" in pnp_id:
                    usb_ids.append(pnp_id.split("\\")[1])
            except:
                continue
        return usb_ids
    
    class USBMonitor:
        def __init__(self):
            # 创建隐藏窗口用于接收设备消息
            wc = win32gui.WNDCLASS()
            wc.lpfnWndProc = self.wnd_proc
            wc.lpszClassName = "USBMonitorClass"
            win32gui.RegisterClass(wc)
            self.hwnd = win32gui.CreateWindow(wc.lpszClassName, "", 0, 0, 0, 0, 0, 0, 0, 0)
            # 注册设备通知
            dev_notify_handle = win32api.RegisterDeviceNotification(
                self.hwnd,
                win32api.CreateFile("\\\\.\\USB", win32con.GENERIC_READ | win32con.GENERIC_WRITE, win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE, None, win32con.OPEN_EXISTING, 0, None),
                win32con.DEVICE_NOTIFY_WINDOW_HANDLE
            )
    
        def wnd_proc(self, hwnd, msg, wparam, lparam):
            if msg == win32con.WM_DEVICECHANGE:
                if wparam == win32con.DBT_DEVICEARRIVAL:
                    # 设备插入,检查是否为目标设备
                    current_usb_ids = get_usb_devices()
                    if TARGET_USB_ID in current_usb_ids:
                        # 运行目标脚本
                        subprocess.run(["python.exe", "C:\\scripts\\your_script.py"], shell=True)
            return win32gui.DefWindowProc(hwnd, msg, wparam, lparam)
    
    if __name__ == "__main__":
        monitor = USBMonitor()
        print("USB监听已启动...")
        win32gui.PumpMessages()
    
  • 步骤3:设置监听脚本开机自启
    把脚本的快捷方式放到Windows启动文件夹(路径:C:\Users\[你的用户名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup),或通过任务计划设置开机自动启动该脚本。

内容的提问来源于stack exchange,提问作者ask_lot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 20:05:42