Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi registry (https://www.delphipraxis.net/5113-registry.html)

dde 24. Mai 2003 13:07


registry
 
wieso funktioniert das nicht:

Delphi-Quellcode:
uses registry...

procedure TForm1.FormCreate(Sender: TObject);
var Reg : TRegistry;
begin
Reg := TRegistry.Create;
Reg.RootKey:=HKEY_CURRENT_USER;
Reg.OpenKey ('Software\Microsoft\Internet Explorer\TypedURLs', FALSE);
Reg.WriteString ('url1', '');
Reg.WriteString ('url2', '');
Reg.WriteString ('url3', '');
Reg.WriteString ('url4', '');
Reg.WriteString ('url5', '');
Reg.WriteString ('url6', '');
Reg.WriteString ('url7', '');
Reg.WriteString ('url8', '');
Reg.WriteString ('url9', '');
Reg.WriteString ('url10', '');
Reg.WriteString ('url11', '');
Reg.WriteString ('url12', '');
Reg.WriteString ('url13', '');
Reg.WriteString ('url14', '');
Reg.WriteString ('url15', '');
Reg.WriteString ('url16', '');
Reg.WriteString ('url17', '');
Reg.WriteString ('url18', '');
Reg.WriteString ('url19', '');
Reg.WriteString ('url20', '');
Reg.WriteString ('url21', '');
Reg.WriteString ('url22', '');
Reg.WriteString ('url23', '');
Reg.WriteString ('url24', '');
Reg.WriteString ('url25', '');
Reg.Destroy;
Form1.Close;
end;

Daniel B 24. Mai 2003 13:31

Hallo,

CloseKey nicht vergessen, ausserdem try..except benutzen. ;)
Könnte schief gehen. :)

Grüsse, Daniel :hi:

dde 24. Mai 2003 13:42

funktioniert auch nicht!

JoelH 24. Mai 2003 13:46

hmm,
 
vielleicht ein Rechteproblem ? Darf dein User denn überhaupt in der Registry rumfuchteln ?

PS: SpinEdit Problem gelöst ?

Daniel B 24. Mai 2003 13:48

Re: hmm,
 
Hallo,
Zitat:

Zitat von JoelH
vielleicht ein Rechteproblem ? Darf dein User denn überhaupt in der Registry rumfuchteln ?

Wenn Er sich vorher die Rechte holt, dann kann Er da drin "rumfuchteln". ;) //wäre eine möglichkeit das Er das nicht getan hat, kommt drauf an welches System

Grüsse, Daniel :hi:

dde 24. Mai 2003 14:00

Ich glaube nicht, dass es an den User-Rechten mangelt! Sind Administratorrechte nicht ausreichend??? Naja in anderen Delphiprogrammen klappt es (der gleiche source) nur bei mir nicht :-(!!

@joelH: Ja das Problem ist gelöst und abgehackt!

dde 24. Mai 2003 14:03

Habt den Source mal in einen Button gepackt: Dort klappt alles Prima!

Wie krieg ich das aber hin, wenn das Programm startet, das die Registryeinträge gelöscht werden und anschließend das Programm geschlossen wird, und wenn es geht ohne eine Programmoberfläche zu sehen!

EDIT: Mit ShowMessage('gelöscht')!! Form1.onClose??

MathiasSimmack 24. Mai 2003 14:12

Indem du den Code im DPR-Quelltext unterbringst und auf alle externen Units verzichtest. Also auch auf alle Formulare. Eine MessageBox kannst du auch mit gleichnamigen Befehl aus der Windows-Unit anzeigen lassen.
Mit Registry-Unit dürfte das Programm, das ja wohl nur die URLs des IE löschen soll, dann etwa 60k groß sein.

btw:
Delphi-Quellcode:
Reg.Destroy;
sollte besser
Delphi-Quellcode:
Reg.Free;
heißen. Den Tipp mit try/finally/end solltest du auch nicht in den Wind schlagen, denn u.U. kann es auf einem anderen Rechner (an dem du evtl. arbeitest, bzw. jemand, der dein Programm benutzt) Rechteprobleme geben. Zwar bei HKEY_CURRENT_USER eher unwahrscheinlich, aber warum die Möglichkeit riskieren wenn man es vermeiden kann?

Zu guter Letzt: würde es nicht reichen, einfache alle "url"-Einträge in dem Schlüssel zu entfernen? Die Registry-Unit bietet passende Funktionen zum Lesen aller Werte und Unterschlüssel in einem Schlüssel.
Aber selbst wenn du bei deiner Methode bleiben willst, wäre eine for-Schleife wohl günstiger, kürzer und eleganter:
Delphi-Quellcode:
for i := 1 to 25 do
  Reg.WriteString('url' + inttostr(i),'');

Daniel B 24. Mai 2003 14:15

Hallo,
Zitat:

Zitat von MathiasSimmack
Aber selbst wenn du bei deiner Methode bleiben willst, wäre eine for-Schleife wohl günstiger, kürzer und eleganter:
Delphi-Quellcode:
for i := 1 to 25 do
  Reg.WriteString('url' + inttostr(i),'');

Das wäre entwas besser für Ihn:
Delphi-Quellcode:
for i := 1 to 25 do
  Reg.WriteString('url1' + inttostr(i),'');
Grüsse, Daniel :hi:

Christian Seehase 24. Mai 2003 14:17

Moin DDE,

die Struktur sollte besser so aussehen:

Delphi-Quellcode:
Reg := TRegistry.Create;
try
  // Mach was mit dem Objekt
  if Reg.OpenKey(...) then
  begin
    try
      // Mach was mit dem geöffneten Key
    finally
      Reg.CloseKey;
    end;
  end;
finally
  FreeAndNil(Reg);
  // oder
  Reg.Free; // Nicht Destroy
end;
Warum das bei Dir im OnCreate nicht funktioniert ist mir allerdings auch nicht klar. Prüf' doch mal nach dem OpenKey, bzw. WriteString, ob das System nicht einen Fehler gemeldet hat (z.B. mit ShowErrorMessage(SysErrorMessage(GetLastError)); )

Es kann übrigens durchaus sein, dass Administratorrechte nicht genügen. Manche Keys sind auch für den Admin gesperrt. Ein Admin hat dann zwar das Recht sich die Berechtigungen zu geben, dies ist dann aber nicht die Standardeinstellung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:11 Uhr.
Seite 1 von 3  1 23      

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