Autor Beitrag
mb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 185



BeitragVerfasst: Mo 26.01.04 20:22 
Hi!

Stand jemand von Euch schon mal vor der schier unlösbaren Aufgabe einen Registry-Zweig (Key) umzubenennen?

also z.B. von \Software\MyCompany\MyProg\
nach \Software\MyCompany\MyNewProgName\

Irgendwie will es nicht. Und Delphi stellt in der Registry-Unit dafür ja auch nix spezielles zur Verfügung... (Außer RenameValue, aber wie der Name schon sagt....) ??

Ideen?

_________________
Gruß,
MB
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 26.01.04 20:40 
Kopieren und den alten löschen. Hat Mathias in seinem Kapitel über die Registry in meinen "Win32API Tutorials für Delphi" (www.luckie-online.de...rials/win32apituts/) auch so gemacht.
mb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 185



BeitragVerfasst: Mo 26.01.04 23:08 
Ok, danke... Das ist natürlich eine Lösung. (Auch wenn ich mich Frage, warum die Jungs von M$ so eine Funktion entweder nicht implementieren oder nicht dokumentieren -- das könnte einen ja beinahe ärgern :evil: )

_________________
Gruß,
MB
mb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 185



BeitragVerfasst: Di 27.01.04 00:04 
Ok.... Hihi... :-)

Ich hab's.

Also M$ scheint wirklich nix an Funktion zu haben, zumindest weiß auch Borland nichts davon. Aber - warum hab ich sie nur vorher nicht entdeckt - Borland liefert in der Unit Registry die folgende Funktion, die im Grunde ähnlich wie im Tutorial arbeitet:
(nur hat man es mit der etwas leichter *g*)

ausblenden Delphi-Quelltext
1:
procedure MoveKey(const OldName, NewName: String; Delete: Boolean);					


Delete gibt dann - wie man leicht vermutet - an, ob ein Copy- oder ein Move-Vorgang ausgeführt werden soll...

Also:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var Reg: TRegístry;
// [...]
begin
  // [...]
  Reg := TRegistry.Create;
  // [...]
  try
    Reg.MoveKey('Software\MyCompany\Proxxxx''\Software\MyCompany\MyProg\', True);
  finally
    Reg.Free;
  end;
  // [...]
end;
// [...]

_________________
Gruß,
MB
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 27.01.04 09:30 
@mb: Das PSDK erwähnt die Funktion SHCopyKey, die allerdings laut Anforderungen min. den IE5 voraussetzt. Also habe ich (wie Luckie schon ansprach) mehr oder weniger das gleiche machen müssen wie Borland: die Schlüssel der Reihe nach ermitteln und samt Werten kopieren. ;)

Das Problem bei dem von Luckie erwähnten Tutorial ist eben, dass wir dort ja alles via API machen. Und wenn du mal an die Leute denkst, die ein nonVCL-Tool schreiben (wollen), dann wollen die ja wissen, welche Funktionen man auf der API-Seite für die Registry hat. :)
mb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 185



BeitragVerfasst: Di 27.01.04 17:02 
MathiasSimmack hat folgendes geschrieben:
Das Problem bei dem von Luckie erwähnten Tutorial ist eben, dass wir dort ja alles via API machen. Und wenn du mal an die Leute denkst, die ein nonVCL-Tool schreiben (wollen), dann wollen die ja wissen, welche Funktionen man auf der API-Seite für die Registry hat.


Das ist schon klar ;-) Ich schreibe selbst teilweise soche Dinger. Aber in diesem Fall ging es mir gauptsächlich erst mal um ne Lösung. Und ich dachte erst, es müsse eine API-Funktion dafür geben ...

Nun ja, ist ja gelöst! :-)

_________________
Gruß,
MB