Frage

Kennt jemand eine Methode programmatisch das CD-Fach auf Windows 2000 oder höher zu schließen? Öffnen Sie CD-Fach vorhanden ist, aber ich kann es nicht nahe scheinen besonders unter W2k zu machen.

ich besonders bin auf der Suche nach einer Methode dieses aus einer Batch-Datei zu tun, wenn möglich, aber API-Aufrufe wären in Ordnung sein.

War es hilfreich?

Lösung

Hier ist eine einfache Möglichkeit, den Win32-API:


[DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi)]
        protected static extern int mciSendString(string lpstrCommand,StringBuilder lpstrReturnString,int uReturnLength,IntPtr hwndCallback);

 public void OpenCloseCD(bool Open)
 {
    if (Open)
    {
        mciSendString("set cdaudio door open", null, 0, IntPtr.Zero);
    }
    else
    {
        mciSendString("set cdaudio door closed", null, 0, IntPtr.Zero);
    }
}

Andere Tipps

Ich mag Art von DeviceIOControl zu verwenden, wie es mir die Möglichkeit gibt, jede Art von Wechseldatenträger (zB USB und Flash-Laufwerke sowie CD Trays) auszuwerfen. Da codez richtig eine Diskette auswerfen mit DeviceIOControl ist (nur die richtige Fehlerbehandlung hinzufügen):

bool ejectDisk(TCHAR driveLetter)
{
  TCHAR tmp[10];
  _stprintf(tmp, _T("\\\\.\\%c:"), driveLetter);
  HANDLE handle = CreateFile(tmp, GENERIC_READ, FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
  DWORD bytes = 0;
  DeviceIoControl(handle, FSCTL_LOCK_VOLUME, 0, 0, 0, 0, &bytes, 0);
  DeviceIoControl(handle, FSCTL_DISMOUNT_VOLUME, 0, 0, 0, 0, &bytes, 0);
  DeviceIoControl(handle, IOCTL_STORAGE_EJECT_MEDIA, 0, 0, 0, 0, &bytes, 0);
  CloseHandle(handle);
  return true;
}

bemerkte ich, dass Andreas Magnusson Antwort nicht ganz Arbeit genau die gleiche wie Explorer Auswurftaste tat. Insbesondere wurde das Laufwerk nicht in Explorer-Code Andreas abgeblendet mit, war aber, wenn Sie den Befehl Auswerfen verwendet. Also habe ich einige untersuchen.

lief ich API Monitor, während der Befehl Auswerfen von Explorer ausgeführt (Windows 7 SP1 64-bit). Ich fand auch einen guten MSKB Artikel 165.721 Titel Wie Auswerfen von Wechselmedien in Windows NT / Windows 2000 / Windows XP . Der interessanteste Teil des MSKB Artikel zitiert unter:

  
      
  1. Rufen Sie Createfile mit GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE und OPEN_EXISTING. Der lpFileName Parameter sollte Be \ \ X:. (Wobei X ist die eigentlichen Laufwerksbuchstabe). Alle anderen Parameter können Null sein.
  2.   
  3. die Lautstärke sperren, indem Sie die FSCTL_LOCK_VOLUME IOCTL über DeviceIoControl Ausgabe. Wenn eine andere Anwendung oder das System das Volumen verwendet, versagt diese IOCTL. Sobald diese Funktion erfolgreich zurückgegeben wird, wird die Anwendung garantiert, dass das Volumen nicht durch irgendetwas anderes im System verwendet wird.
  4.   
  5. die Lautstärke abmontieren durch die FSCTL_DISMOUNT_VOLUME IOCTL Ausgabe. Dies bewirkt, dass das Dateisystem alle Kenntnisse des Volumens zu entfernen und alle internen Informationen zu verwerfen, dass es das Volumen hält in Bezug auf.
  6.   
  7. Stellen Sie sicher, können die Medien durch die Ausgabe der IOCTL_STORAGE_MEDIA_REMOVAL IOCTL entfernt werden. Stellen Sie den PreventMediaRemoval Mitglied der PREVENT_MEDIA_REMOVAL Struktur auf FALSCH, bevor Sie diese IOCTL aufrufen. Dies stoppt das Gerät von der Entfernung der Medien zu verhindern.
  8.   
  9. Auswerfen der Medien mit dem IOCTL_STORAGE_EJECT_MEDIA IOCTL. Wenn das Gerät nicht automatischer Auswurf zulässt, dann kann IOCTL_STORAGE_EJECT_MEDIA übersprungen werden und der Benutzer kann angewiesen werden, um die Medien zu entfernen.
  10.   
  11. Schließen Sie die Lautstärke Griff in dem ersten Schritt erhalten oder die FSCTL_UNLOCK_VOLUME IOCTL erteilen. Dies ermöglicht es dem Laufwerk von anderen verwendet werden   Prozesse.
  12.   

Andreas Antwort, die MSKB Artikel und meine API von Explorer Schnüffeln kann wie folgt zusammengefasst werden:

  1. CreateFile nannte das Volumen zu öffnen. (Alle Methoden).
  2. DeviceIoControl genannt mit FSCTL_LOCK_VOLUME . (Alle Methoden).
  3. DeviceIoControl genannt mit FSCTL_DISMOUNT_VOLUME . (Andreas und MSKB Methoden nur. Explorer nicht nennen dies aus irgendeinem Grunde. Dieser IOCTL zu sein, was scheint beeinflusst, ob das Laufwerk im Explorer ausgegraut ist oder nicht. Ich bin nicht sicher, warum Explorer das nicht nennen).
  4. DeviceIoControl genannt mit IOCTL_STORAGE_MEDIA_REMOVAL und PREVENT_MEDIA_REMOVAL Mitglied FALSE (MSKB und Explorer Methoden. Dieser Schritt von Andreas Antwort fehlt) gesetzt.
  5. DeviceIoControl genannt mit IOCTL_STORAGE_EJECT_MEDIA (Andreas und MSKB Artikel) oder IOCTL_DISK_EJECT_MEDIA. (Explorer,. diese IOCTL beachten Sie bei der Lagerung IOCTL holt und ersetzt nicht sicher, warum noch Explorer die alte verwendet)

Abschließend mag ich beschlossen, das Verfahren in dem MSKB Artikel beschrieben zu folgen, wie es schien, die gründlich und vollständig Verfahren zu sein, mit einem MSKB Artikel gesichert.

NirCmd ist ein sehr handliches Freeware Kommandozeilen-Programm mit verschiedenen Optionen, einschließlich der Öffnung und Schließen der CD-Schublade.

die Laufwerksschublade schließen tun, wie hier aber statt mit DeviceIoControl mit IOCTL_STORAGE_EJECT_MEDIA Sie müssen DeviceIoControl mit IOCTL_STORAGE_LOAD_MEDIA anrufen .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top