关于读注册表的问题(100分)

  • 主题发起人 主题发起人 caoliu
  • 开始时间 开始时间
C

caoliu

Unregistered / Unconfirmed
GUEST, unregistred user!
名称 类型 数据
SystemBiosVersion REG_MULTI_SZ Award Modular BIOS v6.00PG

我打开SystemBiosVersion里面的数值数据是:
41 00 77 00 61 00 72 00 A.w.a.r.
64 00 20 00 4D 00 6F 00 d..M.o.
64 00 75 00 6C 00 61 00 d.u.l.a.
72 00 20 00 42 00 49 00 r..B.I.
4F 00 53 00 20 00 76 00 O.S..v.
36 00 2E 00 30 00 30 00 6...0.0.
50 00 47 00 00 00 00 00 P.G.....

我怎样读出,得到字符串:Award Modular BIOS v6.00PG
谢谢!!!

 
用TRegistry的ReadBinary.读到WideChar的字符串里.
 
LeeChange,我不知道读,你能举个
例子吗?我是菜鸟!
 
uses
Registry;

function TForm1.GetValue: string;
var
Key: HKey;
RegType: DWord;
Buffer: PByte;
Length: DWord;
p: PByte;
i: Byte;
begin
Result:='';
RegOpenKey(HKEY_LOCAL_MACHINE, PChar('software/yourvalue'), Key);
try
RegType:=REG_MULTI_SZ;
Length:=xx;
Buffer:=AllocMem(Length);
try
RegQueryValueEx(Key, PChar(ValueType), nil, @RegType, Buffer, @Length);
p:=Buffer;
for i:=1 to Length do
begin
Result:=Result+Chr(p^);
Inc(p, 1)
end
finally
Dispose(Buffer)
end
finally
RegCloseKey(Key)
end
end;
 
var
buf: array [0..255] of Char;
reg: TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
if reg.OpenKey('HARDWARE/DESCRIPTION/System', false) then
begin
reg.ReadBinaryData('SystemBiosVersion', buf, sizeof(buf));
ShowMessage(buf);
end;
reg.Free;
end;
 
Sachow is ok;
LeeChange 你那段代码,我这个菜鸟看的有点头晕
谢谢大家!!!
 
Sachow
reg.[red]ReadBinaryData[/red]这个是什么?
麻烦你讲解一下!
谢谢!!!
 
读取二进制数据到一个缓冲区中,缓冲区参数类型是无类型指针,因此我把它读到一个字符串
数组当中。我用了长度为255字节的静态字符数组,这个长度应该足够存放相关信息了,但
如果要读的数据长度可能超过255字节,就需要定义更大的数组,但这样做有点浪费内存。
省内存的方法是动态分配,但就要花更多的代码来管理内存的分配,一般对存储空间要求不
高的地方都可以使用静态数组。(听说印度阿三通常都是这样干呐)

 
后退
顶部