Bestimmtes Laufwerk herausfinden!
-
Ja ok Thx.
Funzt.Doch so finde ich das CD-ROM Laufwerk auch nur müühhsaaam raus.
Gibt es nicht eine möglichkeit dies in eine Schleife zu packen welche alle Buchstaben von A-Z durchschaut und wenn es dann zb: E ist, das er dort stoppt und das E: weiterverwendet werden kann ???
Whileschleifen gibt ja ++1; oder so, aber bei Buchstaben???
mfg
Pro
-
?????????????????????????????????
CString strReturn; DWORD dwDrives = GetLogicalDrives(); char szDrive[8]="A:\\"; for(int i=0, j=1; i<26; i++, j*=2) { if(dwDrives & j) { szDrive[0] = i + 'A'; strReturn += szDrive; switch (GetDriveType(szDrive)) { case DRIVE_CDROM: strReturn += "CDROM"; ZiehDerKatzAmSchwanz(); break; case DRIVE_REMOVABLE: strReturn += "Wechseldatentraeger"; RubbelDieKatz(); break; } } }Das Bsp. läuft in einer Schleife und geht von A - Z.
Verstehe nicht so ganz was du willst / meinst !?!?!?*winke*
Hellsgore
-
Nö. Eben nich.
Wenn ich jetzt if(GetDriveType("c:\") == DRIVE_CDROM) hab, klappt das!
Aber ich möchte nicht selbst immer c:\ oder d:\\ oder was auch immer durch GetDriveType abfragen. Ist das net inner schleife möglich?
Denn eigentlich möchte ich es umgekehrt:
DRIVE_CDROM == ?????
Dann:
MessageBox("Das CD-Rom Laufwerk hat den Buchstaben: " + irgend_ne_var + "\nVielen Dank!", "INformation", MB_ICONPROGRAMMERISTDUMM | MB_OKORSPUELEN);

-
CString strReturn; DWORD dwDrives = GetLogicalDrives(); char szDrive[8]="A:\\"; for(int i=0, j=1; i<26; i++, j*=2) { if(dwDrives & j) { szDrive[0] = i + 'A'; strReturn += szDrive; switch (GetDriveType(szDrive)) { case DRIVE_CDROM: MessageBox("Das CD-Rom Laufwerk hat den Buchstaben: " + strReturn + "\nVielen Dank!", "INformation", MB_ICONPROGRAMMERISTDUMM | MB_OKORSPUELEN); break; case DRIVE_REMOVABLE: strReturn += "Wechseldatentraeger"; RubbelDieKatz(); break; } } }Willst mich doch jetzt veräppeln oder?
Vielleicht verstehe ich das jetzt wirklich nicht was du meinst. Aber die for-Schleife dort oben läuft von A - Z durch und fragt ab, ob ein CDROM oder ein Diskettenlaufwerk vorhanden ist. Du kannst ja wenn du lustig bist, bei gefundenem CDROM die Schleife abbrechen.Ansonsten bitte erkläre nochmal was du gerne haben möchtest....
*winke*
Hellsgore
-
Okay.
Wenn ich jetzt nur das da schreibe:MessageBox("Das CD-ROM Laufwerk hat den Buchstaben: " + strReturn, "Information", MB_ICONEXCLAMATION | MB_OK);Wird mir folgendes Ausgegeben: (Screenshot) --> http://www.swiss-portal.com/img_src_prob/hoppla.jpg
Oder muss ich da anders abfragen??
if(strReturn == DRIVE_CDROM) { MessageBox("CD-Rom laufwerk gefunden", "info", MB_OK); } else { // Verprügle die Katz "miau" }Is komisch. I glaub i bin zu blöd?
-
Sage mal, du willst mich doch in den Wahnsinn treiben oder?

void CDeinDlg::SchraubdieKatzandieWand() { CString strReturn; DWORD dwDrives = GetLogicalDrives(); char szDrive[8]="A:\\"; for(int i=0, j=1; i<26; i++, j*=2) { if(dwDrives & j) { szDrive[0] = i + 'A'; strReturn = szDrive; if (GetDriveType(szDrive) == DRIVE_CDROM) { AfxMessageBox("Buchstabe für CDROM" + strReturn); break; //für die Schleife, bricht ab } } } }Was machen wir?
1. Geht alle Laufwerke durch A - Z
2. Überprüft über den Buchstaben mit GetDriveTyp ob das Laufwerk ein CDROM ist
3. Ist das Laufwerk ein CDROM gibt er die MsgBox aus und bricht die Schleife ab
4. Wenn es keins ist läuft er weiter.in strReturn steht dann "[Buchstabe]:\"
-
Jetzt aber mal stark vereinfacht:
CString strLFW = "A:\\"; for(int i=0; i < 26; i++) { strLFW.SetAt(0, 0x41 /* Für 'A' */ + i); if (GetDriveType(strLFW) == DRIVE_CDROM) { AfxMessageBox("Buchstabe für CDROM " + strLFW); break; //für die Schleife, bricht ab } }Bei jedem Durchlauf ändert er den Laufwerksbuchstaben, bis er das CDROM gefunden hat.
-
Ne, in den Wahnsinn treiben will ich Dich nicht, aber mein Programm!!
Kann nicht sein das ein CD-ROM Laufwerk gleich 3 Buchstaben hat???
Wenn ich folgenden Code hab:
CString strReturn, strDrive="A:\\", szBuffer; ULARGE_INTEGER nDummy, nTotalBytes, nFreeBytes; int iBytes = 0; DWORD dwDrives = GetLogicalDrives(); char szDrive[8]="A:\\", szVolName[80], szFSName[80]; bool bQueryVol; strReturn += "[Laufwerke]\n"; for(int i=0, j=1; i<26; i++, j*=2) { if(dwDrives & j) { szDrive[0] = i + 'A'; strReturn += szDrive; bQueryVol = false; if (GetDriveType(szDrive) == DRIVE_CDROM) { AfxMessageBox("Buchstabe für CDROM" + strReturn); break; //für die Schleife, bricht ab } /* switch(GetDriveType(szDrive)) { case DRIVE_UNKNOWN: strReturn += "Unbekannt"; break; case DRIVE_NO_ROOT_DIR: strReturn += "? Kein Root-Verzeichnis ?"; break; case DRIVE_REMOVABLE: strReturn += "Wechseldatentraeger"; bQueryVol = true; break; case DRIVE_FIXED: strReturn += "Festplatte"; bQueryVol = true; break; case DRIVE_REMOTE: strReturn += "Netzwerkverknuepfung"; break; case DRIVE_CDROM: strReturn += "CDROM"; break; case DRIVE_RAMDISK: strReturn += "RAM-Disk"; bQueryVol = true; break; } */ if(bQueryVol) { if(GetDiskFreeSpaceEx(szDrive, &nDummy, &nTotalBytes, &nFreeBytes)) { iBytes = nTotalBytes.QuadPart/1048576; if(iBytes < 1024) szBuffer.Format(", %5d MB Kapazitaet", iBytes); else szBuffer.Format(", %5.1f GB Kapazitaet", (float) iBytes / 1024); strReturn += szBuffer; iBytes = nFreeBytes.QuadPart/1048576; if(iBytes < 1024) szBuffer.Format(", %5d MB frei", iBytes); else szBuffer.Format(", %5.1f GB frei", (float) iBytes / 1024); strReturn += szBuffer; } if(GetVolumeInformation(szDrive, szVolName, 79, NULL, NULL, NULL, szFSName, 79)) strReturn += ", "; strReturn += szFSName; } } }Wird mir folgendes ausgegeben:
Buchstabe für CD-ROM[Laufwerke]
A:\C:\D:\?????? I glaub ich treib mich selbst in den Wahnsinn!!!

mfg
Pro
-
IM SORRY!
Hab jetzt einfach die Funktion
CString strLFW = "A:\\"; for(int i=0; i < 26; i++) { strLFW.SetAt(0, 0x41 /* Für 'A' */ + i); if (GetDriveType(strLFW) == DRIVE_CDROM) { AfxMessageBox("Buchstabe für CDROM " + strLFW); break; //für die Schleife, bricht ab } }eingebaut und den ganz laangen Code mit bool etc AUsgeklammert! jetzt klappts.
THX!
mfg
PRO
-
Das ist doch mal fein.
Der Fehler bei dir dort oben im Code lag daran, dass du strReturn += das Laufwerk gemacht hast. Somit hat er dir A:\, B:\, C:\ bis zum CDROM, jeden Buchstaben dort reingeschrieben. Das strReturn war ja auch ursprünglich dafür gedacht, alle Laufwerke aufzulisten mit deren spezifischen Angaben.
*winke*
Hellsgore