Nach Datenträgerbezeichnung suchen

wedhead

Mitglied
Hi @ all !

Ich möchte das bei Button1 Klick geschaut wird in welchem laufwwerk sich die CD/DVD mit dem namen "AUDIO_CD" (benätige variable mit laufwerkbuchstaben) habe da nen code im inet gefunden und ein bisschen bearbeitet, leider passen da die ifbedingungen nicht, vlt könnt ihr mir weiter helfen...


Code:
bool IsDiskInDrive(AnsiString slDrive, AnsiString &slVolName,
  DWORD& dwVolumeSerial)
{
  bool blRetVal = false;
  UINT iErrMode;
  TCHAR szVolName[256];
  DWORD dwMaxComSize;
  DWORD dwFlags;
  TCHAR szFS[256];

  // Falls Laufwerksname übergeben:
  if(slDrive.Length() > 0)
  {
    // der Aufruf von SetErrorMode ist notwendig, Windows-Messagebox
    // "Laufwerk nicht bereit" zu unterdrücken:
    iErrMode = SetErrorMode(SEM_FAILCRITICALERRORS);

    // Laufwerksinformationen auslesen:
    blRetVal = GetVolumeInformation(
      (slDrive.SubString(1,1)+ ":\\").c_str(),
      szVolName, sizeof(szVolName), &dwVolumeSerial,
      &dwMaxComSize, &dwFlags, szFS, sizeof(szFS));

    // ErrorMode in ursprünglichen Zustand versetzen:
    SetErrorMode(iErrMode);
  }
  else blRetVal = false;

  // Volumen-Namen in überg. String schreiben:
  slVolName = blRetVal ? AnsiString(szVolName) : EmptyStr;
  return blRetVal;
}


bool GetDiskSpace(AnsiString slDrive, __int64& ilBytesTotal,
  __int64& ilBytesFree)
{
  ilBytesFree  = DiskFree(slDrive.UpperCase()[1]-0x40);
  ilBytesTotal = DiskSize(slDrive.UpperCase()[1]-0x40);
  return ilBytesFree > -1 && ilBytesTotal > -1;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  AnsiString slVolumeName;
  DWORD dwVolumeSerial;

  if(IsDiskInDrive(AnsiString("c"), slVolumeName,dwVolumeSerial))
         {
                if (slVolumeName=="XP_0WN3D")Application->MessageBox("C","Laufwerk",32);
         }

  if(IsDiskInDrive(AnsiString("d"), slVolumeName,dwVolumeSerial))
        {
                if (slVolumeName=="XP_0WN3D")Application->MessageBox("D","Laufwerk",32);

        }

  if(IsDiskInDrive(AnsiString("e"), slVolumeName,dwVolumeSerial))
        {
                if (slVolumeName=="XP_0WN3D")Application->MessageBox("E","Laufwerk",32);
        }

  if(IsDiskInDrive(AnsiString("f"), slVolumeName,dwVolumeSerial))
        {
                if (slVolumeName=="XP_0WN3D")Application->MessageBox("F","Laufwerk",32);
        }

  if(IsDiskInDrive(AnsiString("g"), slVolumeName,dwVolumeSerial))
        {
        Application->MessageBox("G","Laufwerk",32);
        }

  if(IsDiskInDrive(AnsiString("h"), slVolumeName,dwVolumeSerial))
        {
                if (slVolumeName=="XP_0WN3D")Application->MessageBox("H","Laufwerk",32);
        }

  if(IsDiskInDrive(AnsiString("i"), slVolumeName,dwVolumeSerial))
        {
                if (slVolumeName=="XP_0WN3D")Application->MessageBox("I","Laufwerk",32);
        }

  if(IsDiskInDrive(AnsiString("j"), slVolumeName,dwVolumeSerial))
        {
                if (slVolumeName=="XP_0WN3D")Application->MessageBox("J","Laufwerk",32);
        }

  if(IsDiskInDrive(AnsiString("k"), slVolumeName,dwVolumeSerial))
        {
                if (slVolumeName=="XP_0WN3D")Application->MessageBox("K","Laufwerk",32);
        }

  if(IsDiskInDrive(AnsiString("l"), slVolumeName,dwVolumeSerial))
        {
                if (slVolumeName=="XP_0WN3D")Application->MessageBox("L","Laufwerk",32);
        }

  else  Application->MessageBox("Bitte WinXP 0wn3d DVD einlegen","Fehler",32);
}
 
also ich hab im Internet nen Code gefunden der mehr Funktionen hat als ich benötige und da ich noch noch Anfänger bin kann ich die Funktion nicht rausfiltern die ich wie Oben beschriebne brauche.

if(IsDiskInDrive(AnsiString("c"), slVolumeName,dwVolumeSerial))

wenn ich hier mit else if weitermache, dann springt er wegen "IsDiskInDrive" ans ende des Programms wenn es das Laufwerk nicht gibt, wenn ich mit else mache so wie im Code Oben,
dann bringt er die else Fehlermeldung von unten auch wenn die CD gefunden wurde.


Ich brauche aus dem Quellcode eigentlich nur die Codeschnipsel um abzufragen ob die gesuchte CD sich in c: oder d: oder e: usw befinded und wenn sie nirgends iss soll eine Fehlermeldung erscheinen.
 
Zurück