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/)
-   -   Prism Registry DWORD wert erstellen (https://www.delphipraxis.net/79110-registry-dword-wert-erstellen.html)

sanguinarus 16. Okt 2006 15:50


Registry DWORD wert erstellen
 
hallo!

Ich arbeite gerade an einem tool wo ich mehrer buttons habe und bei einem soll
er mir in der registrie einen dword wert erstellen.
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Win dows\System\Shutdown]
"HibernateAsDefault"=dword:00000001
"ShowHibernateButton"=dword:00000001
habe allerdings keine ahnung wie ich das machen soll einen normalen schlüssel
zu erstellen ist ja kein prob aber ich brauche dafür diesen dword wert kann mir da einer helfen!

mkinzler 16. Okt 2006 15:56

Re: Registry DWORD wert erstellen
 
DWORD=Integer

sanguinarus 16. Okt 2006 16:05

Re: Registry DWORD wert erstellen
 
Wie jetzt kann damit gerade nichts anfangen sorry aber habe echt kein plan! :gruebel:

das ist momentan mein stand nur als test

Delphi-Quellcode:
procedure TWinForm.Insatll_Click(sender: System.Object; e: System.EventArgs);
var key : Registrykey;
begin
     key := Registry.LocalMachine.OpenSubKey('Software', True);
     key.SetValue('test','1');
end;

mkinzler 16. Okt 2006 16:06

Re: Registry DWORD wert erstellen
 
Ein DWORD kannst du als Integer anlegen.

sanguinarus 16. Okt 2006 16:20

Re: Registry DWORD wert erstellen
 
Zitat:

Zitat von mkinzler
Ein DWORD kannst du als Integer anlegen.

wie mache ich das bzw binde ich das bei mir ein wie gesagt absulut keine ahnung.
Sitze hier mit nen dicken delphi buch aber da steht es halt auch nicht genau drin wie ich das machen muss
hoffe ja das meine grund idee richtig ist weis aber halt nicht wie ich denn schlüssel als
DWORD speicher eine richtige beschreibung wäre nett.

ArmyMan 16. Okt 2006 16:31

Re: Registry DWORD wert erstellen
 
Hallo

Ich würde es so machen:

Delphi-Quellcode:
uses Registry,Windows;

...

procedure TForm1.Button1Click(Sender: TObject);
var
  reg : TRegistry;
begin
  try
    reg := TRegistry.Create;
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.OpenKey('SOFTWARE\Policies\Microsoft\Windows\System\Shutdown',true);
    reg.WriteInteger('HibernateAsDefault',1);
    reg.WriteInteger('ShowHibernateButton',1);
  finally
    reg.Free;
  end;
end;
Greetz

[edit]
"uses Windows" eingebaut
[/edit]

sanguinarus 16. Okt 2006 16:37

Re: Registry DWORD wert erstellen
 
erstmal danke aber bei

Delphi-Quellcode:
reg.RootKey := HKEY_LOCAL_MACHINE;
zeigt er mir Undefinierter Bezeichner an hatte ich
auch schon probiert!
habe es 1:1 kopiert

ArmyMan 16. Okt 2006 16:38

Re: Registry DWORD wert erstellen
 
Ach ja...

Delphi-Quellcode:
uses Windows
Greetz

sanguinarus 16. Okt 2006 16:43

Re: Registry DWORD wert erstellen
 
ja das scheint jetzt io zu sein aber an anderer stelle soll er mir ne messagebox aufrufen

Delphi-Quellcode:
MessageBox.[u]Show[/u]('Sie haben nichts Ausgewählt', 'Setup', MessageBoxButtons.Ok,
    Messageboxicon.Information, Messageboxdefaultbutton.button1)
nur jetzt sagt er mir nicht genug wirkliche parameter :wall: :wall: :wall:

ArmyMan 16. Okt 2006 16:49

Re: Registry DWORD wert erstellen
 
Mach es do so

Delphi-Quellcode:
ShowMessage('Sie haben nichts Ausgewählt');
Greetz

sanguinarus 16. Okt 2006 16:52

Re: Registry DWORD wert erstellen
 
ne funktioniert auch nicht! :gruebel:
er soll mir ja die buttons und so noch anzeigen aber das klappt ja da nicht.

Martin K 16. Okt 2006 16:57

Re: Registry DWORD wert erstellen
 
Also Dein Code oben, gefällt mir ganz und gar nicht.

1.
Das Objekt wird erst im try-Block erzeugt -> schlägt dies fehl, wird es trotzdem freigegeben.
-> Es wird ein Objekt freigegeben, das möglicherweise nicht erstellt wurde.

Besser:
Delphi-Quellcode:
reg := TRegistry.Create;
try
  // do something
finally
  reg.Free;
end;
2.
Was geöffnet wird, sollte zum Schluss auch wieder geschlossen werden - am Besten das ganze in noch einem try-finally-Block.
Außerdem kann das Öffnen auch fehlschlagen, z.B. wenn es den Schlüssel in der Registry nicht gibt - dafür gibt es eine if-Abfrage:
Delphi-Quellcode:
if reg.OpenKey(...) then
try
  // do something
finally
  reg.CloseKey;
end;
Das ganze sähe dann so aus:
Delphi-Quellcode:
uses Windows, Registry;

...

procedure TForm1.Button1Click(Sender: TObject);
var
  reg : TRegistry;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    if reg.OpenKey('SOFTWARE\Policies\Microsoft\Windows\System\Shutdown',true) then
    try
      reg.WriteInteger('HibernateAsDefault',1);
      reg.WriteInteger('ShowHibernateButton',1);
    finally
      reg.CloseKey;
    end;
  finally
    reg.Free;
  end;
end;

//Edit:
zur MessageBox (hat zwar nix mehr mit dem Thema zu tun, aber was soll's...):
verwende mal Application.MessageBox, wie Du da die Buttons und Symbole als Parameter übergibst, steht in der Delphi-Hilfe.

sanguinarus 16. Okt 2006 17:03

Re: Registry DWORD wert erstellen
 
der ganze spaß sieht so aus

Delphi-Quellcode:
unit WinForm;

interface

uses
  System.Drawing, System.Collections, System.ComponentModel,
  System.Windows.Forms, System.Data;

...

uses System.Diagnostics, System.IO, registry, Windows;

procedure TWinForm.Beenden_Click(sender: System.Object; e: System.EventArgs);
begin
      case MessageBox.Show('Wollen sie das Setup wirklich Beenden', 'Setup', MessageBoxButtons.YesNo,
           Messageboxicon.Warning, Messageboxdefaultbutton.button1) of
           System.Windows.Forms.DialogResult.Yes : close;
      end;
end;

procedure TWinForm.Zurück_Click(sender: System.Object; e: System.EventArgs);
begin
     Panel1.Hide;
     ListBox1.items.Clear;
end;

procedure TWinForm.Insatll_Click(sender: System.Object; e: System.EventArgs);
var
  reg : TRegistry;
begin
  try
    reg := TRegistry.Create;
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.OpenKey('SOFTWARE\Policies\Microsoft\Windows\System\Shutdown',true);
    reg.WriteInteger('HibernateAsDefault',1);
    reg.WriteInteger('ShowHibernateButton',1);
  finally
    reg.Free;
  end;
end;

procedure TWinForm.Beenden1_Click(sender: System.Object; e: System.EventArgs);
begin
      case MessageBox.show('Wollen sie das Setup wirklich Beenden', 'Setup', MessageBoxButtons.YesNo,
           Messageboxicon.Warning, Messageboxdefaultbutton.button1) of
           System.Windows.Forms.DialogResult.Yes : close;
      end;
end;

end.
vieleicht hilft ja das kann nur wieder holen bin halt nen nob application.messagebox funzt auch nicht naja mal gucken klappt schon irgendwie vielen dank

Luckie 16. Okt 2006 17:16

Re: Registry DWORD wert erstellen
 
Hier werden zwei Dinge durcheinander geworfen: .NET mit WinForms und Win32 mit der VCL.

Mit was prgrammierts du denn jetzt? Anscheinend mit Delphi for .NET WinForms. Also musst du auch die entsprechende Assembly einbinden und die entsprechenden methoden zum Erstellen eine Registry Eintrages.

@Armyman: Die Klasse TRegistry befindet sich in der Unit Registry und nicht in der Unit Windows.

sanguinarus 16. Okt 2006 17:23

Re: Registry DWORD wert erstellen
 
Zitat:

Zitat von Luckie
@Armyman: Die Klasse TRegistry befindet sich in der Unit Registry und nicht in der Unit Windows.

nur wenn ich die unit registry wähle wie mache ich denn das das ich daten unter ddenn schllüssel hklm ab lege weil bei dem befehl
reg.RootKey := HKEY_LOCAL_MACHINE;
zeigt er mir ohne "unit windows" einen fehler.

sanguinarus 16. Okt 2006 17:26

Re: Registry DWORD wert erstellen
 
ich kann mich da nur auf die hilfe verlassen habe echt keinen plan
kann ja denn gesammten text mal einstellen zum zerpflücken

sanguinarus 16. Okt 2006 17:30

Re: Registry DWORD wert erstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
ist zwar bestimmt nicht schön aber soll ja nur funktionieren
sry

Luckie 16. Okt 2006 17:32

Re: Registry DWORD wert erstellen
 
Ich sagte doch schon, du brauchst .NET Code dafür. Guck doch einfach mal in der Hilfe, wie man in die Registry schreibt.

Und beim nächsten Mal hänge bitte den Code als Datei an, wenn er schon so lang ist.

mkinzler 16. Okt 2006 19:19

Re: Registry DWORD wert erstellen
 
Dann binde doch beides ein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 Uhr.

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