读书人

读取注册表内的字符串转换有关问题

发布时间: 2013-01-23 10:44:49 作者: rapoo

读取注册表内的字符串转换问题
读取注册表内的字符串转换有关问题

InstallPath用字符串直接取是乱码的,用二进制查看是正常的,请问这个应该怎么才能读到正常的字符串? 以下是我的代码.



Function ToReg:string;
var
IeCache:array[0..1024] of char;
IeCacheLen:integer;
HK:HKEY;
s:string;
begin
Result := '';
IeCacheLen:=1024;
RegOpenKey(HKEY_LOCAL_MACHINE,'SOFTWARE\FairRain\Open\Setup',HK);
RegQueryValueEx(HK,PChar('InstallPath'),nil,nil,@IeCache,@ieCacheLen);
Result := Strpas(IeCache);
end;


[解决办法]
楼主你属于头疼医脚的主,你读出乱码也是读取正确了,无非是字符转换的问题,你怎么死磕读取注册表呢,呵呵。

在D2010下你把IeCache:array[0..1024] of char; 改成IeCache:array[0..1024] of AnsiChar;就可以正确显示。

在D7下稍微改下你的代码就可以


var
IeCacheLen:integer;
HK:HKEY;
s:UTF8String;
begin
RegOpenKey(HKEY_LOCAL_MACHINE, 'SOFTWARE\FairRain\Open\Setup', HK);
RegQueryValueExW(HK, 'InstallPath', nil, nil, nil, @IeCacheLen);
SetLength(s, IeCacheLen);
RegQueryValueExW(HK, 'InstallPath', nil, nil, @s[1], @IeCacheLen);
RegCloseKey(HK);
Result:=s;

读书人网 >.NET

热点推荐