Mal wieder Registry auslesen



  • Hallo Leute

    Gibt es eine Möglichkeit alle Unterordner eines Registrierschlüssels in einer Listbox an zu zeigen und dann sämtliche Werte?

    Also: Ich habe drei Listboxen. Inder ersten Listbox werden alle Unterschlüssel von HKEY_CURRENT_USER aufgelistet. Wenn ich dann einen der Einträge markiere, dann sollen in der zweiten Listbox alle Unterschlüssel (Unterordner) dieses Eintrages aufgelistet werden. Markiere ich wiederrum einen Eintrag in der zweiten Listbox, so sollen in der dritten Lisbox sowohl alle eventuell vorhandenen Unterschlüssel als auch deren Einträge erscheinen.

    Hier mal mein Testcode:

    #pragma once
    
    namespace Test {
    
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace Microsoft::Win32;
    
    	/// <summary>
    	/// Zusammenfassung für Form1
    	///
    	/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
    	///          die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
    	///          das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
    	///          Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
    	///          arbeiten, die diesem Formular zugewiesen sind.
    	/// </summary>
    
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: Konstruktorcode hier hinzufügen.
    			//
    		}
    
    	protected:
    		/// <summary>
    		/// Verwendete Ressourcen bereinigen.
    		/// </summary>
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
    	private: System::Windows::Forms::ListBox^  listBox1;
    	protected: 
    	private: System::Windows::Forms::ListBox^  listBox2;
    	private: System::Windows::Forms::ListBox^  listBox3;
    	private: System::Windows::Forms::Button^  buttonEinlesen;
    
    	private:
    		/// <summary>
    		/// Erforderliche Designervariable.
    		/// </summary>
    		System::ComponentModel::Container ^components;
    
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Erforderliche Methode für die Designerunterstützung.
    		/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			this->listBox1 = (gcnew System::Windows::Forms::ListBox());
    			this->listBox2 = (gcnew System::Windows::Forms::ListBox());
    			this->listBox3 = (gcnew System::Windows::Forms::ListBox());
    			this->buttonEinlesen = (gcnew System::Windows::Forms::Button());
    			this->SuspendLayout();
    			// 
    			// listBox1
    			// 
    			this->listBox1->FormattingEnabled = true;
    			this->listBox1->Location = System::Drawing::Point(12, 17);
    			this->listBox1->Name = L"listBox1";
    			this->listBox1->Size = System::Drawing::Size(177, 342);
    			this->listBox1->TabIndex = 0;
    			this->listBox1->SelectedIndexChanged += gcnew System::EventHandler(this, &Form1::listBox1_SelectedIndexChanged);
    			// 
    			// listBox2
    			// 
    			this->listBox2->FormattingEnabled = true;
    			this->listBox2->Location = System::Drawing::Point(204, 17);
    			this->listBox2->Name = L"listBox2";
    			this->listBox2->Size = System::Drawing::Size(220, 342);
    			this->listBox2->TabIndex = 1;
    			this->listBox2->SelectedIndexChanged += gcnew System::EventHandler(this, &Form1::listBox2_SelectedIndexChanged);
    			// 
    			// listBox3
    			// 
    			this->listBox3->FormattingEnabled = true;
    			this->listBox3->Location = System::Drawing::Point(442, 17);
    			this->listBox3->Name = L"listBox3";
    			this->listBox3->Size = System::Drawing::Size(336, 342);
    			this->listBox3->TabIndex = 2;
    			// 
    			// buttonEinlesen
    			// 
    			this->buttonEinlesen->Location = System::Drawing::Point(317, 416);
    			this->buttonEinlesen->Name = L"buttonEinlesen";
    			this->buttonEinlesen->Size = System::Drawing::Size(75, 23);
    			this->buttonEinlesen->TabIndex = 3;
    			this->buttonEinlesen->Text = L"Einlesen";
    			this->buttonEinlesen->UseVisualStyleBackColor = true;
    			this->buttonEinlesen->Click += gcnew System::EventHandler(this, &Form1::buttonEinlesen_Click);
    			// 
    			// Form1
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(790, 448);
    			this->Controls->Add(this->buttonEinlesen);
    			this->Controls->Add(this->listBox3);
    			this->Controls->Add(this->listBox2);
    			this->Controls->Add(this->listBox1);
    			this->Name = L"Form1";
    			this->Text = L"Form1";
    			this->ResumeLayout(false);
    
    		}
    #pragma endregion
    	private: System::Void buttonEinlesen_Click(System::Object^  sender, System::EventArgs^  e) 
    			 {
    				 // ein Array mit Zeichenketten für die Schlüssel
    				 array <String^> ^regSchluesselListe;
    
    				 // ein Array mit Zeichenketten für die Einträge
    				 array <String^> ^regEintragListe;
    
    				 // einen Handle für die Klasse RegistryKey
    				 /*RegistryKey ^regSchluessel;*/
    
    				 // den Inhalt der drei Listenfelder löschen
    				 listBox1->Items->Clear();
    				 listBox2->Items->Clear();
    				 listBox3->Items->Clear();
    
    				 // die Schlüssel aus HKEY_CURRENT_USER holen
    				 // bitte in einer Zeile eingeben
    				 regSchluesselListe = Registry::CurrentUser->GetSubKeyNames();
    
    				 // und in das erse Listenfeld eintragen
    				 for each (String ^eintrag in regSchluesselListe)
    					 listBox1->Items->Add(eintrag);
    
    				 // den Schlüssel Software öffnen
    				 // bitte in einer Zeile eingeben
    				 /*regSchluessel = Registry::CurrentUser->OpenSubKey("Software");*/
    
    				 /*regSchluesselListe = regSchluessel->OpenSubKey(listBox1->SelectedItem->ToString())->GetSubKeyNames();*/
    
    				 if(listBox1->SelectedIndex == -1)
    				 {
    					 listBox1->SelectedIndex = 0;
    				 }
    
    					 /*if(listBox1->SelectedIndex != 0)
    					 {*/
    
    						// und jetzt alle Unterschlüssel für Software lesen
    						/*regSchluesselListe = regSchluessel->OpenSubKey(listBox1->SelectedItem->ToString())->GetSubKeyNames();*/					 
    
    						// in das zweite Listenfeld eintragen
    						 /*for each (String ^eintrag in regSchluesselListe)
    							 listBox2->Items->Add(eintrag);*/
    					/* }*/
    
    				 /*}*/
    				 // den Schlüssel \ Software \ Microsoft \ VCExpress \ 10.0 öffnen
    				/* regSchluessel = Registry::CurrentUser->OpenSubKey("Software\\Microsoft\\VCExpress\\10.0");*/
    
    				 // und nun die eigentlichen Einträge lesen
    				/* regEintragListe = regSchluessel->GetValueNames();*/
    
    				 // die Namen und die Werte in das dritte Listenfeld eintragen
    				 //for each (String ^eintrag in regEintragListe)
    					// // bitte in einer Zeile eingeben
    					// listBox3->Items->Add(eintrag + " = " + Convert::ToString(regSchluessel->GetValue(eintrag)));
    			 }
    	private: System::Void listBox1_SelectedIndexChanged(System::Object^  sender, System::EventArgs^  e) 
    			 {
    				 listBox2->Items->Clear();
    
    				 RegistryKey ^SchluesselListe = Registry::CurrentUser;
    
    				 array <String^> ^UnterListe;
    
    				 UnterListe = SchluesselListe->OpenSubKey(listBox1->SelectedItem->ToString())->GetSubKeyNames();	
    
    				 for each (String ^eintrag in UnterListe)
    							 listBox2->Items->Add(eintrag);
    
    			 }
    private: System::Void listBox2_SelectedIndexChanged(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			  listBox3->Items->Clear();
    
    			  RegistryKey ^SchluesselListe = Registry::CurrentUser->OpenSubKey(listBox1->SelectedItem->ToString());
    			  RegistryKey ^SchluesselListe2 = SchluesselListe->OpenSubKey(listBox2->SelectedItem->ToString());
    
    			  /*array <String^> ^EintragListe;
    			  array <String^> ^EintragListe2;*/
    
    			     /*RegistryKey^ subkey = Registry::CurrentUser->OpenSubKey(listBox1->SelectedItem->ToString());
    				 RegistryKey^ subkey2 = subkey->OpenSubKey(listBox2->SelectedItem->ToString())*/
    
    			 /* EintragListe = SchluesselListe->OpenSubKey(listBox1->SelectedItem->ToString());
    			  EintragListe2 = SchluesselListe2->OpenSubKey(listBox2->SelectedItem->ToString());*/
    
    				 for each (String ^eintrag in SchluesselListe2->GetSubKeyNames())
    					 listBox3->Items->Add(eintrag);
    
    				 for each (String ^eintrag in SchluesselListe2->GetValueNames())
    					 listBox3->Items->Add(eintrag + " = " + Convert::ToString(SchluesselListe2->GetValue(eintrag)));
    
    			  //EintragListe = SchluesselListe->OpenSubKey(listBox1->SelectedItem->ToString()->GetValue());
    				 // /*->OpenSubKey(listBox2->SelectedItem->ToString())->GetSubKeyNames();*/
    
    			  //EintragListe2 = SchluesselListe2->OpenSubKey(listBox2->SelectedItem->ToString()->GetValueNames());
    
    			  /*for each (String ^eintrag in EintragListe)
    							 listBox3->Items->Add(eintrag);*/
    
    			 /* EintragListe = SchluesselListe->OpenSubKey(listBox1->SelectedItem->ToString())
    				  ->OpenSubKey(listBox2->SelectedItem->ToString())->GetSubKeyNames();*/
    
    			  /*array <String^> ^WertNamen;*/
    
    			  /*for each (String ^eintrag in EintragListe)
    							 listBox3->Items->Add(eintrag);*/
    
    			  /*for each (String ^eintrag in EintragListe)
    							listBox3->Items->Add(eintrag + "Wert" + " = " + Convert::ToString(SchluesselListe->GetValue(eintrag)));*/
    
    			  /*for each (String ^eintrag in EintragListe)
    				  listBox3->Items->Add("Wert: " + eintrag + " (" + SchluesselListe->GetValueKind(eintrag)::Convert::ToString + ")");*/
    					//GetValueKind ließt den Typ des Werts aus
    			  /*for each (String^ eintrag in WertNamen)
    					  listBox3->Items->Add("Wert: " + eintrag + " (" + SchluesselListe->GetValueKind(eintrag).ToString () + ")");*/
    
    			     /*RegistryKey^ subkey = Registry::CurrentUser->OpenSubKey(listBox1->SelectedItem->ToString());
    				 RegistryKey^ subkey2 = subkey->OpenSubKey(listBox2->SelectedItem->ToString());
    
    				 for each (String ^eintrag in subkey2->GetSubKeyNames())
    					 listBox3->Items->Add(eintrag);
    
    				 for each (String ^eintrag in subkey2->GetValueNames())
    					 listBox3->Items->Add(eintrag + " = " + Convert::ToString(subkey2->GetValue(eintrag)));*/
    
    		 }
    };
    }
    

    Das ist erst mal ein Test, deswegen auch so viele Kommentare, die ich jetzt nicht unbedingt entfernen möchte. Falls ich einen davon noch benötige.

    Lieben Dank für Eure Hilfe

    champman



  • Kannst du bitte den Code auf ein Minimum reduzieren (Bastelkommentare usw. entfernen) und dann noch erwähnen, was das Problem an dem Code ist?



  • Hallo

    Hier noch mal der verkürzte Code

    #pragma once
    
    namespace Test {
    
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace Microsoft::Win32;
    
    	/// <summary>
    	/// Zusammenfassung für Form1
    	///
    	/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
    	///          die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
    	///          das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
    	///          Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
    	///          arbeiten, die diesem Formular zugewiesen sind.
    	/// </summary>
    
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: Konstruktorcode hier hinzufügen.
    			//
    		}
    
    	protected:
    		/// <summary>
    		/// Verwendete Ressourcen bereinigen.
    		/// </summary>
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
    	private: System::Windows::Forms::ListBox^  listBox1;
    	protected: 
    	private: System::Windows::Forms::ListBox^  listBox2;
    	private: System::Windows::Forms::ListBox^  listBox3;
    	private: System::Windows::Forms::Button^  buttonEinlesen;
    
    	private:
    		/// <summary>
    		/// Erforderliche Designervariable.
    		/// </summary>
    		System::ComponentModel::Container ^components;
    
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Erforderliche Methode für die Designerunterstützung.
    		/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			this->listBox1 = (gcnew System::Windows::Forms::ListBox());
    			this->listBox2 = (gcnew System::Windows::Forms::ListBox());
    			this->listBox3 = (gcnew System::Windows::Forms::ListBox());
    			this->buttonEinlesen = (gcnew System::Windows::Forms::Button());
    			this->SuspendLayout();
    			// 
    			// listBox1
    			// 
    			this->listBox1->FormattingEnabled = true;
    			this->listBox1->Location = System::Drawing::Point(12, 17);
    			this->listBox1->Name = L"listBox1";
    			this->listBox1->Size = System::Drawing::Size(177, 342);
    			this->listBox1->TabIndex = 0;
    			this->listBox1->SelectedIndexChanged += gcnew System::EventHandler(this, &Form1::listBox1_SelectedIndexChanged);
    			// 
    			// listBox2
    			// 
    			this->listBox2->FormattingEnabled = true;
    			this->listBox2->Location = System::Drawing::Point(204, 17);
    			this->listBox2->Name = L"listBox2";
    			this->listBox2->Size = System::Drawing::Size(220, 342);
    			this->listBox2->TabIndex = 1;
    			this->listBox2->SelectedIndexChanged += gcnew System::EventHandler(this, &Form1::listBox2_SelectedIndexChanged);
    			// 
    			// listBox3
    			// 
    			this->listBox3->FormattingEnabled = true;
    			this->listBox3->Location = System::Drawing::Point(442, 17);
    			this->listBox3->Name = L"listBox3";
    			this->listBox3->Size = System::Drawing::Size(336, 342);
    			this->listBox3->TabIndex = 2;
    			// 
    			// buttonEinlesen
    			// 
    			this->buttonEinlesen->Location = System::Drawing::Point(317, 416);
    			this->buttonEinlesen->Name = L"buttonEinlesen";
    			this->buttonEinlesen->Size = System::Drawing::Size(75, 23);
    			this->buttonEinlesen->TabIndex = 3;
    			this->buttonEinlesen->Text = L"Einlesen";
    			this->buttonEinlesen->UseVisualStyleBackColor = true;
    			this->buttonEinlesen->Click += gcnew System::EventHandler(this, &Form1::buttonEinlesen_Click);
    			// 
    			// Form1
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(790, 448);
    			this->Controls->Add(this->buttonEinlesen);
    			this->Controls->Add(this->listBox3);
    			this->Controls->Add(this->listBox2);
    			this->Controls->Add(this->listBox1);
    			this->Name = L"Form1";
    			this->Text = L"Form1";
    			this->ResumeLayout(false);
    
    		}
    #pragma endregion
    	private: System::Void buttonEinlesen_Click(System::Object^  sender, System::EventArgs^  e) 
    			 {
    				 // ein Array mit Zeichenketten für die Schlüssel
    				 array <String^> ^regSchluesselListe;
    
    				 // ein Array mit Zeichenketten für die Einträge
    				 array <String^> ^regEintragListe;
    
    				 // einen Handle für die Klasse RegistryKey
    				 /*RegistryKey ^regSchluessel;*/
    
    				 // den Inhalt der drei Listenfelder löschen
    				 listBox1->Items->Clear();
    				 listBox2->Items->Clear();
    				 listBox3->Items->Clear();
    
    				 // die Schlüssel aus HKEY_CURRENT_USER holen
    				 // bitte in einer Zeile eingeben
    				 regSchluesselListe = Registry::CurrentUser->GetSubKeyNames();
    
    				 // und in das erse Listenfeld eintragen
    				 for each (String ^eintrag in regSchluesselListe)
    					 listBox1->Items->Add(eintrag);
    
    				 if(listBox1->SelectedIndex == -1)
    				 {
    					 listBox1->SelectedIndex = 0;
    				 }
    
    			 }
    
    	private: System::Void listBox1_SelectedIndexChanged(System::Object^  sender, System::EventArgs^  e) 
    			 {
    				 listBox2->Items->Clear();
    
    				 RegistryKey ^SchluesselListe = Registry::CurrentUser;
    
    				 array <String^> ^UnterListe;
    
    				 UnterListe = SchluesselListe->OpenSubKey(listBox1->SelectedItem->ToString())->GetSubKeyNames();	
    
    				 for each (String ^eintrag in UnterListe)
    							 listBox2->Items->Add(eintrag);
    
    			 }
    private: System::Void listBox2_SelectedIndexChanged(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			  listBox3->Items->Clear();
    
    			  RegistryKey ^SchluesselListe = Registry::CurrentUser->OpenSubKey(listBox1->SelectedItem->ToString());
    			  RegistryKey ^SchluesselListe2 = SchluesselListe->OpenSubKey(listBox2->SelectedItem->ToString());
    
    				 for each (String ^eintrag in SchluesselListe2->GetSubKeyNames())
    					 listBox3->Items->Add(eintrag);
    
    				 for each (String ^eintrag in SchluesselListe2->GetValueNames())
    					 listBox3->Items->Add(eintrag + " = " + Convert::ToString(SchluesselListe2->GetValue(eintrag)));
    
    				 for each (String ^eintrag in subkey2->GetValueNames())
    					 listBox3->Items->Add(eintrag + " = " + Convert::ToString(subkey2->GetValue(eintrag)));*/
    
    		 }
    };
    }
    

    Die Frage ist ein wenig schwer zu formulieren. Aber trotzdem versuche ich es mal.

    In der dritten Listbox soll die Ausgabe wie ein "Dateibaum" ausgegeben werden. Das heiß, wenn es in dem ersten markierten Unterschlüssel der zweiten Listbox noch mehr Unterschlüssel gibt, so sollen diese dann auch in der dritten Listbox aufgeführt werden. Wenn man z. B. im Explorer einen Ordner markiert, dann werden seine sämtlichen Unterordner sichtbar und dann, wenn der letzte Unterordner des ersten, markierten Unterordners geöffnet ist, sieht man den Inhalt. Bei meinem Versuch die einzelnen Einträge oder vielmehr die Werte. Das können ja von einem Wert bis unendlich viele sein. Das soll allerdings in der Listbox geschehen und nicht wie beim Explorer in einem TreeView oder ähnliches.

    Ich hoffe, das war jetzt verständlich ob wohl etwas lang geraten.

    Lieber Guß
    champman



  • Und der gezeigte Code erfüllt diese Anforderungen inwiefern nicht?

    Mach doch mal ein Beispiel. Eine Schlüsselstruktur und dazu die erwarteten Listbox-Inhalte.



  • Hallo

    Ist es möglich hier Screenshots ein zu stellen?

    Ähhh, kann im Moment mit "Schlüsselstruktur" nichts anfangen. Ist das nicht schon dieser Code? 😕

    private: System::Void listBox2_SelectedIndexChanged(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			  listBox3->Items->Clear();
    
    			  RegistryKey ^SchluesselListe = Registry::CurrentUser->OpenSubKey(listBox1->SelectedItem->ToString());
    			  RegistryKey ^SchluesselListe2 = SchluesselListe->OpenSubKey(listBox2->SelectedItem->ToString());
    
    			  array <String^> ^EintragListe;
    
    for each (String ^eintrag in SchluesselListe2->GetSubKeyNames())
    					 listBox3->Items->Add(eintrag);
    
    				 for each (String ^eintrag in SchluesselListe2->GetValueNames())
    					 listBox3->Items->Add(eintrag + " = " + Convert::ToString(SchluesselListe2->GetValue(eintrag)));
    
     }
    

    Für jeweils die ersten Einträge erwarte ich folgende Ausgabe in der dritten Listbox ( Unter_Unterschlüssel trenne ich mit ->)

    1. Listbox AppEvents 2. Listbox EventLabels 3. Listbox .Default Einträge (Werte)
    in der Spalte Name: 1. Standard und 2. DispFileName
    in der Spalte Typ: 1. REG_SZ und 2. jREG_SZ
    in der Spalte Daten: 1. DefaultBeep und 2. @mmres.dll,-5824 als Werte.

    So sollen die Einträge aus dem ersten Unterschlüssel laut regedit aussehen.

    Wenn man Unterordner anstatt Unterschlüssel sagt, dann ist das Prinzip an Hand des Dateibaumes doch ersichtlich. Oder? Nur das anstatt des Baumes, das ganze in einer Listbox ausgegeben wird.

    Ich hoffe, dass das jetzt verständlich war.

    Gruß
    champman



  • champman schrieb:

    Ähhh, kann im Moment mit "Schlüsselstruktur" nichts anfangen. Ist das nicht schon dieser Code? 😕

    Du sollst Beispiel-Daten (keinen Code) beschreiben, und dazu, wie das in deinen Listboxen aussehen soll. Deine Beschreibung ist nämlich ziemlich wirr.

    champman schrieb:

    1. Listbox AppEvents 2. Listbox EventLabels 3. Listbox .Default Einträge (Werte)
    in der Spalte Name: 1. Standard und 2. DispFileName
    in der Spalte Typ: 1. REG_SZ und 2. jREG_SZ
    in der Spalte Daten: 1. DefaultBeep und 2. @mmres.dll,-5824 als Werte.

    Moment. Wenn in der 2. Listbox EventLabels ausgewählt ist, dann steht in der 3. ja nicht nur .Default, sondern auch alle anderen Unterschlüssel von EventLabels. Und dazu willst du in der 3. Listbox noch die Werte von .Default anzeigen? Die der anderen Unterschlüssel aber nicht? Oder was?

    Gibt es eigentlich einen Grund, warum du Listboxen benutzen willst? Baumstruktur und Spalten klingt eher nach TreeView und ListView.



  • Hallo

    Nein, es sollen schon auch die anderen Unterschlüssel mit ihren Unter_Unterschlüsseln angezeigt werden. .Default war nur als Beispiel gedacht.

    Nächster Versuch diesmal mit Ordnern:

    Hauptordner = Spiel: In diesem Hauptordner "Spiel" sind vier verschieden Spiele enthalten. Sagen wir mal Schach, Dame, Mühle und Pong. Diese Spieleordner haben wiederrum Unterordner: z. B. Windows, DOS, Linux. Dann sollte die Ausgabe ungefähr so aussehen. Dabei gebe ich jetzt nur die Struktur des ersten Spieleordner an. Die anderen sollten im Aufbau dann auch so ausgegeben werden.

    Spiele
    --- Schach
    ---- = Vorspann ----> als Wert (Eintrag)
    ------Windows
    ------- = Schach.exe ----> als Wert (Eintrag)
    ------- = Textdatei ----> als Wert (Eintrag)
    ------DOS
    ------Linux

    Die Striche sollen das ganze hier nur etwas übersichtlicher machen.

    Das Problem ist, ich weiß ja nicht, wie viel Unterschlüssel der Einzelne Schlüssel in sich verbirgt, bis ich zu den eigentlichen Einträgen gelange. Ich habe da an einen rekursiven Aufruf gedacht, aber wie kann ich den realisieren, wenn ich nicht weiß wie oft er sich aufrufen muss? Und funktioniert das mit der Registry?

    Hoffentlich ist das Ganze jetzt etwas verständlicher.

    Gibt es denn hier überhaupt die Möglichkeit einen Screenshot ein zu stellen?

    Gruß
    champman



  • champman schrieb:

    Nein, es sollen schon auch die anderen Unterschlüssel mit ihren Unter_Unterschlüsseln angezeigt werden.

    Wenn du das visuell als Baum darstellen willst, warum dann dsa Gehampel mit den Listboxen, und nicht einfach ein TreeView?

    champman schrieb:

    Ich habe da an einen rekursiven Aufruf gedacht, aber wie kann ich den realisieren, wenn ich nicht weiß wie oft er sich aufrufen muss?

    Die rekursive Funktion ruft sich für jeden gefundenen Unterschlüssel selbst auf. Wenn keine Unterschlüssel mehr da sind, hört das von allein auf.


Anmelden zum Antworten