Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Grösse in Bytes eines Keys der registry bekommen (https://www.delphipraxis.net/39418-groesse-bytes-eines-keys-der-registry-bekommen.html)

Pseudemys Nelsoni 2. Feb 2005 13:18


Grösse in Bytes eines Keys der registry bekommen
 
hi,

Delphi-Quellcode:
var
  Key: HKEY;
  phkResult: HKEY;
  uType: DWORD;
  uPathSize: DWORD;

begin
  Key := HKEY_LOCAL_MACHINE;
  if RegOpenKeyEx(Key, 'SOFTWARE\Borland\Delphi\7.0', 0, KEY_READ, phkResult) = ERROR_SUCCESS then
  begin
    RegQueryValueEx(Key, 'RootDir', nil, @uType, nil, @uPathSize);
    Showmessage(inttostr(uPathSize));
  end;
end.
showmessage zeigt mir immer 0 an, der key "RootKey" existiert aber...wieso bekomme ich nicht die richtige länge des strings angezeigt?

Robert Marquardt 2. Feb 2005 13:50

Re: Grösse in Bytes eines Keys der registry bekommen
 
Setz mal uType vorher auf 0 um anzuzeigen das du jeden Registry-Typen akzeptierst.
Ansonsten sieht es gut aus.

Pseudemys Nelsoni 2. Feb 2005 13:59

Re: Grösse in Bytes eines Keys der registry bekommen
 
Liste der Anhänge anzeigen (Anzahl: 1)
moin robert, auch das klappt nicht :(... siehe screenshoot im anhang. Damits mir auch glaubt *g*

Robert Marquardt 2. Feb 2005 14:16

Re: Grösse in Bytes eines Keys der registry bekommen
 
Erstens mal mit REG_SZ probieren und dann pruefen ob auch die richtige Funktion aufgerufen wird.
Bei Rechtsklick in der IDE und "Deklaration" sollte man in Windows.pas landen.

Pseudemys Nelsoni 2. Feb 2005 14:20

Re: Grösse in Bytes eines Keys der registry bekommen
 
Wie meinst du das mit prüfen ob es die richtige funktion ist? RegQueryValueEx müsste doch stimmen oder?

Robert Marquardt 2. Feb 2005 15:02

Re: Grösse in Bytes eines Keys der registry bekommen
 
Es kann immer mal sein das je nach Uses-Liste eine falsche Funktion gelinkt wird.

Pseudemys Nelsoni 2. Feb 2005 15:26

Re: Grösse in Bytes eines Keys der registry bekommen
 
scheint aber richtig zu sein, ich komme in die windows.pas an zeile "function RegQueryValueEx; external advapi32 name 'RegQueryValueExA';"

hm...das problem ist jetzt nur....wo liegt der fehler dann? wie gesagt der pfad muss stimmen...tut er ja auch, sonst würde das showmessage gar nicht ausgeführt werden und der Key "RootDir" existiert auch...den hat ja jeder der delphi 7 hat...hmmm

Christian Seehase 2. Feb 2005 17:08

Re: Grösse in Bytes eines Keys der registry bekommen
 
Moin Mario,

warum verlässt Du Dich drauf, dass RegQueryValueEx nicht fehlschlägt?
Prüf' das mal lieber:

Delphi-Quellcode:
if RegQueryValueEx(....) <> ERROR_SUCCESS then begin
  ShowMessage(SysErrorMessage(GetLastError));
end else begin
  ShowMessage(....);
end;
Ausserdem fehlen try/finally und RegCloseKey ;-)

Pseudemys Nelsoni 2. Feb 2005 19:50

Re: Grösse in Bytes eines Keys der registry bekommen
 
moin christian,

danke für deine antwort. ich bekomme den fehler zurückgegeben beim showmessage: "Der angegebene Ressourcentyp wurde nicht in der Image-datei gefunden"

was heisst das denn? :shock: welche image datei :gruebel:

Sprint 2. Feb 2005 20:57

Re: Grösse in Bytes eines Keys der registry bekommen
 
Delphi-Quellcode:
const
  S_KEYNAME = 'SOFTWARE\Borland\Delphi\7.0';
  S_VALUENAME = 'RootDir';
var
  CurrentKey: HKEY;
  Path: String;
  Size: DWORD;
begin

  if RegOpenKeyEx(HKEY_LOCAL_MACHINE, S_KEYNAME, 0, KEY_READ, CurrentKey) = ERROR_SUCCESS then
  begin
    SetLength(Path, MAX_PATH);
    Size := Length(Path);
    if RegQueryValueEx(CurrentKey, S_VALUENAME, nil, nil, PByte(PChar(Path)), @Size) = ERROR_SUCCESS then
    begin
      SetLength(Path, Size);
      ShowMessage(Path);
    end;
    RegCloseKey(CurrentKey);
  end;

end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 Uhr.
Seite 1 von 2  1 2      

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