首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Python 3弹出设备/USB (Windows 10)

基础概念

在Windows 10系统中,使用Python 3弹出设备(如USB驱动器)通常涉及到与操作系统底层进行交互。这可以通过调用Windows API来实现,具体来说,可以使用ctypes库来加载和调用Windows API函数。

相关优势

  1. 自动化:通过编程方式弹出设备,可以实现自动化任务,减少手动操作。
  2. 灵活性:可以根据不同的条件或事件来决定是否弹出设备。
  3. 集成性:可以与其他Python脚本或应用程序集成,实现更复杂的功能。

类型

主要涉及到以下Windows API函数:

  • SetupDiGetClassDevs:获取设备信息集。
  • SetupDiEnumDeviceInterfaces:枚举设备接口。
  • SetupDiGetDeviceInterfaceDetail:获取设备接口详细信息。
  • DeviceIoControl:与设备进行通信,执行特定操作(如弹出设备)。

应用场景

  1. 自动化测试:在自动化测试过程中,可能需要频繁地插入和弹出USB设备。
  2. 系统管理工具:开发系统管理工具时,可能需要提供弹出设备的功能。
  3. 安全应用:在某些安全应用中,可能需要控制USB设备的插入和弹出。

示例代码

以下是一个使用Python 3弹出USB设备的示例代码:

代码语言:txt
复制
import ctypes
from ctypes import wintypes

# 定义Windows API函数和常量
SetupDiGetClassDevs = ctypes.windll.setupapi.SetupDiGetClassDevsW
SetupDiEnumDeviceInterfaces = ctypes.windll.setupapi.SetupDiEnumDeviceInterfaces
SetupDiGetDeviceInterfaceDetail = ctypes.windll.setupapi.SetupDiGetDeviceInterfaceDetailW
DeviceIoControl = ctypes.windll.kernel32.DeviceIoControl

GUID_DEVINTERFACE_USB_DEVICE = ctypes.cGuid("{A5DCBF10-6530-11D2-901F-00C04FB951ED}")
DIGCF_PRESENT = 0x00000002
DIGCF_DEVICEINTERFACE = 0x00000001

class SP_DEVINFO_DATA(ctypes.Structure):
    _fields_ = [
        ("cbSize", wintypes.DWORD),
        ("ClassGuid", ctypes.cGuid),
        ("DevInst", wintypes.DWORD),
        ("Reserved", ctypes.POINTER(wintypes.DWORD))
    ]

class SP_DEVICE_INTERFACE_DATA(ctypes.Structure):
    _fields_ = [
        ("cbSize", wintypes.DWORD),
        ("InterfaceClassGuid", ctypes.cGuid),
        ("Flags", wintypes.DWORD),
        ("Reserved", ctypes.POINTER(wintypes.DUSEL))
    ]

class SP_DEVICE_INTERFACE_DETAIL_DATA(ctypes.Structure):
    _fields_ = [
        ("cbSize", wintypes.DWORD),
        ("DevicePath", ctypes.c_wchar * 256)
    ]

def find_usb_device():
    h_info_set = SetupDiGetClassDevs(GUID_DEVINTERFACE_USB_DEVICE, None, None, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)
    if h_info_set == ctypes.INVALID_HANDLE_VALUE:
        raise ctypes.WinError()

    dev_info_data = SP_DEVINFO_DATA()
    dev_info_data.cbSize = ctypes.sizeof(SP_DEVINFO_DATA)

    device_interface_data = SP_DEVICE_INTERFACE_DATA()
    device_interface_data.cbSize = ctypes.sizeof(SP_DEVICE_INTERFACE_DATA)

    for i in range(100):
        if not SetupDiEnumDeviceInterfaces(h_info_set, None, GUID_DEVINTERFACE_USB_DEVICE, i, ctypes.pointer(device_interface_data)):
            break

        detail_data = SP_DEVICE_INTERFACE_DETAIL_DATA()
        detail_data.cbSize = ctypes.sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA)

        if SetupDiGetDeviceInterfaceDetail(h_info_set, ctypes.pointer(device_interface_data), ctypes.pointer(detail_data), ctypes.sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA), None, ctypes.pointer(dev_info_data)):
            yield detail_data.DevicePath

    SetupDiDestroyDeviceInfoList(h_info_set)

def eject_usb_device(device_path):
    h_device = CreateFileW(device_path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, None, OPEN_EXISTING, 0, None)
    if h_device == INVALID_HANDLE_VALUE:
        raise ctypes.WinError()

    if not DeviceIoControl(h_device, IOCTL_STORAGE_EJECT_MEDIA, None, 0, None, 0, None, None):
        raise ctypes.WinError()

    CloseHandle(h_device)

# 示例使用
for device_path in find_usb_device():
    print(f"Found USB device: {device_path}")
    eject_usb_device(device_path)

参考链接

常见问题及解决方法

  1. 权限问题:弹出设备通常需要管理员权限。确保脚本以管理员身份运行。
  2. 设备未找到:确保设备已正确连接并且系统已识别。
  3. API调用失败:检查API调用的返回值,并根据错误代码进行调试。

通过以上步骤和示例代码,您可以在Windows 10系统中使用Python 3弹出USB设备。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Windows 10使用WSL作为python宿主机调试开发

    WSL 全称: Windows Subsystem for Linux , 是一个在Windows 10上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。...可以直接通过 Windows 应用商店安装。前提是要开启对应的功能,具体安装 wsl 本篇不做涉及。 在某些场景下,一些SDK在Windows下安装比较困难,比如有些 python 的库。...在尝试一个知识图谱项目时,需要安装 pyltp 包,在Windows中怎么都装不上,所以直接在 wsl 中试了下,完美~ 附一下 python 环境: ?...选择 WSL,选择你WSL 中 python的安装位置。可以通过 which python 或者 which python3 查看 ? 设置完SDK后其他的就是一般操作了。...在项目中发现调试等功能也是可以使用Windows 10 生产力水平再上一台阶!

    2.3K20

    如何在Windows 10上安装Python 3并设置本地编程环境

    如何在Windows 10上安装Python 3并设置本地编程环境 介绍 Python是一种多功能编程语言,可用于许多不同的编程项目。...本教程将指导您在本地Windows 10计算机上安装Python 3并通过命令行设置编程环境。 准备 您将需要一台具有管理访问权限的Windows 10计算机,该计算机已连接到Internet。...要查找Windows PowerShell,可以右键单击屏幕左下角的“开始”菜单图标。弹出菜单后,您应单击“搜索”,然后在搜索栏中键入“PowerShell”。...此时,您应该在本地Windows 10计算机上设置Python 3编程环境,并且可以开始编码项目!...---- 参考文献:《How To Install Python 3 and Set Up a Local Programming Environment on Windows 10

    2.5K00

    惠普电脑u盘重装系统步骤_惠普电脑优盘装系统步骤「建议收藏」

    3、将U盘插在电脑的USB接口,开机并不断按下启动U盘快捷键。 4、在进入系统启动菜单中选择有USB字样的选项并回车。 5、重启电脑,选择YunQiShi PE进入系统。...10、重启过程中,选择Windows 10系统进入,等待安装。 11、弹出自动还原驱动文件,点击是,还原本地存在的驱动备份文件。 12、弹出宽带连接提示窗口,点击立即创建,创建宽带连接。...09 安装完成后,拔掉所有外接设备,如U盘、移动硬盘、光盘等,然后点击立即重启。 10 重启过程中,选择Windows 10系统进入,等待安装。...11 弹出自动还原驱动文件,点击是,还原本地存在的驱动备份文件。 12 弹出选择操作系统界面,选择windows 10,回车进入系统,之后无需操作,耐心等待系统准备就绪,升级优化。...相关内容 常见问答 更新windows10系统后应用商店没有了怎么回事?

    5.4K30

    惠普电脑如何设置u盘启动_惠普笔记本电脑怎么用u盘重装系统

    3、系统启动后会进入PE界面,老机型选择Win2003PE,选择完后回车进入。 4、等待进入系统后,无需操作,云骑士会自动打开进行安装系统。...5、安装过程中弹出引导修复工具,进行写入引导文件,点击确定。 6、提示检测到PE文件,点击确定进行PE引导菜单回写。 7、安装完成后拔掉所有外接设备后点击立即重启。...8、重启过程中,选择Windows 7系统进入,等待安装。 9、弹出自动还原驱动文件,点击是,还原本地存在的驱动备份文件。 10弹出选择操作系统界面,选择windows7,回车进入系统。...07 安装完成后,拔掉所有外接设备,如U盘、移动硬盘、光盘等,然后点击立即重启。 08 重启过程中,选择Windows 7系统进入,等待安装。...09 弹出自动还原驱动文件,点击是,还原本地存在的驱动备份文件。 10 弹出选择操作系统界面,选择windows7,回车进入系统。 11 之后无需操作,耐心等待系统准备就绪,升级优化。

    3.6K10

    解决库存扣减及订单创建时防止并发死锁的问题

    ) 首先我们要保证树莓派可以识别usb摄像头设备使用命令: lsusb 可以看到usb设备列表第一个即 海康威视1080p usb摄像头,说明我们的摄像头设备被正确识别,如果无法识别,则要排除设备故障或想办法安装设备驱动程序...当然直接用linux fdisk命令格式化成 ext2/3/4 也是可以的,但是后续在windows环境下读写又是新问题,如果硬盘不是准备永久挂载在linux系统下使用,还是建议用FAT32格式使用。...windows10/11 下已经不提供格式成 FAT32 的入口,我们可以下载奥梅分区助手快速格式化成想要的格式。...使用命令查看固态硬盘是否被识别 lsusb 可以看到,第二个usb设备便是我们的usb固态硬盘设备了(M.2硬盘放到了USB硬盘盒进行外接) 使用 fdisk 命令查看硬盘属性 fdisk -l 使用...视频为每秒10帧,可以根据需要调整,10帧就是10张图片 %d 从0开始在当前目录递增寻找图片 -vcodec libx264(windows兼容) -vcodec libx265(体积更小,windows

    1.4K40

    百问网全志V853开发板烧录开发板系统教程

    这时我们可以看到设备管理器 通用串行总线控制器 弹出一个 未知设备 ,这个时候我们就需要把我们提前下载好的 全志USB烧录驱动 进行修改,然后将解压缩过的 全志USB烧录驱动 压缩包,解压缩,可以看到里面有这么几个文件...对于wind10/wind11系统的同学,需要在设备管理器里面进行手动安装驱动。...如下图所示,在第一次插入OTG设备,进入烧写模式设备管理器会弹出一个未知设备 接下来鼠标右键点击这个未知设备,在弹出的对话框里, 点击浏览我计算机以查找驱动程序软件。...在弹出的对话框里,我们点击 始终安装此驱动程序软件 等待安装完成。 安装完成后,会提示,Windows已成功更新你的驱动程序。...最后我们可以看到,设备管理器 里面的未知设备 变成了一个 USB Device(VID_1f3a_efe8)的设备,这时就表明设备驱动已经安装成功。

    10510

    Windows 10 IoT Serials 4 - 如何在树莓派上使用Cortana语音助手

    Windows 10 IoT Core 14986版本开始,微软已经加入Cortana语音助手功能。之前,我们只能使用本地语音识别,需要编写应用程序,下载到设备中才能实现。...下面我们以树莓派为Windows 10 IoT Core设备,尝试一下使用Cortana的过程。 1....将烧写好系统的TF卡插入树莓派,接好电源、显示器,将Microsoft LifeCam HD 3000的USB接口插入树莓派的USB接口,然后通电,开始启动Windows 10 IoT Core 系统。...具体方法如下,首先,打开浏览器,输入设备的IP地址和8080端口,在弹出的认证页面中输入当前的用户名和密码(系统默认为administrator/p@ssw0rd)。...设置好以后,重启设备,就可以使用Cortana了。 3.

    1.9K50

    Python 玩微信跳一跳

    教你用 Python 来玩微信跳一跳 写在前头 如果你看完文章,说我没有mac电脑,只有windows和iphone,怎么办? 好办,使用windows和安卓模拟器也可以实现自动跳一跳。...安装openatx/facebook-wda Python 3 如果你是 Android + MacOS,请参考下面的配置: Python 3 使用brew进行安装 brew cask install...List of devices attached 6934dc33 device 如果你是 Android + Windows,请参考下面的配置: Python 3 安装 ADB 后,请在 环境变量...调试,设置》开发者选项》USB 调试 电脑与手机 USB 线连接,确保执行adb devices可以找到设备 ID 界面转至微信跳一跳游戏,点击开始游戏 运行python wechat_jump_auto.py...有两种模式可供选择:手动辅助跳 和 自动连续跳 手动辅助跳 命令行运行python3 wechat_jump_iOS_py3.py 依次点击弹出的窗口中的起始位置和目标位置,会自动计算距离后起跳 根据起跳的精准情况更改

    1.8K10

    Windows10中VS2017环境下使用libmodbus库Modbus TCP读取设备的数据

    将端口设置为MODBUS_TCP_DEFAULT_PORT使用默认值之一 (502)。使用大于或等于1024的端口号很方便, 因为没有必要拥有管理员权限。...下面使用Modbus TCP协议读取甲烷/非甲烷总烃 (5900)设备中总烃、甲烷、NMHC这3个寄存器(寄存器地址分别为22,25,28)中的浓度。...非甲烷总烃设备的Modbus寄存器地址定义表 例如,要读取非甲烷总烃设备的总烃、甲烷CH4、NMHC非甲烷总烃对应的浓度, 相关监测因子参数的Modbus寄存器定义如下: 名称 数据 地址 系数 值...系统参数 仪器状态 1 1 0 系统参数 运行状态 2 1 1 系统参数 控制指令 3 1 8 采样时间 年 10 1 2019 采样时间 月 11 1 11 采样时间 日 12 1 14 采样时间 时...0 邻二甲苯 浓度 52 0.01 0 非甲烷总烃分析仪有三个关键参数,即总烃、CH4、NMHC的浓度,对应Modbus寄存器地址分别为:22,25,28,获取对应寄存器数据后还需要乘以0.01 在Windows10

    2.1K30

    解决windowspython3使用multiprocessing.Pool出现的问题

    _kwargs) File "C:\Anaconda3\lib\multiprocessing\pool.py", line 108, in worker task = get() File "C:\Anaconda3...下面的multiprocessing跟Linux下面略有不同,Linux下面基于fork,fork之后所有的本地变量都复制一份,因此可以使用任意的全局变量;在Windows下面,多进程是通过启动新进程完成的...multiprocessing内部使用pickling传递map的参数到不同的进程,当传递一个函数或类时,pickling将函数或者类用所在模块+函数/类名的方式表示,如果对端的Python进程无法在对应的模块中找到相应的函数或者类...-3: Traceback (most recent call last): File "/usr/lib64/python2.7/threading.py", line 812, in __bootstrap_inner...以上这篇解决windowspython3使用multiprocessing.Pool出现的问题就是小编分享给大家的全部内容了,希望能给大家一个参考。

    5.7K20

    TPYBoard:一款可以发挥无限创意的MicroPython开发板

    Python3的发布到现在已有五六年的时间,从刚发布的反对声音到慢慢被接受与喜欢经过了太漫长的时间,然而可能也与国情与发展需求有着相当的关系。总之,越来越多人开始使用Python。...该开发板内置4个LED灯、一个加速传感器,可在3V-10V之间的电压正常工作。 先看一下产品“全家福”吧!...第三步:编辑mian.py 现在我们可以开始编写自己的 python 程序了。用文本编辑器打开 main.py 文件。Windows 环境下可以使用记事本或者其他编辑器。...文件,然后在 USB 设备中退出(或者卸载),就像退出移动磁盘一样。...7.png 当设备安全退出或解除挂载后就来到了实现功能的地方:按下板上的复位键将重置开发板并运行写好的程序。黑色的复位按键位于右边,USB 接口下。

    1.8K00

    Python自动抢红包,超详细教程,再也不会错过微信红包了

    为了自动抢红包,python能帮我们实现吗? 答案是肯定的,本文就带大家一起探索下用Python如何实现自动抢红包。...1 环境 操作系统:Windows Python版本:3.7.2 手机系统:Android 2 需求分析 这里我们的需求是实现自动抢红包。...3 前置准备 3.1 打开手机的USB调试 要正常使用「adb」需要打开USB调试,设置项通常出现在手机系统设置中的[开发人员选项]里面。...Poco是一款基于UI控件识别的自动化测试框架,目前支持Unity3D/cocos2dx-*/Android原生app/iOS原生app/微信小程序,也可以在其他引擎中自行接入poco-sdk来使用。...请使用USB线连接手机,手机上出现的 允许USB调试 弹窗,点击 确定。 点击连接面板中的 refresh ADB 按钮,设备列表将会刷新。 点击列表内对应设备的 Connect 完成连接。

    2.1K20

    Windows下同时安装了Python2与Python3时如何使用RobotFrameWork

    由于windows下不能像linux那样指定python文件的运行路径,当电脑中即安装了python2,又安装了python3时,也不能在环境变量中都配置运行路径吧(当然是可以配置的,系统会按照靠前的路径查找...python,笔者一般用的是python3,环境变量配置的也是python3的路径,如果加上python2的环境变量那么就影响了平常的使用,但是如果不配又不能正常使用RF,那该怎么办呢?)        ...由于RF是基于Python2的,当环境变量配置的是python3路径时,会运行失败,报错如下,去找了python3的程序: unexpected error: C:\Users\suneee\AppData...\Local\Programs\Python\Python36\python.exe: Error while finding module specification for 'robot.run'...这样发现直接运行的python,当然是我环境变量中配的python3了,于是直接改成python2路径的python.exe,保存后再次运行RF脚本,已经可以正常运行了 ? ?

    1.3K20

    1.100ASK-V853-PRO编译烧写

    这时我们可以看到电脑设备管理器 通用串行总线控制器 部分弹出一个 未知设备 ,这个时候我们就需要把我们提前下载好的 全志USB烧录驱动 进行修改,然后将解压缩过的 全志USB烧录驱动 压缩包,解压缩,可以看到里面有这么几个文件...对于wind10/wind11系统的同学,需要在设备管理器里面进行手动安装驱动。 如下图所示,在第一次插入OTG设备,进入烧写模式设备管理器会弹出一个未知设备。...最后我们可以看到,设备管理器 里面的未知设备 变成了一个 USB Device(VID_1f3a_efe8)的设备,这时就表明设备驱动已经安装成功。 安装完成USB驱动后后续即可正常使用烧录功能。...6.进入Tina系统 ​ 烧写完成,我们可以使用串口工具MobaXterm进入串口查看,软件我们放在百度网盘的02_开发工具/【Windows】MobaXterm(串口工具 ssh工具合集) ​ 默认情况下系统会自动安装串口设备驱动...* 对于Windows系统 此时Windows设备管理器 在 端口(COM和LPT) 处会多出一个串口设备,一般是以 USB-Enhanced-SERIAL CH9102开头,您需要留意一下后面的具体COM

    97350

    Python自动抢红包,从此再也不会错过微信红包了!

    作者 | 上海小胖 来源 | Python专栏(ID:xpchuiit) 目录: 0 引言 1 环境 2 需求分析 3 前置准备 4 抢红包流程回顾 5 代码梳理 6 后记 0 引言 提到抢红包...1 环境 操作系统:Windows Python版本:3.7.2 手机系统:Android 2 需求分析 这里我们的需求是实现自动抢红包。...3 前置准备 3.1 打开手机的USB调试 要正常使用「adb」需要打开USB调试,设置项通常出现在手机系统设置中的[开发人员选项]里面。 ?...Poco是一款基于UI控件识别的自动化测试框架,目前支持Unity3D/cocos2dx-*/Android原生app/iOS原生app/微信小程序,也可以在其他引擎中自行接入poco-sdk来使用。...使用AirtestIDE对Android应用进行自动化操作,第一步就需要连接Android设备。 请使用USB线连接手机,手机上出现的 允许USB调试 弹窗,点击 确定。

    2.5K31
    领券