![]() |
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; |
Hallo,
CloseKey nicht vergessen, ausserdem try..except benutzen. ;) Könnte schief gehen. :) Grüsse, Daniel :hi: |
funktioniert auch nicht!
|
hmm,
vielleicht ein Rechteproblem ? Darf dein User denn überhaupt in der Registry rumfuchteln ?
PS: SpinEdit Problem gelöst ? |
Re: hmm,
Hallo,
Zitat:
Grüsse, Daniel :hi: |
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! |
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?? |
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:
sollte besser
Reg.Destroy;
Delphi-Quellcode:
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?
Reg.Free;
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),''); |
Hallo,
Zitat:
Delphi-Quellcode:
Grüsse, Daniel :hi:
for i := 1 to 25 do
Reg.WriteString('url1' + inttostr(i),''); |
Moin DDE,
die Struktur sollte besser so aussehen:
Delphi-Quellcode:
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)); )
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; 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. |
Zitat:
|
Zitat:
Das wirds wohl sein. Ich sollte nicht mehr mit der Sonnenbrille am PC sitzen. :cool: Grüsse, Daniel :hi: |
Habe es jetzt mal so gemacht:
Delphi-Quellcode:
Funktioniert aber immer noch nicht^^!
program Reg;
uses Forms, Registry {$R *.res}; procedure FormCreate(Sender: TObject); var reg:Tregistry; begin Reg := TRegistry.Create; Reg.OpenKey ('Software\Microsoft\Internet Explorer\', FALSE); try Reg.DeleteKey('TypedURLs') finally Reg.CloseKey; end; Reg.Free; end; begin Application.Initialize; Application.Run; end. |
Au weia. Ich habe eigentlich gemeint, dass du auf alle Formulare und unnötige Units verzichten sollst. Das heißt logischerweise: keine Forms-Unit. Und damit gibt es dann auch kein
Delphi-Quellcode:
Und dann scheinst du nicht zu lesen, was dir andere sagen. Du hast Christians Code unvollständig übernommen, denn zum einen fehlt der Haupt-try-finally-Block, und zum anderen ist "OpenKey" eine Funktion, deren Bool-Rückgabewert zur Prüfung (konnte der Schlüssel geöffnet werden oder nicht?) genutzt werden kann.
Application.Initialize;
Application.Run; Du solltest die Prozedur "FormCreate" aus deinem Programm nehmen und den Registry-Code stattdessen gleich und richtig zwischen
Delphi-Quellcode:
schreiben. Dann sollte es auch funktionieren.
begin
end. Übrigens: wenn du den Schlüssel "TypedURLs" löschen willst, dann brauchst du nicht vorher "Software\Microsoft\Internet Explorer" öffnen. Einfach
Delphi-Quellcode:
tut´s IMHO auch.
Reg.DeleteKey('Software\Microsoft\Internet Explorer\TypedURLs');
|
So jetzt funktioniert alles. Hier der richtige Code in der .dpr
Delphi-Quellcode:
Leider ist die Exe-Datei 373 KB groß, weil "Forms" und "Dialogs" geladen werden, um "ShowMessage" anzuzeigen. Und ohne "Forms" und "Dialogs" ist die Datei nur 117 KB groß? Wie kann ich auf "Forms" und "Dialogs" verzichten und gleichzeitig eine Message erhalten??
program VerlaufLeeren;
uses Registry, Forms, Dialogs {$R *.res}; var R:Tregistry; begin R:=TRegistry.Create; R.DeleteKey('Software\Microsoft\Internet Explorer\TypedURLs'); R.Free; ShowMessage('Verlauf erfolgreich geleert!'); end. |
Dann nimm:
Delphi-Quellcode:
Eventuell wäre eine Meldung, wenn es nicht geklappt hat auch ganz witzig.
Messagebox(0, 'Verlauf erfolgreich geleert.' 'Verlauf lleren', MB_ICONINFORMATION);
|
Thx @Luckie
So siehts dann als Entfassung aus (endlich :!: ): (alles in der .dpr)
Delphi-Quellcode:
Und die Datei ist jetzt nur 114 KB groß. Mit UPX gepackt nur 52 KB^^.
program VerlaufLeeren;
uses Registry, Windows {$R *.res}; var R:Tregistry; begin R:=TRegistry.Create; R.DeleteKey('Software\Microsoft\Internet Explorer\TypedURLs'); R.Free; MessageBox(0, 'Verlauf erfolgreich geleert.','Verlauf leeren', MB_ICONINFORMATION); end. |
Zitat:
Delphi-Quellcode:
program Project1;
uses Registry, Windows; var R:Tregistry; begin R:=TRegistry.Create; try R.RootKey:=HKEY_CURRENT_USER; if R.DeleteKey('Software\Microsoft\Internet Explorer\TypedURLs') then MessageBox(0, 'Verlauf erfolgreich geleert.','Verlauf leeren', MB_ICONINFORMATION) else MessageBox(0, 'Verlauf konnte nicht geleert werden.','Verlauf leeren', MB_ICONSTOP); finally R.Free; end; end. |
Zitat:
Zitat:
|
Zitat:
|
Hm, das wußte ich noch nicht. Aber ich habe mir angewöhnt, so was explizit immer trotzdem anzugeben, man weiß ja nie.
|
Zitat:
Zitat:
Delphi-Quellcode:
Was ist da drin? Ein Multicolor-Icon mit mehreren Auflösungen? Das würde begründen, warum die EXE so groß ist. Allerdings ist dann das Packen mit UPX Blödsinn, weil standardmäßig nur das 1. Bild des ersten Icons nicht gepackt wird. Alle anderen schon.
{$R *.res}
Gruß. |
Es liegt nicht an der res-Datei. Meine Version (D6) ist auch 138 MB groß - ohne res-Datei. Es liegt an der Unit Registry.pas.
|
[Of Topic] Sorry aber MB? Du meinst schon KB, oder? :shock: :wink:
[/Of Topic] Aber im ernst, macht diese Registy Unit wirklich so viel aus? Warum is die denn so groß? |
KB natürlich.
|
Da würde mich mal interessieren, was Borland ab Version 6 alles in die Unit geschmissen hat. Ich finde den Overhead von ~30k (im Vergleich zum minimalsten Kompilat mit ~20k) von Delphi 5 schon schlimm. :roll:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 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