Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   CD/DVD-Laufwerk prüfen (https://www.delphipraxis.net/178076-cd-dvd-laufwerk-pruefen.html)

Luki206 16. Dez 2013 12:57

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 :)

DeddyH 16. Dez 2013 12:59

AW: CD/DVD-Laufwerk prüfen
 
Vielleicht denke ich zu simpel, aber
Delphi-Quellcode:
if FileExists(<Laufwerksbuchstabe> + ':\MeineSetup.exe') then

Luki206 16. Dez 2013 15:13

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.

baumina 16. Dez 2013 15:23

AW: CD/DVD-Laufwerk prüfen
 
http://www.delphi-treff.de/tipps/sys...e-cd-ram-disk/

Luki206 16. Dez 2013 15:47

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:
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;
Und jetzt möchte ich nur dass das Laufwerk geprüft wird. Ich hätte das jetzt folgendermaßen umgeschrieben nur kommt die Fehlermeldung:
[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:
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;
Ich glaube ich denke mal wieder zu kompliziert und die Lösung ist ganz einfach..

hoika 16. Dez 2013 16:01

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:
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;
Code ist nicht getestet.
Im Ergebnis sind die Buchstaben aller CD-/ DVD-Laufwerke in der StringList.

Heiko

Luki206 16. Dez 2013 17:58

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:
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;
Nur kommt folgende Fehlermeldung:
[dcc32 Fehler] Unit1.pas(44): E2064 Der linken Seite kann nichts zugewiesen werden

Luki206 16. Dez 2013 18:26

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;

DeddyH 16. Dez 2013 18:33

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.

sx2008 16. Dez 2013 22:38

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:25 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz