Entwickler-Ecke
Windows API - CD-Laufwerk öffnen / schliessen
Hochhaus - Mo 16.07.12 19:15
Titel: CD-Laufwerk öffnen / schliessen
Hallo allerseits !
der folgende Code öffnet resp. schliesst ein CD-Laufwerk:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Procedure TForm1.Button1Click(Sender: TObject); Begin MCISendString('Set cdaudio door open wait', Nil, 0, Application.Handle); End;
Procedure TForm1.Button2Click(Sender: TObject); Begin MCISendString('Set cdaudio door closed wait', Nil, 0, Application.Handle); End; |
Was tue ich aber, wenn der PC zwei oder drei Laufwerke hat ?
Vielen Dank im Voraus für die Antworten !
Hochhaus
Moderiert von
Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mo 16.07.2012 um 22:19
Gerd Kayser - Mo 16.07.12 19:55
Hochhaus hat folgendes geschrieben : |
Was tue ich aber, wenn der PC zwei oder drei Laufwerke hat ? |
Man verwendet einen Alias. Beispiel (hier für Laufwerk N):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); begin mciSendString('open N: type cdAudio alias CD1', nil, 0, 0); mciSendString('set CD1 door open', nil, 0, 0); mciSendString('close CD1', nil, 0, 0); end;
procedure TForm1.Button2Click(Sender: TObject); begin mciSendString('open N: type cdAudio alias CD1', nil, 0, 0); mciSendString('set CD1 door closed', nil, 0, 0); mciSendString('close CD1', nil, 0, 0); end; |
Gerd Kayser - Mo 16.07.12 20:24
Hochhaus hat folgendes geschrieben : |
Das funktioniert nur, wenn ich die Laufwerksbuchstaben kenne. |
Mit GetDriveType kann man ermitteln, welche Laufwerksbuchstaben welchen Laufwerkstypen entsprechen.
Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| procedure TForm1.Button3Click(Sender: TObject); type TLaufwerkstyp = (dtUnknown, dtNoDrive, dtFloppy, dtFixed, dtNetwork, dtCDROM, dtRAM); var Laufwerkstyp : TLaufwerkstyp; Laufwerk : string; Schleife : integer; begin for Schleife := 65 to 65 + 25 do begin Laufwerk := Chr(Schleife) + ':'; Laufwerkstyp := TLaufwerkstyp(GetDriveType(PChar(Laufwerk))); case Laufwerkstyp of dtFloppy: Memo1.Lines.Add(Laufwerk + ' = Wechseldatenträger (Floppy und Co.)'); dtFixed: Memo1.Lines.Add(Laufwerk + ' = Festplattenpartition'); dtNetwork: Memo1.Lines.Add(Laufwerk + ' = Netzwerklaufwerk'); dtCDROM: Memo1.Lines.Add(Laufwerk + ' = CD-Laufwerk'); dtRAM: Memo1.Lines.Add(Laufwerk + ' = RAM-Laufwerk'); dtUnknown: Memo1.Lines.Add(Laufwerk + ' = unbekanntes Laufwerk'); else Memo1.Lines.Add(Laufwerk + ' = nicht vorhanden.'); end; end; end; |
Hochhaus - Di 17.07.12 12:17
Danke !!
Hochhaus
Hochhaus - Mi 18.07.12 15:42
Gerd Kayser hat folgendes geschrieben : |
Hochhaus hat folgendes geschrieben : | Was tue ich aber, wenn der PC zwei oder drei Laufwerke hat ? |
Man verwendet einen Alias. Beispiel (hier für Laufwerk N):
|
Was läuft bei meinem Proggi schief ?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
|
Procedure TForm1.Button1Click(Sender: TObject); Var LW: Char; Begin LW := ComboBox1.Text[1]; mciSendString('open ' + LW + ': type cdAudio alias CD1', nil, 0, 0); mciSendString('set CD1 door open', nil, 0, 0); mciSendString('close CD1', nil, 0, 0);
End; |
[DCC Fehler] CD.PAS(64): E2010 Inkompatible Typen: 'PWideChar' und 'string'
Zyklame - Mi 18.07.12 15:59
Du hast hier einen Normalen String und keine Konstante. Die Kann der Compiler nicht automatisch umwandeln.
Die Fehlermeldung sagt doch schon alles:
Zitat: |
[DCC Fehler] CD.PAS(64): E2010 Inkompatible Typen: 'PWideChar' und 'string' |
Ein einfacher Cast löst das Problem.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Procedure TForm1.Button1Click(Sender: TObject); Var LW: Char; Begin LW := ComboBox1.Text[1]; mciSendString(PWideChar('open ' + LW + ': type cdAudio alias CD1'), nil, 0, 0); mciSendString('set CD1 door open', nil, 0, 0); mciSendString('close CD1', nil, 0, 0); End; |
Hochhaus - Do 19.07.12 18:35
Gerd Kayser hat folgendes geschrieben : |
Hochhaus hat folgendes geschrieben : | Das funktioniert nur, wenn ich die Laufwerksbuchstaben kenne. |
Mit GetDriveType kann man ermitteln, welche Laufwerksbuchstaben welchen Laufwerkstypen entsprechen.
|
Kann man da auch Untergruppen von Laufwerkstypen unterscheiden ? Z. Bsp. Blueray ,DVD, CD, DVD-RW, CD-RW etc. ? statt einfach dTCDROM .Der entsprechende Code würde mich sehr interessieren !
Danke,
Hochhaus
Hochhaus - Fr 20.07.12 09:20
Danke !!
Hochhaus
Hochhaus - So 22.07.12 19:53
Noch eine letzte Frage: Wie unterscheide ich ein virtuelles CDROM-Laufwerk von einem echten, realen CD-Laufwerk ?
Gruss,
Hochhaus
Gerd Kayser - So 22.07.12 21:31
Hochhaus hat folgendes geschrieben : |
Wie unterscheide ich ein virtuelles CDROM-Laufwerk von einem echten, realen CD-Laufwerk ? |
Besorge Dir MAGWMI von
http://www.magsys.co.uk/delphi/magwmi.asp. Der Download und die Verwendung sind meines Wissens kostenlos. Sourcen und eine Testanwendung sind dabei.
Testhalber habe ich vorhin zwei virtuelle Laufwerke mit Virtual CloneDrive unter Windows 7 erzeugt und mir die CDROMs im Testprogramm anzeigen lassen. Bei den virtuellen Laufwerken fehlte bei Capabilities die 4 (= Supports Writing). Des Weiteren wurden die Laufwerke als SCSI-Laufwerke eingetragen. Es sind aber nur Indizien, keine Beweise. Aber wer hat heute noch SCSI-Laufwerke oder normale CD-Laufwerke ohne Brennfunktion im Einsatz?
Anbei ein Screenshot. Die ersten beiden Laufwerke sind die virtuellen Laufwerke. Die Bedeutung der einzelnen Werte ist hier nachzulesen:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa394081(v=vs.85).aspx
Delete - Mo 23.07.12 11:37
Über die SCSI-Angaben kann man virtuelle Laufwerke sicher nicht identifizieren.
Physikalisch haben die Wenigsten noch SCSI-LW, aber die Treiber sind auch bei WIN7 noch vorhanden.
Beispiel:
WIN 7 - 64Bit
Notebook, eingebaute HDD (SATA, IDE-Modus), SCSIPort 2 laut obengenanntem Programm (Magenta Test-WMI Subroutines)
Win32_DiskDrive: zeigt keine CDROM-Drives an
Win32_PhysicalMedia: kein Unterschied zwischen physikalisch und virtuell
Win32_DiskDrivePhysicalMedia: nichts
Win32_MappedLogicalDisk: nichts
Win32_LogicalDisk:
Drivetype 5 bei physikalischem CD/DVD und virtuellem BD-ROM
MediaType 11 bei physikalischem CD/DVD und virtuellem BD-ROM
Win32_cdromdrive - siehe Anhang
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!