2010-07-04 7 views
7

A l'aide de la bibliothèque WMI de Windows, comment puis-je éjecter un CD-ROM monté sur un lecteur de CD/DVD spécifique?Comment éjecter un CD en utilisant WMI et Python?

Je demande des sources à partir de documents WMI ou d'exemples puisque j'utilise la bibliothèque wmi.py sur Python.

Ce serait génial si la solution satisfait un ordinateur Windows plus récent que Windows 2000 et ayant plusieurs CD-ROM. (c'est-à-dire que j'ai D: F: lecteurs et les deux sont des lecteurs de CD-ROM.Je pourrais vouloir éjecter cd dans F: spécifiquement.)

Recherche sur le net, mais n'a pas pu trouver quelque chose de pertinent. La dernière solution doit être d'avoir des binaires tiers et d'exécuter depuis le shell.

+0

vous ne pouvez pas le faire avec wmi. –

+0

ouais, il semble que oui. –

Répondre

9

Vous pouvez utiliser ctypes.

import ctypes 

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

MISE À JOUR:

Si vous avez plus d'un lecteur, vous pouvez utiliser pour open commande pour initialiser un périphérique spécifique avant d'appeler la fonction ci-dessus. Par exemple (non testé).

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) 

En outre, voir le documentation sur la façon de vérifier le retour des valeurs

+0

intéressant, n'a pas fonctionné pour moi. imprime juste 0 à la console. J'ai 2 lecteurs de CD-ROM. D: et F :, D: les images ISO montées virtuellement, et F: pour le vrai lecteur cdrom. Peut-être que c'est la raison? –

+0

Vous pouvez utiliser la commande open pour initialiser un lecteur spécifique. J'ai mis à jour la réponse en conséquence. – Garett

+1

J'ai trouvé le problème. Si je monte 2 CD-ROM (disons D: et F :) et D: (d'abord dans l'ordre d'apparence) n'est pas un disque éjectable (tel que le montage virtuel) il ne sortira pas et autant que je l'ai observé, rien ne résout . Cependant, si je désactive ce lecteur et que j'utilise un plateau physique, cela fonctionne! Merci. –

2

WMI ne permet pas d'éjecter les lecteurs de CD/DVD. Il sont d'autres solutions mais, ce qui implique l'utilisation des fonctions de l'API Windows, par exemple:

  • Utilisation de la fonction mciSendString. Ne peut pas vous aider avec le code Python, mais voici l'exemple C# pour vous aider à obtenir l'idée:

    mciSendString("open f: type cdaudio alias cdrom", null, 0, IntPtr.Zero); 
    mciSendString("set cdrom door open", null, 0, IntPtr.Zero); 
    
  • Utilisation de la fonction DeviceIOControl. Un exemple (également en C#) est here.

Questions connexes