首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2013-01-23 
读取注册表内的字符串转换问题InstallPath用字符串直接取是乱码的,用二进制查看是正常的,请问这个应该怎么

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

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;

热点排行