高手接分-读取注册表的问题

meneter 2010-10-13 10:31:26
意图:读取系统中的时区信息的TZI值并写入文件
问题:对比注册表中的值与写入文件的数据,发现两者完全不同
代码:
const
TIMEZONE_PATH = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time';
var
Reg: TRegistry;
PTZIData: PByte;
Fs: TFileStream;
TZIDataSize: Integer;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKeyReadOnly(TIMEZONE_PATH);

TZIDataSize := Reg.GetDataSize('TZI');
GetMem(PTZIData, TZIDataSize);

Reg.ReadBinaryData('TZI', PTZIData^, TZIDataSize);
Reg.CloseKey;
Reg.Free;

Fs := TFileStream.Create('c:\aa.txt', fmCreate);
Fs.Write(PTZIData, TZIDataSize);
Fs.Free;

FreeMem(PTZIData);
end;
...全文
47 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
meneter 2010-10-13
  • 打赏
  • 举报
回复
非常非常感谢!!
bdmh 2010-10-13
  • 打赏
  • 举报
回复

const
TIMEZONE_PATH = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time';
var
Reg: TRegistry;
PTZIData: PByte;
strem:TMemoryStream;
TZIDataSize,len: Integer;
begin
strem := TMemoryStream.Create;
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKeyReadOnly(TIMEZONE_PATH);

TZIDataSize := Reg.GetDataSize('TZI');
GetMem(PTZIData, TZIDataSize);
len := Reg.ReadBinaryData('TZI', PTZIData^, TZIDataSize);
Reg.CloseKey;
Reg.Free;
strem.Write(PTZIData^,len);
strem.SaveToFile('c:\aa.txt');
strem.Free;
FreeMem(PTZIData);
end;
meneter 2010-10-13
  • 打赏
  • 举报
回复
您可以把输出的文件名改为c:\aa.dat,然后用UltraEdit或者其它工具打开,并以二进制方式浏览。其实跟是否为Txt文件名无关。
bdmh 2010-10-13
  • 打赏
  • 举报
回复
你要写得到二进制的字符串,那就逐个字节去转换Fs 的byte为十六进制字符串

bdmh 2010-10-13
  • 打赏
  • 举报
回复
怎么不一样了,注册表中是二进制数据,txt文本中是转换成的字符,其实都是一样的内容

16,743

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧