如何使用WMI和Python弹出CD?

如何使用WMI和Python弹出CD?,python,winapi,wmi,cd-rom,Python,Winapi,Wmi,Cd Rom,使用Windows的WMI库,如何弹出安装在特定CD/DVD驱动器中的CD rom 因为我在Python上使用WMI.py库,所以我要求从WMI文档或示例中获取源代码 若该解决方案能够满足比Windows 2000更新的Windows计算机,并且具有多个CD-ROM,那个就太好了。(也就是说,我有D:F:驱动器,两个驱动器都是CD-ROM驱动器。我可能希望以F:格式弹出CD。) 在网上搜索,但找不到任何相关内容。最后一种解决方案必须是使用第三方二进制文件并从shell执行。WMI本身不提供弹出C

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

因为我在Python上使用WMI.py库,所以我要求从WMI文档或示例中获取源代码

若该解决方案能够满足比Windows 2000更新的Windows计算机,并且具有多个CD-ROM,那个就太好了。(也就是说,我有D:F:驱动器,两个驱动器都是CD-ROM驱动器。我可能希望以F:格式弹出CD。)


在网上搜索,但找不到任何相关内容。最后一种解决方案必须是使用第三方二进制文件并从shell执行。

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

  • 使用函数。无法帮助您编写Python代码,但下面的C#示例可以帮助您理解:

    mciSendString("open f: type cdaudio alias cdrom", null, 0, IntPtr.Zero);
    mciSendString("set cdrom door open", null, 0, IntPtr.Zero);
    
  • 使用函数。下面是一个例子(同样用C#)

    • 您可以使用

      更新:

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


      另外,请参见关于如何检查返回值的

      ,有趣的是,它对我不起作用。只需将0打印到控制台。我有两个光驱。D:和F:,D:用于虚拟安装的ISO映像,F:用于真正的cdrom驱动器。可能是因为这个原因?您可以使用open命令初始化特定的驱动器。我相应地更新了答案。我发现了问题。如果我装入2个CD-ROM(假设D:和F:)和D:(按外观顺序排列)不是可弹出驱动器(如虚拟装入),它将不会退出,据我观察,没有任何解决方法。但是,如果我禁用此驱动器并使用物理托盘,它将正常工作!谢谢
      import ctypes
      
      ctypes.windll.WINMM.mciSendStringW(u"set cdaudio door open", None, 0, None)
      
      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)