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 registry: string auslesen (https://www.delphipraxis.net/22400-registry-string-auslesen.html)

Pseudemys Nelsoni 17. Mai 2004 11:49


registry: string auslesen
 
Delphi-Quellcode:
function RegMirc(mWnd, aWnd: HWND; data, parms: PChar; show, nopause: boolean): integer; stdcall;
var
  lpValueName    : PChar;
  KeyH           : HKEY;
  lpDataBuf      : PChar;
  lpcbDataBufSize : DWORD;
begin
  Result := 2;
  if RegOpenKeyEx(
       HKEY_CURRENT_USER,
       'Software\mIRC\UserName',
       0,
       KEY_READ,
       KeyH
     ) = ERROR_SUCCESS then
  Try
    lpValueName := '';
    lpcbDataBufSize := SizeOf(lpDataBuf);
    RegQueryValueEx(
      KeyH,
      @lpValueName,
      nil,
      nil,
      @lpDataBuf,
      @lpcbDataBufSize
    );
    MessageBox(0, PChar(lpDataBuf), '!', 0);
  Finally
    RegCloseKey(KeyH);
  end;
end;

hallo leute,

meine Messagebox gibt mir nichts anderes ausser ein "viereck"-zeichen aus. In der registry steht aber in dem key die value "hallo", wieso bekomme ich den Wert nicht?

Kasoft 17. Mai 2004 12:17

Re: registry: string auslesen
 
hmm ich weiss nicht ganz genau was du versuchst zu machen. Aber wenns nur ein String ist den du
auslesen willst geht das einfacher.

Code:
procedure regauslesen;
var
  reg : TRegistry;
begin
  reg := TRegistry.create;  // wenns nur lesezugriff ist dann parameter eingeben
  reg.root := HKEY_LOCAL_USER;
  reg.openkey('Software\mIRC\UserName');
  showmessage(reg.readString(value)); //value = der Wert den du auslesen willst;
  reg.free; // immer aufräumen ;-)
end;
was bei dir vielleicht schiefgegangen ist könnte:
lpvaluename sein. Du inititialierst ihn mit ''
der weiss glaub ich gar nicht was er auslesen soll...

Probiers halt mal.

Pseudemys Nelsoni 17. Mai 2004 12:22

Re: registry: string auslesen
 
hallo Kasoft,

ich arbeite ohne die VCL, also alles über die api (siehe forum: windows api^^) also da gibt es keine klasse wie die TRegistry.

mit '' initalisierte strings sind defaultwerte. siehe PSDK

Kasoft 17. Mai 2004 13:01

Re: registry: string auslesen
 
Upss...dann hab ich mich gerade total vergriffen sorry.

Mein Fehler

MfG
Kasoft

MathiasSimmack 17. Mai 2004 13:11

Re: registry: string auslesen
 
1. Wie gehabt: Win32-API-Tutorials für Delphi
2. klick (etwas in der Art)

Pseudemys Nelsoni 17. Mai 2004 13:23

Re: registry: string auslesen
 
@Kasoft: hast es ja nur gut gemeint, trotzdem danke ;)
@Mathias: @1, da hab ich scho geschaut, 2 guck ich mir mal an, danke

MathiasSimmack 17. Mai 2004 13:36

Re: registry: string auslesen
 
Zitat:

@1, da hab ich scho geschaut
Geschaut, vielleicht. Gelesen und verstanden, nicht. ;) Sorry, aber es wird auch erwähnt:
In den berühmten Tutorials steht
Die Variable "cbData" enthält nach dem Funktionsaufruf die Anzahl der kopierten oder benötigten Bytes. [...] Wenn also unsere Prüfung geklappt hat, dann setzen wir den Puffer auf die gewünschte Länge und rufen die Funktion erneut auf [...]

Und jetzt denk mal darüber nach, wie sinnvoll es ist, eine "pchar"-Variable ohne zuvor festgelegte Größe
Delphi-Quellcode:
var
  lpDataBuf      : PChar;
  lpcbDataBufSize : DWORD;

{ ... }

    lpcbDataBufSize := SizeOf(lpDataBuf);
// aber wo ist bspw. der Befehl, in dem du "lpDataBuf"
// x Bytes des RAMS zuweist?
zu verwenden?

Pseudemys Nelsoni 17. Mai 2004 14:09

Re: registry: string auslesen
 
ah, 2mal aufrufen, auf die idee bin ich leider nicht gekommen :oops:

ich hatte mich schon gefragt wie man die bytegrösse angeben soll wenn man sie noch garnicht hat, danke schonmal, ich werds mal versuchen. Jo mein code war falsch, aber es ist mein "erstes mal" :]


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