【问题标题】:How to eject CD using WMI and Python?如何使用 WMI 和 Python 弹出 CD?
【发布时间】:2011-03-11 14:26:28
【问题描述】:

使用 Windows 的 WMI 库,如何弹出安装在特定 CD/DVD 驱动器中的 CD rom?

由于我在 Python 上使用 wmi.py 库,因此我要求来自 WMI 文档或示例的资源。

如果解决方案能够满足比 Windows 2000 更新的 Windows 计算机并具有多个 CD-ROM,那就太好了。 (即我有 D:F: 驱动器,并且两者都是 CD-ROM 驱动器。我可能特别想在 F: 中弹出 cd。)

在网上搜索但找不到任何相关内容。最后一个解决方案必须是拥有 3rd 方二进制文件并从 shell 执行。

【问题讨论】:

    标签: python winapi wmi cd-rom


    【解决方案1】:

    WMI 本身不提供弹出 CD/DVD 驱动器的方法。不过还有其他解决方案,其中涉及使用 Windows API 函数,例如:

    • 使用mciSendString 函数。无法帮助您编写 Python 代码,但这里有一个 C# 示例可以帮助您了解这个想法:

      mciSendString("open f: type cdaudio alias cdrom", null, 0, IntPtr.Zero);
      mciSendString("set cdrom door open", null, 0, IntPtr.Zero);
      
    • 使用DeviceIOControl 函数。一个例子(也在 C# 中)是here

    【讨论】:

      【解决方案2】:

      您可以使用ctypes

      import ctypes
      
      ctypes.windll.WINMM.mciSendStringW(u"set cdaudio door open", None, 0, None)
      

      更新:

      如果您有多个驱动器,您可以在调用上述函数之前使用open 命令初始化特定设备。例如(未测试)。

      ctypes.windll.WINMM.mciSendStringW(u"open D: type cdaudio alias d_drive", None, 0, None)
      ctypes.windll.WINMM.mciSendStringW(u"set d_drive door open", None, 0, None)
      

      另外,请参阅documentation 了解如何检查返回值

      【讨论】:

      • 有趣的是,对我不起作用。只是将 0 打印到控制台。我有 2 个 CD-ROM 驱动器。 D: 和 F:, D: 用于虚拟挂载的 ISO 映像,F: 用于真正的 cdrom 驱动器。也许是这个原因?
      • 您可以使用 open 命令来初始化特定的驱动器。我相应地更新了答案。
      • 我找到了问题所在。如果我安装 2 张 CD-ROM(比如说 D: 和 F:)并且 D:(按外观顺序排列)不是可弹出驱动器(例如虚拟安装),它不会退出,据我观察,没有什么能解决这个问题.但是,如果我禁用此驱动器并使用物理托盘,它就可以工作!谢谢。
      【解决方案3】:

      你可以使用 pygame

      pygame.cdrom.CD.eject()
      

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
      猜你喜欢
      • 2023-03-31
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 2011-06-23
      相关资源
      最近更新 更多