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 leerenfor(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"; }