Delphi2007 ent(32bit) + Windows7 64bit で開発をしています。
64ビットと32ビットのレジストリは別々で持っているようです。
64ビット:regedit
32ビット:%systemroot%\syswow64\regedit -m
http://support.microsoft.com/kb/305097/ja
D2007からTRegistryを使って64bitレジストリを取得したいのですが、
TRegistry.OpenKeyReadOnlyで行うと32bitのレジストリしか取れません。
D2007にも、XE2にも64bitレジストリを開く為のプロパティが存在しないのですが、
皆さんはどのようにしているのでしょうか?
windows.pas の KEY_WOW64_RES = $0300; ではレジストリ両方見に行くようですが。
var
Registry:TRegistry;
KeyName:string;
ReadStr:String;
Ret : String;
begin
Registry :=TRegistry.Create;
try
Registry.RootKey := HKEY_LOCAL_MACHINE;
//64bit App
KeyName := 'SOFTWARE\WinRAR';
ReadStr := 'exe64';
//32bit app
//KeyName := 'SOFTWARE\Adobe\Acrobat Reader\10.0\Language';
//ReadStr := 'UI';
Registry.OpenKey(KeyName,False);
Ret :=Registry.ReadString(ReadStr);
ShowMessage(Ret);
finally
Registry.Free;
end;
D2007 32bit 結果あり 64bit 結果空白
XE2体験版 32bit 結果空白 64bit 結果空白
TRegistryを使っている方がおられましたら、教えてください。
試してませんが、
// KEY_WOW64_64KEY = $200
Registry := TRegistry.Create(任意のアクセス or KEY_WOW64_64KEY);
では。
参考:http://msdn.microsoft.com/ja-jp/library/aa384232(v=vs.85).aspx
間違えました。
KEY_WOW64_64KEY = $100
が正解。
Novさんこんにちは。
Registry := TRegistry.Create(任意のアクセス or KEY_WOW64_64KEY);
でアクセスすることができました。
KEY_WOW64_32KEY = $0200;
KEY_WOW64_64KEY = $0100;
KEY_WOW64_RES = $0300; これは勝手に両方見に行くと勘違いしていたようです。
ありがとうございました。
解決です。
ツイート | ![]() |