必須打開與TRegistry
類註冊時使用KEY_WOW64_64KEY
值。
從MSDN:
KEY_WOW64_64KEY表明,對64位Windows的應用程序 應該 在64位註冊表視圖操作。 此標誌被Windows 32位 忽略。
此標誌必須使用 OR運算符與 此表中的其他標誌組合,該表可以查詢或訪問 註冊表值。
試試這個示例應用程序。
{$APPTYPE CONSOLE}
uses
Windows,
Classes,
registry,
SysUtils;
procedure ReadRegistry;
var
Registry: TRegistry;
List : TStrings;
begin
Registry := TRegistry.Create(KEY_WRITE OR KEY_WOW64_64KEY);
//Registry := TRegistry.Create(KEY_READ OR KEY_WOW64_64KEY);
List := TStringList.Create;
try
Registry.RootKey := HKEY_LOCAL_MACHINE;
if Registry.OpenKeyReadOnly('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run') then
begin
Registry.GetValueNames(List);
Writeln(List.Text);
end;
Registry.CloseKey;
finally
Registry.Free;
List.Free;
end;
end;
begin
try
ReadRegistry();
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
Readln;
end.
+1完美的答案:-) – 2011-03-31 05:50:48
AFAIK這個例子是錯誤的,因爲OpenKeyReadOnly將重置Access屬性沒有KEY_WOW64_64KEY到KEY_READ。所以你仍然在閱讀32位版本。也許後來的Delphi版本保留KEY_WOW64_64KEY,但我無法檢查。 – 2011-03-31 06:58:51
感謝您的回答和問題編輯,在我英語不好的同時... 已找到依然:Reg.Access:= KEY_WOW64_64KEY或KEY_ALL_ACCESS; – 2011-03-31 11:03:31