2010-07-04 22 views
7

Utilizando la biblioteca WMI de Windows, ¿cómo puedo expulsar el CD rom montado en una unidad de CD/DVD específica?¿Cómo expulsar CD usando WMI y Python?

Estoy pidiendo fuentes de documentos de WMI o ejemplos ya que estoy usando la biblioteca wmi.py en Python.

Sería genial si la solución satisface un equipo con Windows más nuevo que Windows 2000 y tiene varios CD-ROM. (es decir, tengo unidades D: F: y ambas son unidades de CD-ROM. Es posible que desee expulsar Cd en F: específicamente)

Ha buscado en la red pero no ha encontrado nada relevante. La última solución debe ser tener binarios de terceros y ejecutar desde el shell.

+0

no puede hacerlo con WMI. –

+0

sí, parece que sí. –

Respuesta

9

Puede usar ctypes.

import ctypes 

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

ACTUALIZACIÓN:

Si usted tiene más de una unidad, que puede usar para open comando para inicializar un dispositivo específico antes de llamar a la función anterior. Por ejemplo (no probado).

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) 

También, ver el documentation sobre cómo comprobar valores de retorno

+0

curiosamente, no funcionó para mí. solo imprime 0 en la consola. Tengo 2 unidades de CD-ROM. D: y F :, D: imágenes ISO montadas forvirtually, y F: para la unidad de cdrom real. Tal vez es la razón? –

+0

Puede usar el comando abrir para inicializar una unidad específica. Actualicé la respuesta en consecuencia. – Garett

+1

He encontrado el problema. Si monté 2 CD-ROM (digamos D: y F :) y D: (primero en orden de aparición) no es una unidad extraíble (como el montaje virtual) no saldrá y, por lo que he observado, nada resuelve esto . Sin embargo, si deshabilito esta unidad y uso la bandeja física, ¡funciona! Gracias. –

2

WMI no proporciona medios para expulsar unidades de CD/DVD. Hay otras soluciones, sin embargo, que implican el uso de las funciones de la API de Windows, por ejemplo:

  • Uso de la función mciSendString. No le puede ayudar con el código Python, pero aquí está el ejemplo de C# para ayudarle a obtener la idea:

    mciSendString("open f: type cdaudio alias cdrom", null, 0, IntPtr.Zero); 
    mciSendString("set cdrom door open", null, 0, IntPtr.Zero); 
    
  • Uso de la función DeviceIOControl. Un ejemplo (también en C#) es here.

Cuestiones relacionadas