Laufwerke bestimmen



  • Hi!
    Ich möchte, dass ich wenn ich auf nen Button drücke, ich den Laufwerksbuchstaben des CD Laufwerkes bekomme. Ist das irgendwie möglich??
    MFG Desert Storm



  • kannst du vielleicht aus der registry auslesen



  • tja wie das geht weiß ich leider auch nicht



  • alle 26 möglichen Laufwerksbuchschtaben mit GetDriveType überprüfen, wäre eine Möglichkeit



  • und wie geht das 😕 !! hat da wer n beispiel??



  • char szDrive[] = { 'A', ':', '\\', 0 };
    for( int n = 0; n < 26; n++ )
    {
    	szDrive[ 0 ] = 'A' + n;
    	if( GetDriveType( szDrive ) == DRIVE_CDROM )
    		printf( "%s ist ein CD-ROM Laufwerk\n", szDrive  );
    }
    


  • Wenn du gleich noch die Seriennummer auslesen möchtest, kannst du die Funktion GetVolumeInformation verwenden



  • ScriptGod: Das ist doch für Konsolenbasiertes C++ und nicht MFC oder? Spielt aber keine Rolle weil nur das printf nicht funzen würde und man könnte es durch eine MessageBox oder was auch immer ersetzen.

    Desert Storm: Hast du die Antwort die du gesucht hast? Ich würde nämlich auch gerne was fragen wenn wir schon bei dem Thema sind um keinen neuen Thread erstellen zu müssen. Die Frage: Ich habe mir in einer ListBox alle 26 Laufwerke mit Laufwerksbuchstaben und Typ ausgeben lassen. Es war DIESES Tutorial (DriveInfo heisst es, man muss etwas nach unten scrollen) nur habe ich es leicht abgeändert (eben dass es z.B. alles in einer ListBox ausgibt). Nun würde ich gerne zählen, wie viele Laufwerke davon den Typ 1 haben sprich nicht funktionstüchtig sind. Ich habe zwar den Ablauf der Schleife schon im Kopf aber irgendwie fehlt es mir halt doch an Wissen. Er soll also ungefähr folgendes machen:

    Wenn drive (ist der typ 1-6) den Wert 1 hat, soll er anzahl_laufwerke (schon eine vordefinierte long variable) um 1 Wert hochzählen. Die ganze Schleife soll 26 Mal ausgeführt werden

    Ich hoffe mir kann jemand etwas behilflich sein und sorry DesertStorm dass ich hier "reingeplatzt" bin. Wenn du den Post nicht willst kann ich ihn wieder löschen.



  • printf, sollte hier nur als Beispiel dienen und kann natürlich durch andere Sachen ersetzt werden

    BAR: deine Frage kann ich jetzt nicht ganz nachvollziehen... kannst du vielleicht etwas Code posten?
    Ist das sowas, was du suchst:

    long anzahl_laufwerke = 0;
    char szDrive[] = { 'A', ':', '\\', 0 }; 
    for( int n = 0; n < 26; n++ ) 
    { 
        szDrive[ 0 ] = 'A' + n;
        int nDrive = GetDriveType( szDrive );
        if( nDrive == 1 )
            anzahl_laufwerke++;
    }
    


  • Jo hier ist die Funktion die ich bisher habe. Läuft einwandfrei.

    void CExplorerDlg::OnScannen() 
    {	
        UpdateData(TRUE);									                    //Aus Steuerelementen in Variablen
        CClientDC dc(this);
    
        drive = 1;
        m_ctlListBox1.ResetContent();							                    //Listenfeld leeren
    
    	for(zaehler = 65; zaehler < (65+26); zaehler++)
    	{
    		str[zaehler-65] = zaehler;						                    //Grossbuchstaben A bis Z erzeugen (Zeichen-Code 65 bis 90)
    		int drive = GetDriveType(str[zaehler-65] + ":");		                //Laufwerktyp abfragen
    
    		resultat.Format("Laufwerk %s:     Typ: %i", str[zaehler-65], drive);    //Ausgabe für ListBox vorformatieren und als 'resultat' speichern
    		m_ctlListBox1.AddString(resultat);					                //'resultat' in der ListBox ausgeben
    	}
    
    	UpdateData(FALSE);								                        //Aus Variablen in Steuerelemente
    }
    

    Was ich jetzt genau möchte: Wenn der Laufwerktyp '1' ist bedeutet dies, dass das Laufwerk nicht funktionstüchtig bzw. nicht vorhanden ist. Die restlichen sind erstmal egal. Nun will ich ausgeben, WIE VIELE genau nicht gehen. Dafür brauche ich eine for-Schleife und ich verstehe das Prinzip nicht ganz. Deine sieht schon mal ziemlich gut aus aber ich verstehe z.B. nicht wofür du "char szDrive[] = { 'A', ':', '\', 0 };" deklarierst. Sorry wenn ich halt noch Anfänger bin aber ich bemühe mich zu lernen und das ist ein cooles Forum.



  • Kann man den Laufwerksbuchstaben auch in einem String speichern damit ich den später noch verwenden kann?? Ich brauch das fürn Autorun Programm womit ich denn mit einem ShellExecute befehl ein Programm von der CD ausführen kann!! Der Laufwerksbuchstabe ist ja bei jedem PC anders!!



  • ScriptGod schrieb:

    char szDrive[] = { 'A', ':', '\\', 0 };
    for( int n = 0; n < 26; n++ )
    {
    	szDrive[ 0 ] = 'A' + n;
    	if( GetDriveType( szDrive ) == DRIVE_CDROM )
    		printf( "%s ist ein CD-ROM Laufwerk\n", szDrive  );
    }
    

    hier ist es doch schon im string szDrive gespeichert



  • Das kann kein CString sein weil der mir sagt das nicht 2 Zeiger addiert werden!! Weil ich brauch den Laufwerksbuchstaben und denn muss da noch n Pfad hinterher gepackt werden!!



  • BAR schrieb:

    Jo hier ist die Funktion die ich bisher habe. Läuft einwandfrei.

    void CExplorerDlg::OnScannen() 
    {	
        UpdateData(TRUE);									                    //Aus Steuerelementen in Variablen
        CClientDC dc(this);
        
        drive = 1;
        m_ctlListBox1.ResetContent();							                    //Listenfeld leeren
    
    	for(zaehler = 65; zaehler < (65+26); zaehler++)
    	{
    		str[zaehler-65] = zaehler;						                    //Grossbuchstaben A bis Z erzeugen (Zeichen-Code 65 bis 90)
    		int drive = GetDriveType(str[zaehler-65] + ":");		                //Laufwerktyp abfragen
    		
    		resultat.Format("Laufwerk %s:     Typ: %i", str[zaehler-65], drive);    //Ausgabe für ListBox vorformatieren und als 'resultat' speichern
    		m_ctlListBox1.AddString(resultat);					                //'resultat' in der ListBox ausgeben
    	}
    
    	UpdateData(FALSE);								                        //Aus Variablen in Steuerelemente
    }
    

    Was ich jetzt genau möchte: Wenn der Laufwerktyp '1' ist bedeutet dies, dass das Laufwerk nicht funktionstüchtig bzw. nicht vorhanden ist. Die restlichen sind erstmal egal. Nun will ich ausgeben, WIE VIELE genau nicht gehen. Dafür brauche ich eine for-Schleife und ich verstehe das Prinzip nicht ganz. Deine sieht schon mal ziemlich gut aus aber ich verstehe z.B. nicht wofür du "char szDrive[] = { 'A', ':', '\', 0 };" deklarierst. Sorry wenn ich halt noch Anfänger bin aber ich bemühe mich zu lernen und das ist ein cooles Forum.

    szDrive[] = { 'A', ':', '\', 0 } ist das Verzeichnis das abgefragt wird. In der Schleife wird dann immer der erste Buschtabe ersetzt und somit werden alle durchgemacht

    das sollte doch deinen gesuchten Zweck erfüllen?
    [cpp]
    void CExplorerDlg::OnScannen()
    {
    UpdateData(TRUE); //Aus Steuerelementen in Variablen
    CClientDC dc(this);

    drive = 1;
    m_ctlListBox1.ResetContent(); //Listenfeld leeren

    for(zaehler = 65; zaehler < (65+26); zaehler++)
    {
    str[zaehler-65] = zaehler; //Grossbuchstaben A bis Z erzeugen (Zeichen-Code 65 bis 90)
    int drive = GetDriveType(str[zaehler-65] + ":"); //Laufwerktyp abfragen
    if( nDrive == 1 )
    anzahl_laufwerke++;

    resultat.Format("Laufwerk %s: Typ: %i", str[zaehler-65], drive); //Ausgabe für ListBox vorformatieren und als 'resultat' speichern
    m_ctlListBox1.AddString(resultat); //'resultat' in der ListBox ausgeben
    }

    UpdateData(FALSE); //Aus Variablen in Steuerelemente
    }
    [/cpp]



  • Desert Storm schrieb:

    Das kann kein CString sein weil der mir sagt das nicht 2 Zeiger addiert werden!! Weil ich brauch den Laufwerksbuchstaben und denn muss da noch n Pfad hinterher gepackt werden!!

    char szDrive[] = { 'A', ':', '\\', 0 }; 
    for( int n = 0; n < 26; n++ ) 
    { 
        szDrive[ 0 ] = 'A' + n; 
        if( GetDriveType( szDrive ) == DRIVE_CDROM ) 
            printf( "%s ist ein CD-ROM Laufwerk\n", szDrive  ); 
    
        CString sDrive = szDrive;
        sDrive += "\\BLA";
    }
    

Anmelden zum Antworten