AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte SnowScreenSaver
Thema durchsuchen
Ansicht
Themen-Optionen

SnowScreenSaver

Ein Thema von Hador · begonnen am 23. Dez 2006 · letzter Beitrag vom 20. Jan 2008
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#1

Re: SnowScreenSaver

  Alt 20. Jan 2008, 06:21
wenn du schon auf Try-Finaly verzichtest, dann doch bitte "richtig".


Delphi-Quellcode:
RegOpenKeyEx(HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\'
             + 'Explorer\Shell Folders', 0, KEY_READ, hk);
RegQueryValueEx(hk, 'AppData', nil, @RegType, nil, @BufSize);
GetMem(Buf, BufSize);
RegQueryValueEx(hk, 'AppData', nil, @RegType, Buf, @BufSize);
RegCloseKey(hk); // man könnte ja auch ml versuchen den Key
                  // zu schließen, den man auch geöffnet hat ;)
if (RegType = REG_SZ) and (BufSize > 1) then
begin
  SetLength(Txt, BufSize);
  CopyMemory(@Txt[1], Buf, BufSize);
  //FreeMem(Buf); << hier hast du es
  PC := PAnsiChar(Txt);
  Result := PC + '\';
end;
FreeMem(Buf); // << hier wär's besser
sonst wird der Speicher nicht freigegeben, wenn der Eintrag nicht existiert.

ach ja, hat sich Delphi eigentlich nicht wegen des Results gemeldet?
(des kann undefiniert sein)

PS: REG_EXPAND_SZ wäre auch möglich


Delphi-Quellcode:
function TSnowScreen.GetAppData: string;
var
  hk: HKEY;
  RegType: DWord;
  BufSize: Cardinal;
  Buf: PAnsiChar;
begin
  Result := '';
  if RegOpenKeyEx(HKEY_CURRENT_USER, 'Software\Microsoft\Windows\'
    + 'CurrentVersion\Explorer\Shell Folders', 0, KEY_READ, hk) then
  begin
    RegQueryValueEx(hk, 'AppData', nil, @RegType, nil, @BufSize);
    if BufSize > 0 then
    begin
      GetMem(Buf, BufSize);
      RegQueryValueEx(hk, 'AppData', nil, @RegType, Buf, @BufSize);
      if RegType = REG_SZ then Result := IncludeTrailingBackslash(Buf);
      FreeMem(Buf);
    end;
  end;
  RegCloseKey(hk);
end;
aber statt der Registry leg ich dir mal ein MSDN-Library durchsuchenExpandEnvironmentStrings ans Herz.
(wer weiß ob MS den Reg-Pfad nicht irgendwann ändert)
Delphi-Quellcode:
var Buf: array[0..MAX_PATH] of Char;
begin
  ExpandEnvironmentStrings('%AppData%\SnowScreenSaver.cfg', @Buf, MAX_PATH);
  Result := PChar(@Buf);
end;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 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