Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Exakter Registry Pfad auf Button Klick öffnen?? (https://www.delphipraxis.net/7861-exakter-registry-pfad-auf-button-klick-oeffnen.html)

SunnyDay2003 23. Aug 2003 11:29


Exakter Registry Pfad auf Button Klick öffnen??
 
Hallo Leute,

ich hätte eine Frage, wie kann ich einen Registry Pfad
exakt öffnen, ich habe ein paar spärliche versuche dieser
Art versucht >>>
Delphi-Quellcode:
 
procedure TForm1.Button1Click(Sender: TObject);
Var reg:TRegistry;
begin
ShellExecute (Handle, 'open', 'c:\Windows\Regedit.exe', nil, nil, SW_SHOWNORMAL);
begin
reg:=TRegistry.Create;
reg.RootKey:=HKEY_Local_Machine;
reg.OpenKey ('HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\AppPaths', true); end; end;
Aber hierbei öffnet sich lediglich die Registry ohne den exakten Pfad
bzw. ohne die exakte Pfadangabe.

[edit=Luckie]Delphi-Tags hinzugefügt Mfg, Luckie[/edit]

MSCH 23. Aug 2003 11:58

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Shellexecute, regedit.exe und tRegistry haben nichts gemeinsam !!!
(ausser das RegEdit und tRegistry auf ein und dieselbe Datei zugreifen).

grez
msch

Luckie 23. Aug 2003 12:00

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Wie sollte es auch funktionieren?

Nach dem du mit Shellexecute den Editor geöffnet hast ist doch schon alles vorbei. Desweiteren wie soll der Editor mit dem TRegistry Objekt von Delphi was anfangen? Wenn überhaupt müßtest du den Pfad als Parameter bei Shellexecute mit übergeben. Alledings weiß ich nicht, ob man der Regedit.exe überhaupt Parameter übergeben kann, bzw. wenn ja, wie diese auszusehen haben. meine Versuche Regedit.exe mit Parametern zu öffnen, sind alle fehlgeschlagen.

Daniel B 23. Aug 2003 12:08

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Hallo und herzlich Willkommen im Forum!
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Reg: TRegistry;
  sTemp: String;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    Reg.OpenKeyReadOnly('Software\Microsoft\Windows\CurrentVersion\AppPaths\NameDeinerAnwendung');
    sTemp := Reg.ReadString('Path');
    Reg.CloseKey;
  finally
    FreeAndNil(Reg);
  end; //try
  ShowMessage(sTemp);
end;
Hiermit liest man den Pfad der "NameMeinerAnwendung", welche Du da noch hast, ist Dein Problem und musst Du selbst im Code anpassen, aber das hier funktioniert schonmal. Darauf kannst Du jetzt aufbauen. ;)

PS: Ich verschiebe das mal nach WinAPI.

Luckie 23. Aug 2003 12:13

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Darauf kann er wohl nicht aufbauen, da er den Pfad im Registry-Editor von Windows geöffnet haben will?

Daniel B 23. Aug 2003 12:14

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Ich meine dass das ShellExecute da nichts veroren hat und Er es aus "unwissenheit" hingeschreibselt hat. Aber warten wir mal ab bis Er sich wieder meldet.

Christian Seehase 23. Aug 2003 12:23

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Moin Zusammen,

ich denke mal, dass es darum geht zu einem bestimmten Key in der Registry zu navigieren, wie es beim Doppelklick auf einen Key in RegMon geschieht.

SunnyDay2003 23. Aug 2003 14:25

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Erstmal danke für eure Bemühungen,

ich habe den Source ausprobiert, er führt zu einem Showmessage mit
leerem Inhalt.

Mir ist klar, dass mein Code Experiment ganz oben dargestellt nicht funktionieren konnte es sollte vor allem veranschaulichen, was ich gerne dargestellt hätte und das ist genau der Punkt, wie der Super Moderator C.Seehase sagt, so wie bei Regmon z.B., es gibt aber noch mehr Programme die sowas können, sowas muß es doch auch in Delphi geben oder?

Ein direkter Einsprungspunkt innerhalb der Registry. ALso ich kenne ca. 3 Programme die das können, das muß doch auch in Delphi gehen??

Wäre toll, wenn jemand diese Nuss knacken könnte.

Einfach Button oder Label Klick und dann Sprung in die Registry zum
Beispiel zu Pfad HKLM\Software\Windows\CurrentVersion\App Paths\Wordpad.exe

Christian Seehase 23. Aug 2003 15:14

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Moin SunnyDay,

Zitat:

Zitat von SunnyDay2003
...das muß doch auch in Delphi gehen??

nicht unbedingt, denn bei RegMon und FileMon wird mit Treibern gearbeitet, ob dieser dann allerdings für den genannten Zugriff auf die Registry zuständig ist weiss ich nicht.
Treiber kannst Du mit Delphi aber, genaugenommen, nicht erstellen (wenn überhaupt nur mit sehr grossem Aufwand, da der Compiler nicht darauf eingerichtet ist, schliesslich ist Delphi ja ein RAD Tool).

Ggf. kannst Du Dir ja mal die Sourcen von RegMon durchsehen. Vielleicht gibt's da ja Anhaltspunkte.

sakura 23. Aug 2003 15:18

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Im Notfall erschiesse die Registry doch mit ihren eigenen Waffen. Der Registry-Editor öffnet sich ja immer an der zu letzt genutzten Stelle. Diese ist, wie sollte es auch anders sein, in der Registry gesichert. Überschreibe den Wert mit dem gewünschten Wert und öffne den Registry-Editor im Anschluss ;-)

Der Pfad wäre: HKCU\Software\Microsoft\Windows\CurrentVersion\App lets\RegEdit

Wert: LastKey (Typ: String)

...:cat:...

Daniel B 23. Aug 2003 16:36

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Zitat:

Zitat von sakura
Im Notfall erschiesse die Registry doch mit ihren eigenen Waffen. Der Registry-Editor öffnet sich ja immer an der zu letzt genutzten Stelle. Diese ist, wie sollte es auch anders sein, in der Registry gesichert.

:rofl: :lol:

Niko 23. Aug 2003 18:06

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Zitat:

Zitat von sakura
Im Notfall erschiesse die Registry doch mit ihren eigenen Waffen. Der Registry-Editor öffnet sich ja immer an der zu letzt genutzten Stelle.

Unter Windows 98 funktioniert das nicht.

Aber vielleicht wäre es ja auch eine Möglichkeit, den Inhalt des gewünschten Schlüssels in einer ListView anzeigen zu lassen, statt regedit zu benutzen.

Chewie 23. Aug 2003 18:08

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Im Notfall: Du kannst direkt im Treeview des Regedit das entsprechende Item auswählen. Da ein Treeview aber ein Common Control ist, geht das nicht so leicht.

sakura 23. Aug 2003 19:54

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Zitat:

Zitat von Niko
Unter Windows 98 funktioniert das nicht.

Stimmt, das gibt es ja auch noch :roll:

...:cat:...

Assarbad 23. Aug 2003 20:24

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Das Prinzip von RegMon ist "relativ" einfach.

Man nehme ein beliebiges Programm und starte (vorzugsweise mit ShellExecuteEx oder CreateProcess) den REGEDIT. Danach hole man sich das (Haupt)Fenster dieser Instanz (REGEDIT hat normalerweise nur eine Instanz!). Hast du dieses Fenster, suchst du bei den Childs das TreeView ... das schließt du dann komplett (SendMessage) und öffnest danach in Einzelschritten den Pfad, den du willst. Wie du siehst, das Prinzip ist einfach, die Umsetzung nicht mehr ganz ;)

SunnyDay2003 24. Aug 2003 08:29

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
@Assarbad wäre gut wenn du ein Source Beispiel demonstrieren könntest,
in welcher Form auch immer..
@Sakura: ja die Idee ist zwar witzig, ich möchte aber zum Beispiel 10 Buttons machen, mit denen ich 10 verschiedene Registry Sprünge erleben kann.
@Seehase: Habe keinen Source gefunden von Regmon.
------------------------------------------------------------------------
Übrigens ist das Rätsel gelöst :-)
Es ist sogar recht einfach.
Wäre ja schlimm, wenn das in Delphi nicht möglich gewesen wäre.
:-)

toms 24. Aug 2003 08:48

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Zitat:

wäre gut wenn du ein Source Beispiel demonstrieren könntest,
in welcher Form auch immer..
hier.
gibt's was.

SunnyDay2003 24. Aug 2003 08:53

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Ja genau, danke toms, hab es auch schon entdeckt!

Somit wissen nun alle bescheid! Hätte es sonst auch noch gepostet!

Super!

toms 24. Aug 2003 09:00

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Es gäbe da noch eine andere Möglichkeit:

Den Regedit-TreeView mit APIs wie TreeView_GetItem() usw.
zu durchlaufen und wenn der gewünschte Schlüssel gefunden wurde
ihn aufklappen und markieren.

Chewie 24. Aug 2003 10:10

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Dazu musst aber erstmal in den Adressbbereich des Regedit-Prozesses kommen, denn die Common Controls können nur aus ihrem jeweiligen Adressbereich gesteuert werden.

toms 24. Aug 2003 10:22

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Zitat:

Dazu musst aber erstmal in den Adressbbereich des Regedit-Prozesses kommen
Das dürfte nicht die Herausforderung sein, denn du könntest z.B
den TProcessMemMgr von Michael Winter verwenden.

Christian Seehase 24. Aug 2003 11:59

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Moin toms,

das müsste das gleiche Prinzip sein wie hier

LuckieDIPS

nur eben für Tree- statt Listview.

Assarbad 24. Aug 2003 12:01

Re: Exakter Registry Pfad auf Button Klick öffnen??
 
Hehe ... der Source ist schonganz nett ;) ... aber ich würde es auch machen, wie toms es vorschlug. Schon von daher, weil der andere Code (bei SDC) leicht-brüchig ist. Aber ist schonmal nett ein Spielerchen so zu sehen ;) ... und wahrscheinlich wäre alles andere auch Overkill.

Weil danach gefragt wurde ... ich hatte mal Code für jemand anderen geschrieben, der Nodes aus nem Treeview ausliest. Ist aber glaub ich nicht mehr ganz vollständig:
http://assarbad.net/stuff/!export/treeviewtext.rar

Abgewandelt kann man das auch benutzen um Steuerbefehle abzusetzen.
Übrigens, Chewie, ich sehe keine großen Probleme, da man das Treeview ja nicht verändern will, sondern nur öffnen will. Liest man also die Handles (HITEM) der Nodes aus, sollte alles mit einem entsprechenden TVM_EXPAND gegessen sein. Ganz ohne Lesen im fremden Prozess kommt man dann natürlich trotzdem nicht aus ;)

@Christian: oder eben NicoDIPS ... das Original ;) ... Luckie hatte ja gesagt, daß der Kern eh von Nico stammt. [Autor: Nico Bendlin!]


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz