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


Anmelden zum Antworten