Registry Key auslesen und als Pfad verwenden
-
Hi leute, hab folgendes Problem:
String driverkey; TRegistry *ati = new TRegistry; ati->RootKey = HKEY_LOCAL_MACHINE; ati->OpenKey("System" ,false); ati->OpenKey("CurrentControlSet",false); ati->OpenKey("Services",false); value = ati->KeyExists("ati2mtag"); if (value == false) { RadioButton14->Enabled = false; . .. ..... delete ati; } else { ati->OpenKey("ati2mtag",false); ati->OpenKey("Enum",false); driverkey = ati->ReadString("0"); ati->RootKey = HKEY_LOCAL_MACHINE; ati->OpenKey("System" ,false); ati->OpenKey("CurrentControlSet",false); ati->OpenKey("Enum",false); ati->OpenKey(driverkey,false); ati->OpenKey("Device Parameters",false); driverkey = ati->ReadString("VideoID"); delete ati; }
Warum kann ich keine Keys im Format "bla\bla\blava\" als Registrypfad verwenden ??
Ixch möchte somit immer dynamisch den aktuell verwendeten Grafiktreiber (oder eher gesagt sein Key) holen und verwenden.Mit driverkey = ati->ReadString("VideoID") möchte ich mir den endgültigen
Schlüssel( {12&455.............} ) holen und verwenden.Verwendet wird er so:
TRegistry *mb = new TRegistry; mb->RootKey = HKEY_LOCAL_MACHINE; mb->OpenKey("System" ,false); mb->OpenKey("CurrentControlSet",false); mb->OpenKey("Control",false); mb->OpenKey("Video",false); mb->OpenKey(driverkey,false); mb->OpenKey("0000",false); mb->OpenKey("OpenGL",false); mb->WriteInteger("OGLWaitVerticalSync",0x00000003); delete mb;
aber warum funktioniert das so nicht ?
Bin euch so dankbar !
-
Zero01 schrieb:
Warum kann ich keine Keys im Format "bla\bla\blava\" als Registrypfad verwenden ??
Wer sagt, dass du das nicht kannst?
-
Jansen schrieb:
Wer sagt, dass du das nicht kannst?
Doch ,habs eben selbst gemerkt, Danke. Aber es funktioniert immer noch nicht da ab
Local Machine
System
CurrentControlSet
EnumEnum schluss ist und die IntegerWerte dann in den zu letzt aufrufbaren Key einträgt.
String driverkey,regpath; TRegistry *ati = new TRegistry; ati->RootKey = HKEY_LOCAL_MACHINE; ati->OpenKey("System" ,false); ati->OpenKey("CurrentControlSet",false); ati->OpenKey("Services",false); value = ati->KeyExists("ati2mtag"); //Überprüfen ob Catalyst installiert if (value == false) { RadioButton14->Enabled = false; Button6->Enabled = false; delete ati; } else { ati->OpenKey("ati2mtag",false); ati->OpenKey("Enum",false); regpath = ati->ReadString("0"); // Regpath im Format: bla\bla\bla ati->RootKey = HKEY_LOCAL_MACHINE; ati->OpenKey("System\\CurrentControlSet" ,false); //Funktioniert ! ati->OpenKey("Enum",false); ati->OpenKey(regpath,false);// ab hier ist schluss mit lustig ! habe Regpath in eine Datei schreiben lassen und dort wird der Pfad ordentlich angezeigt. ati->OpenKey("Device Parameters",false); driverkey = ati->ReadString("VideoID"); delete ati; } Driverkey wird wie folgt verwendet: TRegistry *mb = new TRegistry; mb->RootKey = HKEY_LOCAL_MACHINE; mb->OpenKey("System" ,false); mb->OpenKey("CurrentControlSet",false); mb->OpenKey("Control",false); mb->OpenKey("Video",false); mb->OpenKey(driverkey,false); // Hier steckt der Schlüssel des Grafiktreibers in der Registry. mb->OpenKey("0000",false); mb->OpenKey("OpenGL",false);
Bitte helft mir, Danke !
-
Ich hab zum Pfad aus der Registry lesen immer diesen Code verwendet:
TRegistry *registry = new TRegistry; registry->RootKey = HKEY_LOCAL_MACHINE; if (registry->OpenKeyReadOnly("SOFTWARE\\Borland\\Package Collection Editor\\Installed Programs\\C++Builder")) { String path = registry->ReadString("Path")+"Bin\\bcb.exe"; ::WinExec (path.c_str() ,0); } else { Application->MessageBoxA("Borland C++ Builder 6.0 Enterprise Edition Trial wurde nicht (oder inkorrekt) auf Ihrem PC installiert.","Fehler",0+16); }
-
in Regpath steht das drin:
PCI\VEN_1002&DEV_4E48&SUBSYS_00021002&REV_00\4&102ac5bc&0&00F0
-
String driverkey = ""; String key1 = "System\\CurrentControlSet\\Services\\ati2mtag\\Enum"; String key2 = "System\\CurrentControlSet\\Enum\\"; TRegistry *reg = new TRegistry(); reg->RootKey = HKEY_LOCAL_MACHINE; if (reg->OpenKey(key1, false)) { key2 += reg->ReadString("0") + "\\Device Parameters"; reg->CloseKey(); if (reg->OpenKey(key2, false)) driverkey = reg->ReadString("VideoID"); } delete reg;
-
Jansen du bist ein Schatz !
ich bin dir was schuldigEndlich werden die Catalyst Treiber dynamisch ermittelt.
-
Ich hoffe nur, du kopierst das nicht einfach, sondern analysierst auch, was der Code macht und wo die Unterschiede zu deinem Ansatz sind.
-
natürlich hab ich den code analysiert da ich ja auch wissen wollte wo der haken sitzt
-
mb->WriteInteger("OGLFullSceneAAScale",0x00000006);
mb->WriteInteger("OGLSmoothPref",0x00000000);
mb->WriteInteger("OGLAliasSlider",0x00000003);
mb->CloseKey();
delete mb;ist das sinnvoll 3 Keys hintereinander zu schreiben ?
-
Wieso sollte das nicht sinvoll sein?
Du kannst soweit ich weis soviele Keys hintereinander schreiben wie du willst.
-
Du kannst WriteInteger natürlich auch in einer Schleife aufrufen.
Aber was hat das noch mit dem Thema des Threads zu tun?
Bitte die Faustregel beachten: ein Thema pro Thread, ein Thread pro Thema. Danke!
-
Alles kar @ Jansen, ollte nicht wegen jedem bisschen einen neuen Post reinklatschen da es ja auch unter anderem zum Thema gehört
Zum Thema: dachte das es evtl Probleme mit dem Zeiger gibt.