Autor |
Beitrag |
Hochhaus
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Mo 16.07.12 19:15
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
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 16.07.12 19:29
Die Antwort findest Du hier:
msdn.microsoft.com/e...41%28v=vs.85%29.aspx
Du brauchst die MCIDEVICEID.
|
|
Gerd Kayser
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: 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; |
Für diesen Beitrag haben gedankt: Hochhaus
|
|
Hochhaus
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Mo 16.07.12 20:03
|
|
Gerd Kayser
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Mo 16.07.12 20:24
Für diesen Beitrag haben gedankt: Hochhaus
|
|
Hochhaus
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Di 17.07.12 12:17
|
|
Hochhaus
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: 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
Beiträge: 41
Erhaltene Danke: 1
Win 7 Professional
Delphi XE, Visual Studio 2010
|
Verfasst: 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; |
Für diesen Beitrag haben gedankt: Hochhaus
|
|
Hochhaus
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: 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
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 19.07.12 19:20
Für diesen Beitrag haben gedankt: Hochhaus
|
|
Hochhaus
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Fr 20.07.12 09:20
|
|
Hochhaus
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: 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
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: 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 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: msdn.microsoft.com/e...394081(v=vs.85).aspx
Einloggen, um Attachments anzusehen!
Für diesen Beitrag haben gedankt: Hochhaus
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
Einloggen, um Attachments anzusehen!
|
|