Registry allgemeine Frage

Antworten
snowman
Beiträge: 9
Registriert: Fr 19. Aug 2011, 08:08
OS, Lazarus, FPC: Windows XP/7 (Lazarus 0.9.30 FPC 2.2.z)
CPU-Target: 32/64Bit

Registry allgemeine Frage

Beitrag von snowman »

Hallo,

wenn ich für ein Programm ein paar Daten in eine Konfigurationsdatei schreiben möchte kann ich ja mit "GetAppConfigDir(True)" den Dateinamen incl. Verzeichnis ermitteln. Jetzt zu meiner Frage wenn ich diese Daten aber in die Registry schreiben möchte gibt es da eine vergleichbare Funktion?
ciao
Martin

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: Registry allgemeine Frage

Beitrag von DiBo33 »

Besteht keine Notwendigkeit, da der Pfad in der Registry nicht durch den User variable ist.

Der Pfad HKEY_CURRENT_USER weist immer auf den aktuellen User.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Registry allgemeine Frage

Beitrag von Christian »

Ich glaub er hat nur nach der benutzung der registry gefragt.

Dabei muss dir klar sein das es eine registry nur unter windows gibt.
Und es gibt eine unit registry, in der zugriffsfunktinen dazu enthalten sind. Man findet bestimmt auch sehr schnell ein delphi tutorial zu dem thema.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

snowman
Beiträge: 9
Registriert: Fr 19. Aug 2011, 08:08
OS, Lazarus, FPC: Windows XP/7 (Lazarus 0.9.30 FPC 2.2.z)
CPU-Target: 32/64Bit

Re: Registry allgemeine Frage

Beitrag von snowman »

Hallo,

Hier:
http://www.delphi-treff.de/tutorials/vc ... speichert/
wird ja beschrieben welches Schlüssel (Verzeichnis) man nehmen soll. Aber was ich meine, für die INI-Variante liefert mir die Funktion "GetAppConfigDir(True)" das Verzeichnis gibt es für die Registry eine Funtion, die mir diesen Schnlüssen "HKEY_LOCAL_MACHINE\Software\<Firma>\<Produkt>\<Version>" natürlich mit den entsprechenden Werten liefert?
ciao
Martin

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Registry allgemeine Frage

Beitrag von MAC »

ich glaub,
da musst du mit der unit regestry erst den schlussen
HKEY_LOCAL_MACHINE nehmen
Dann von ihm sein Child "Software" nehmen
Dann davon "<Firma>"
usw...
vom letzten kannst du dann die werte lesen.
Aber dazu gibt es auch Delphi tutorials geben...

Code: Alles auswählen

Signatur := nil;

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: Registry allgemeine Frage

Beitrag von DiBo33 »

gibt es für die Registry eine Funtion, die mir diesen Schnlüssen "HKEY_LOCAL_MACHINE\Software\<Firma>\<Produkt>\<Version>" natürlich mit den entsprechenden Werten liefert?


Nein, den musst du dir selbst zusammensetzen.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Registry allgemeine Frage

Beitrag von Socke »

Die für Anwendungen interessanten Hive Keys (kurz HKEY, Wurzelverzeichnisse in der Registry) sind HKEY_CURRENT_USER und HKEY_LOCAL_MACHINE. Was den Pfad /Software/ angeht, sind beide gleich aufgebaut, jedoch ist HKEY_CURRENT_USER Einstellungen nur für den aktuellen Benutzer und HKEY_LOCAL_MACHINE für den gesamten Computer. Der Zugriff auf Letzteren benötigt unter Umständen (neue Windows-Versionen) Administratorrechte. Überlege dir daher genau, ob deine Anwendung dort Einstellungen ablegen muss, oder ob dies in einem Installer ausreicht (lesender Zugriff benötigt keine besonderen Rechte).

Unter Linux wird der Zugriff auf die Registry in Dateien umgeleitet, sofern du die entsprechende Klasse (TRegistry) und nicht direkt die Windows-API verwendest. Der Quelltext kann also dort problemlos übersetzt und eingesetzt werden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

ErnstVolker
Beiträge: 326
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Registry allgemeine Frage

Beitrag von ErnstVolker »

Hallo,

ich schließe mich mit meiner Frage mal diesem Thread an.

Kann ich über die Registry herausbekommen welches Programm gerade aktiv ist?

Meine Programme haben einen Bezug über die COM-Schnittstelle zu DesignCAD. Um sich mit dem Programm verbinden zu können muß einfach in eine kleine Textdatei die Versionsnummer eingetragen werden. Das macht man einmal und gut ist.

Code: Alles auswählen

procedure VerbindeDcad();
var Version: String; VersNr: Integer;
  Datei: Text;
begin
  try
     assign(Datei, 'DCVersion.txt');
     reset(Datei);
     read(Datei, VersNr);
     close(Datei);
 
     Version := Sysutils.Trim('DesignCAD_24_0_TLB.Application.'+IntToStr(VersNr));
     DcApp := GetActiveOleObject(Version) as IDcadApp;
     DcDocs := DcApp.Documents;
     DcDoc := DcApp.ActiveDocument;
     DcPts := DcDoc.CmdPoints;
     DcCurve := DcDoc.Curve;
     DcLine := DcDoc.Line;
     DcLayers:= DcDoc.Layers;
     DcFile:= DcDoc.File_;
     DcSel:= DcDoc.Selection;
  except
   on e: Exception do begin
       //ShowMessage('Programmstart ohne DesignCAD');
       OleFehler:=True;
       Exit;
   end;
  end;
end;


Alternativ könnte man die Versionsnummer aus der Registry auslesen. Jetzt gibt es aber Nutzer die haben verschiedene Versionen von DesignCAD installiert und auch noch gleichzeitig geöffnet. Meinetwegen die Versionen 23, 24, 25. Dann muß man sich entscheiden welche Nummer in die Textdatei soll.

Die Auswahl soll im Hintergrund vorgenommen werden. Der Nutzer soll davon nix mitbekommen. Das "Makro", so nenne ich denn dann mal mein Programm, soll sich mit der Programmversion verbinden aus der heraus es gestartet wurde.
Die Makros werden in Toolboxen abgelegt. Die Tooolboxen sind an den Rändern der Zeichenfläche angeordnet. D.h. der Klick auf das Toolbox-Icon zum Start des Makros bedingt, dass ein Zeichenfenster geöffnet ist.

Kann man aus der Registry ermitteln welche Programmversion geöffnet ist um im zweiten Schritt die Versionsnummer auszulesen und an GetActiveOleObject zu übergeben?

Ich habe hier http://www.gekko-software.nl/Delphi/art13.htm was ähnliches gefunden. Geht es einfacher?

Vielen Dank

Volker

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Registry allgemeine Frage

Beitrag von af0815 »

Du fragst in einem 9 Jahre alten Thread, es wäre besser gewesen einen neuen Thread zu beginnen.

Die Registry hat keine Informationen wer gerade aktiv ist. Also entweder du findest heraus wer dein Parent ist oder fragst das System welche Prozesse/Programme aktiv sind und wertest diese Infos aus.

Edit:
Da gibt es Beispiel für Windows https://www.delphipraxis.net/166644-pid ... tteln.html das lässt sich sicher auf fpc umschreiben.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten