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/)
-   -   Delphi Registryproblem (https://www.delphipraxis.net/99774-registryproblem.html)

Tommy1988 17. Sep 2007 15:49


Registryproblem
 
Hier wird gezeigt wie man einen DWORD-Wert in die Registry schreibt:
http://www.delphipraxis.net/internal...t.php?t=108941

Nur leider bekomme ich das nicht hin.

SO habe ich es versucht:
Delphi-Quellcode:
  with TRegistry.Create do
  begin
    try
      Rootkey:=HKEY_LOCAL_MACHINE; //Hauptschlüssel
      if OpenKey('SYSTEM\CurrentControlSet\Control\' +
      'Session Manager\Memory\Management\PrefetchParameters',
      True) then //Unterschlüssel öffnen
      begin
        WriteBinaryData('ValueABC', 'Wert-X', SizeOf(dword)); // Beispielwerte
      end;
      finally
          Free;
    end;
  end;
Klappt aber nicht :wall:

Luckie 17. Sep 2007 15:56

Re: Registryproblem
 
Zitat:

Zitat von Tommy1988
Klappt aber nicht :wall:

Diese Fehlermeldung kann ich in meiner Delphihilfe nicht finden.

Tommy1988 17. Sep 2007 15:57

Re: Registryproblem
 
Zitat:

[Fehler] Unit1.pas(209): E2197 Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden
Ich möchte nur ungern extra eine Prozedur dafür verwenden.

Für andere Registryarbeiten benutzt man ja auch nicht immer eine

ringli 17. Sep 2007 16:00

Re: Registryproblem
 
Sollte 'Wert-X' nicht ein Integerwert sein?

Tommy1988 17. Sep 2007 16:02

Re: Registryproblem
 
Auch dann kommt die von mir oben geschriebene Meldung.

ringli 17. Sep 2007 16:05

Re: Registryproblem
 
Hast du denn Schreibrechte auf den HKLM-Zeig? Wie sieht die 'WriteBinaryData'-Zeile bei dir aus wenn du sie nicht mit Beispielwerten gefüllt hast?

Tommy1988 17. Sep 2007 16:06

Re: Registryproblem
 
Delphi-Quellcode:
WriteBinaryData('Value-Name-Halt', '1', SizeOf(dword)); // Beispielwerte

ringli 17. Sep 2007 16:07

Re: Registryproblem
 
Da ist der Fehler doch schon. Müsste das nicht
Delphi-Quellcode:
WriteBinaryData('Value-Name-Halt', 1, SizeOf(dword)); // Beispielwerte
heissen?

Tommy1988 17. Sep 2007 16:08

Re: Registryproblem
 
Oben habe ich geschrieben, dass ich dann den selben Fehler bekomme :(

Tommy1988 17. Sep 2007 16:10

Re: Registryproblem
 
Angenommen ich verwende diese funktionen:
http://www.delphi3000.com/articles/article_2901.asp?SK=

Wie sähe der Aufruf aus?
Ich kann es mir denken, aber ich möchte mich nochmal absichern

Edit:
Delphi-Quellcode:
//Button
ReadDWORD('HierDerGanzLaaaangeSchlüssel', 'Value-Name');
So evtl?

Matze 17. Sep 2007 16:10

Re: Registryproblem
 
Dann mach doch das, was verlangt ist (kein Konstantenobjekt übergeben):

Delphi-Quellcode:
var
  WertX: Integer;

WertX := 1;

WriteBinaryData('Value-Name-Halt', WertX, SizeOf(dword));
Edit: Du fragst so oft, wie man eine Funktion aufrufst, das solltest du doch langsam können (und sag jetzt nicht, dass du es so gemacht hättest, sondern schreibe nächstes Mal dazu, wie du denkst, würde man das aufrufen. Ich habe immer noch den Eindruck, dir fehlen sämtliche Grundlagen).

Delphi-Quellcode:
if WriteDWORD('Key', 'Name', WertX) then
  // erfolgreich eingetragen

WertX = ReadDWORD('Key', 'Name');
Edit2: In der Funktion, die du nutzt, fehlt übrigens ein Delphi-Referenz durchsuchenCloseKey.

Tommy1988 17. Sep 2007 18:21

Re: Registryproblem
 
Zitat:

dass du es so gemacht hättest,
Du meinst den Aufruf da oben?

Wieso sollte ich den nicht gemacht habe, das habe ich aber!

Ich hab das so gemacht wie ich es nach meinem bisherigen Wissen machen würde.

Matze 17. Sep 2007 18:53

Re: Registryproblem
 
Funktioniert es nun wenigstens?

Tommy1988 17. Sep 2007 19:00

Re: Registryproblem
 
Wenn ich deine Prozedur verwende, und will eine 1 als DWORD eintragen, so trägt er
"01 00 00 00" ein. OK; ist ja richtig.

Aber eine Andere Prozedur tägt folgendes ein:

0x000000001(1)

Die Binärdaten sind identisch. Also kann ich davon ausgehen, dass es das gleiche ist?

Mit dem Binärsystem kenne ich mich leider nicht so doll aus

Edit:
Zitat:

Funktioniert es nun wenigstens?
Ja, ich habe es mir angeguckt, (Deinen Code) und versuche ihn zu verstehen soweit das jetzt
möglich ist.

Matze 17. Sep 2007 19:34

Re: Registryproblem
 
Kann es sein, dass der Schlüssel mit dem Inhalt "01 00 00 00" ein REG_BINARY ist und der mit "0x000000001(1)" ein REG_DWORD?

Tommy1988 17. Sep 2007 20:07

Re: Registryproblem
 
Ups, das sehe ich grade auch. Aber ich dachte diese Prozedur schreibt DWORD's in die Registry und keine Binary's?

Tommy1988 18. Sep 2007 13:18

Re: Registryproblem
 
Ich habe den Fehler gefunden:
Delphi-Quellcode:
Pruefung.WriteBinaryData(Data, Value, SizeOf(dword));
In der Überschrift steht, dass es kein Problem sei damit einen DWORD in die Registry zu schreiben.

Wieso steht dann da "WriteBinaryData(Data [...]"

Da muss doch
Delphi-Quellcode:
Pruefung.Integer(Data, Value);
hin.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:34 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