Einzelnen Beitrag anzeigen

gore

Registriert seit: 9. Jun 2006
Ort: Magdeburg
29 Beiträge
 
Delphi 7 Professional
 
#35

AW: %programfiles% unter Windows 7 x64

  Alt 3. Nov 2010, 11:19
Auch wenn die Frage schon älter ist, werden sicherlich einige noch noch der Lösung suchen (und auf diesen Thread stoßen). Deshalb hier eine einfache Lösung:

Delphi-Quellcode:

RegReadString64(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion','ProgramFilesDir','');


function RegReadString64(MainKey:HKey; SubKey,ValueName,sDefault:string):string;
const KEY_WOW64_64KEY = $0100;
var DType: Integer;
    BSize: Integer;
    Key:HKey;
    a2,a:array[0..MAX_PATH]of char;
    p:PChar;
begin
  result:=sDefault;
  DType := REG_SZ;
  BSize:=sizeof(a);
  p:=a;
  if RegOpenKeyEx(MainKey, PChar(SubKey), 0, KEY_READ or KEY_WOW64_64KEY , Key)<>ERROR_SUCCESS then exit;
  if RegQueryValueEx(key,PChar(ValueName),nil,@DType, PByte(p), @BSize) <> ERROR_SUCCESS then begin RegCloseKey(Key); exit; end;
  RegCloseKey(Key);
  a[BSize]:=#0; //sonst Fehler beim lesen von ''
  if DType=REG_EXPAND_SZ then if ExpandEnvironmentStrings(a,a2,sizeof(a2))>0 then StrCopy(a,a2);
  result:=StrPas(a);
end;
Tschuldigung für den furchtbaren Code, aber hauptsache es klappt erstmal unter Delphi.

Anmerkung: Der Code klappt erst ab Win7, siehe http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx :
Either KEY_WOW64_32KEY or KEY_WOW64_64KEY can be specified. If both flags are specified, the function fails with ERROR_INVALID_PARAMETER.
Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP: If both flags are specified, the function’s behavior is undefined.

Geändert von gore ( 3. Nov 2010 um 11:36 Uhr) Grund: Anmerkung für XP Vista
  Mit Zitat antworten Zitat