![]() |
CD/DVD-Laufwerk prüfen
Hi,
ich habe folgende Frage: Wie kann man es machen, damit, beim Programmstart, geprüft wird, ob sich eine CD im Laufwerk befindet und welche CD/DVD dort drin liegt. Das ganze sollte folgendermaßen Funktionieren, wenn man das Programm startet soll geprüft werden ob die CD mit dem Installationsprogramm eingelegt ist. Ich habe schon gegooglet und habe auch schon herausgefunden wie ich prüfe ob eine CD eingelegt ist oder nicht. Nur weis ich jetzt nicht, wie ich das mit dem Namen und Inhalt prüfen machen sollte. Websiten mit Beispielen und Erklärungen wären auch hilfreich ;) Danke Luki :) |
AW: CD/DVD-Laufwerk prüfen
Vielleicht denke ich zu simpel, aber
Delphi-Quellcode:
if FileExists(<Laufwerksbuchstabe> + ':\MeineSetup.exe') then
|
AW: CD/DVD-Laufwerk prüfen
Hmm.. Klingt logisch, aber ich habe in dem einen Tutorial nur gelesen wie man mit Boolean prüft ob eine CD/DVD eingelegt ist. Nur will ich dann jetzt ja den Laufwerkbuchstaben wissen und jetzt weis ich nicht, wie ich den Laufwerkbuchstaben ermittle.
|
AW: CD/DVD-Laufwerk prüfen
|
AW: CD/DVD-Laufwerk prüfen
Ich habe das von dem Link jetzt versucht ein wenig umzubauen nur schaffe ich das irgendwie nicht. Im Tut. steht es ja so da:
Delphi-Quellcode:
Und jetzt möchte ich nur dass das Laufwerk geprüft wird. Ich hätte das jetzt folgendermaßen umgeschrieben nur kommt die Fehlermeldung:
procedure GetDrives(const AItems: TStrings);
const DriveTypeTexts: array[DRIVE_UNKNOWN..DRIVE_RAMDISK] of string = ('Unbekannt', 'Kein Wurzelverzeichnis', 'Diskette', 'Festplatte', 'Netzlaufwerk', 'CDROM', 'RAMDisk'); var Drive: Char; DriveType: Integer; DriveMask: Integer; Flag: Integer; begin DriveMask := GetLogicalDrives; //Bitmaske holen flag := 1; //Startflag setzen for Drive := 'A' to 'Z' do //Jeden Buchstaben gegenprüfen begin if (flag and DriveMask) <> 0 then begin DriveType := GetDriveType(PChar(Format('%S:\',[Drive]) ) ) ; AItems.Add(Format('%s: %s', [Drive, DriveTypeTexts[DriveType]])); end; flag := flag shl 1; //Ein Bit weiter nach links gehen ( = flag * 2) end; end; [dcc32 Fehler] Unit1.pas(29): E2029 '..' erwartet, aber ']' gefunden [dcc32 Fehler] Unit1.pas(30): E2010 Inkompatible Typen: 'Int64' und 'string' [dcc32 Fehler] Unit1.pas(31): E2029 'OF' erwartet, aber 'VAR' gefunden [dcc32 Fataler Fehler] Project1.dpr(5): F2063 Verwendete Unit 'Unit1.pas' kann nicht compiliert werden Misslungen Und hier ist mein Code:
Delphi-Quellcode:
Ich glaube ich denke mal wieder zu kompliziert und die Lösung ist ganz einfach..
procedure GetDrives(const AItems: TStrings);
const DriveTypeTexts: array[DRIVE_CDROM] of string = ('CDROM'); var Drive: Char; DriveType: Integer; DriveMask: Integer; Flag: Integer; begin DriveMask := GetLogicalDrives; //Bitmaske holen flag := 1; //Startflag setzen for Drive := 'A' to 'Z' do //Jeden Buchstaben gegenprüfen begin if (flag and DriveMask) <> 0 then begin DriveType := GetDriveType(PChar(Format('%S:\',[Drive]) ) ) ; AItems.Add(Format('%s: %s', [Drive, DriveTypeTexts[DriveType]])); end; flag := flag shl 1; //Ein Bit weiter nach links gehen ( = flag * 2) end; end; |
AW: CD/DVD-Laufwerk prüfen
Hallo,
das Array sollte nach deinem Code aber so bleiben. Aber ich würde das einfacher machen.
Delphi-Quellcode:
Code ist nicht getestet.
procedure GetDrives(const AItems: TStrings);
var Drive: Char; DriveType: Integer; DriveMask: Integer; Flag: Integer; S1: String; begin AItems.Clear; DriveMask := GetLogicalDrives; //Bitmaske holen flag := 1; //Startflag setzen for Drive := 'A' to 'Z' do //Jeden Buchstaben gegenprüfen begin if (flag and DriveMask) <> 0 then begin DriveType := GetDriveType(PChar(Format('%S:\',[Drive]) ) ) ; if DriveType=DRIVE_CDROM then begin AItems.Add(Drive); // falls das nicht klappt S1 := Drive; AItems.Add(S1); end; end; flag := flag shl 1; //Ein Bit weiter nach links gehen ( = flag * 2) end; end; Im Ergebnis sind die Buchstaben aller CD-/ DVD-Laufwerke in der StringList. Heiko |
AW: CD/DVD-Laufwerk prüfen
Danke für deine Antwort. Nur benötige ich die Variable in einem String und nicht in einer Listbox.. Ich habe das jetzt so um geschrieben wie ich denke es sollte richtig sein:
Delphi-Quellcode:
Nur kommt folgende Fehlermeldung:
procedure GetDrives(const AItems: String);
var Drive: Char; DriveType: Integer; DriveMask: Integer; Flag: Integer; S1: String; begin DriveMask := GetLogicalDrives; //Bitmaske holen flag := 1; //Startflag setzen for Drive := 'A' to 'Z' do //Jeden Buchstaben gegenprüfen begin if (flag and DriveMask) <> 0 then begin DriveType := GetDriveType(PChar(Format('%S:\',[Drive]) ) ) ; if DriveType=DRIVE_CDROM then begin AItems := (Drive); end; end; flag := flag shl 1; //Ein Bit weiter nach links gehen ( = flag * 2) end; end; [dcc32 Fehler] Unit1.pas(44): E2064 Der linken Seite kann nichts zugewiesen werden |
AW: CD/DVD-Laufwerk prüfen
Hat sich erledigt ;) Habe es jetzt so hinbekommen:
Delphi-Quellcode:
procedure GetDrives(var Item: String);
var Drive: Char; DriveType: Integer; DriveMask: Integer; Flag: Integer; begin DriveMask := GetLogicalDrives; //Bitmaske holen flag := 1; //Startflag setzen for Drive := 'A' to 'Z' do //Jeden Buchstaben gegenprüfen begin if (flag and DriveMask) <> 0 then begin DriveType := GetDriveType(PChar(Format('%S:\',[Drive]) ) ) ; if DriveType=DRIVE_CDROM then begin Item := (Drive); end; end; flag := flag shl 1; //Ein Bit weiter nach links gehen ( = flag * 2) end; end; procedure TForm1.Button1Click(Sender: TObject); var show: String; begin GetDrives(show); Label1.Caption := show; end; |
AW: CD/DVD-Laufwerk prüfen
Und was machst Du bei mehreren CD-/DVD-Laufwerken? Es soll ja auch Leute geben, die einen separaten Brenner verbaut haben.
|
AW: CD/DVD-Laufwerk prüfen
Ich glaube ja du machst dir Probleme wo keine sind und triffst Annahmen die in der Praxis wiederum Probleme machen.
Aber das du nicht geschrieben hast was du eigentlich vorhast kann ich nur raten. Also: manche Firmen betreiben CD-ROM-Server. Häufig benötigte CDs/DVDs (z.B. MS Office) werden in Serverlaufwerke eingelegt und können von Client-Rechner im LAN gelesen werden. Oder der gesamte Inhalt wird irgendwo auf einem Netzwerkverzeichnis abgelegt. Software Updates werden zunehmend gar nicht mehr auf DVD ausgeliefert sondern müssen heruntergeladen werden. Es spielt heutzutage keine Rolle mehr auf welchem Medium irgendwelche Installation oder Daten vorliegen. Daher ist es sinnlos zu prüfen ob ein Laufwerk ein CD/DVD Medium oder vielleicht ein USB-Memorystick ist. |
AW: CD/DVD-Laufwerk prüfen
Hallo,
also mein Code lieferte eine Liste aller CD-DVD-Laufwerke. Du übergibst der Funktino eine vorher erzeugte StringListe:
Delphi-Quellcode:
Heiko
var
SL: TStringList; iDrive : Integer; sDrive : String; begin SL := TStringList.Create; GetDrives(SL); // hier geht es weiter mit dem Durchsuchen for iDrive := 0 to SL.Count-1 do begin sDrive := SL[iDrive]; if FileExists ... end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz