Entwickler-Ecke
Dateizugriff - Inhalt eines Registry-Schlüssels auslesen (AutoStart-Pfad)
Experience1986 - Do 29.01.04 16:11
Titel: Inhalt eines Registry-Schlüssels auslesen (AutoStart-Pfad)
hi,
ich will den Inhalt von HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run auselesen, also alle Windows Autostarts des aktuellen Benutzers, was brrauch ich dafür und was muss ich beachten?
´Hab bereits fleissig Gegoogelt und auch hier im Forum gesucht, aber ohne erfolg.
teebee - Do 29.01.04 16:32
Wenn man die Werte noch nicht kennt:
TRegistry.GetValueNames(StringListe);
Die OH ist Dein Freund!
Gruß, teebee
Delete - Do 29.01.04 16:39
| teebee hat folgendes geschrieben: |
| Die OH ist Dein Freund! |
OH? Oma Hiltrud? :mrgreen:
teebee - Do 29.01.04 16:54
| MathiasSimmack hat folgendes geschrieben: |
| teebee hat folgendes geschrieben: | | Die OH ist Dein Freund! |
OH? Oma Hiltrud? :mrgreen: |
Nee, meine Oma heisst Hertha...:wink:
Experience1986 - Do 29.01.04 17:05
thx, hab es.
Aber wie kann ich zum Teufel in ein ListView (3 Columns: 1=Checkbox; 2=Name; 3=Wert) einen eintrag adden (in name und Wert)????
teebee - Do 29.01.04 17:27
Delphi-Quelltext
1: 2: 3: 4: 5:
| Var li: TListItem; li := ListView1.Items.Add; li.Caption := 'Erste Spalte'; li.Checked := True; li.SubItems.Add('Untereintrag'); |
Gruß, teebee
Experience1986 - Do 29.01.04 17:32
Klasse, funzt auch
Hatte schon ne sau kompliziert Lösung angesteuert, das geht einfach und scheneller *G**
Experience1986 - Do 29.01.04 18:04
Muss nochmal nerven:
Ich hab nuna lees eigentlich wie ich es will, ich habe nun eine Abfrage der einträge in HKEY_LOCAL_MACHINE und in HKEY_CURRENT_USER, leider kommt von HKEY_CURRENT_USER kein Eintrag zurück (In meiner Registry ist aber auch dort einer, bin ich mir sicher)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50:
| procedure TFRM_Main.Button4Click(Sender: TObject); var i: integer; reg, reg2: TRegistry; sl, s2: TStrings; li:TListItem; begin reg := TRegistry.Create; reg2 := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE; reg2.RootKey := HKEY_CURRENT_USER;
reg.OpenKeyReadOnly('SOFTWARE\Microsoft\Windows\CurrentVersion\Run'); reg2.OpenKeyReadOnly('Software\Microsoft\Windows\CurrentVersion\Run');
sl := TStringList.Create; s2 := TStringList.Create;
reg.GetValueNames(sl);
for i := 0 to sl.Count -1 do begin li := ListView1.Items.Add; li.Caption := ''; li.Checked := True; li.SubItems.Add(sl.Strings[i]); li.SubItems.Add(reg.ReadString(sl.Strings[i])); end;
for i := 0 to s2.Count -1 do begin li := ListView1.Items.Add; li.Caption := ''; li.Checked := True; li.SubItems.Add(s2.Strings[i]); li.SubItems.Add(reg.ReadString(s2.Strings[i])); end;
sl.Free; s2.Free;
reg.CloseKey; reg2.CloseKey;
reg.Free; reg2.Free; end; |
Was kann also falsch sein?
teebee - Do 29.01.04 18:37
Wie wär's mitreg2.GetValueNames(s2);Das hast Du vergessen.
In der zweiten for-Schleife solltest Du auch lieber reg2 auslesen..
Gruß, teebee
Delete - Do 29.01.04 18:49
Ich frag mich, was das
| Zitat: |
Delphi-Quelltext 1: 2:
| reg := TRegistry.Create; reg2 := TRegistry.Create; | |
soll? Und ich sag´s ungern, aber
| Zitat: |
Delphi-Quelltext 1:
| reg.RootKey := HKEY_LOCAL_MACHINE; | |
kann unter NT-Systemen Probleme verursachen, wenn der Benutzer nicht ausreichende Berechtigungen zum Zugriff auf diesen Schlüssel hat. Der Grund liegt im
bei dem das Registry-Objekt standardmäßig mit vollen Zugriffsrechten erzeugt wird. Und diese Rechte haben unter NT/2000/XP meist nur Benutzer der Admin-Gruppe.
Entweder du nimmst also
Delphi-Quelltext
1:
| TRegistry.Create(KEY_READ); |
was im Fall des Aus
lesens ohnehin zu empfehlen ist, oder du klammerst beim Start mit eingeschränkten Benutzerrechten den HKLM-Schlüssel aus, falls der User den Autostart auch
bearbeiten können soll. Nur der Admin bzw. User dieser Gruppe sollten neben dem persönlichen Autostart auch den maschinenbezogenen Autostart bearbeiten dürfen.
Experience1986 - Do 29.01.04 21:55
Ok, das werd ich mir dann auf jeden fall noch angugen.
(Programmiere zur Zeit nur für mich, zur Übung.)
Nun wollt ich noch was wissen, was aber eher in den VCL Bereich geht, ich hoffe ihr antwortet mir hier trotzdem.
Wie kann ich bei einem TListView herausfinden, welcher "Eintrag" gerade aktiviert ist?
Ich habe bereits per OnSelectItem versuch die Variable "Item" (Wird von dem Ereignis erstellt) so einzusetzen, damit ich zum Beispiel den "Checked" Status des aktuellen Items abfragen kann:
Delphi-Quelltext
1: 2: 3: 4:
| if (ListView1.Items[Items].checked) then begin ... end; |
Aber das funktioniert nicht, da Item von Datentyp TListItem ist und ich ihn nicht so einfach abfragen kann, bin ich überhaupt auf dem richtigen weg?
Wenn ja, dann sagt mir bitte wie ich TListItem's abfragen kann.
teebee - Do 29.01.04 22:25
If ListView1.SelCount>0 Then If ListView1.Selected.Checked Then...Du solltest echt mal 'nen gründlichen Blick in die OH werfen. Nein, ich meine keine Oma sondern die Delphi-Hilfe....
Gruß, teebee
Experience1986 - Do 29.01.04 23:02
THX, in de OH kann man ja manchmal innerhalb von Sekunden was finden, aber andererseits dauert es manchmal stunden....
Immerhin muss man ja wissen nach was man sucht, und dass ist nicht immer gewährleistet.
teebee - Fr 30.01.04 09:13
| Experience1986 hat folgendes geschrieben: |
| Immerhin muss man ja wissen nach was man sucht, und dass ist nicht immer gewährleistet. |
Naja, immerhin weisst Du, dass es um TListView geht. Unter Eigenschaften/Methoden findest Du, was Du brauchst. Du kannst auch alle Eigenschaften/Methoden (von TListView und seinen Unterklassen meine ich...) nacheinander durchgehen, und Dir die Beschreibungen zu Gemüte führen, da findet man so allerhand.
Nix für ungut, soll eine Anregung für die Zukunft sein, schließlich hättest Du eine Lösung so viel schneller gefunden als hier im Forum.
Gruß, teebee
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!