怎样在注册表中读取本机的共享目录(要求得到字符串)?
因为在注册表中,本机的共享信息是以二进制形式存储的,所以在读出二进制数据后,
如何再转换为字符串???
我这样试过:
procedure TForm1.Button1Click(Sender: TObject);
var Reg: TRegistry; s: String;
BBuf :array [0..1500] of byte; i: Integer;
begin
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.OpenKey('SYSTEM\CurrentControlSet\Services\LanmanServer\Shares', False);
Reg.ReadBinaryData('共享', BBuf, 1501) ;
For i:=0 to 1500 do
s:=s+chr(BBuf[i]);
Reg.CloseKey;
Reg.Free;
Memo1.Lines.Add(s);
end;
但是得出的结果只有前几个字符:CSCFlags=0
请高手指点。
因为在注册表中,本机的共享信息是以二进制形式存储的,所以在读出二进制数据后,
如何再转换为字符串???
我这样试过:
procedure TForm1.Button1Click(Sender: TObject);
var Reg: TRegistry; s: String;
BBuf :array [0..1500] of byte; i: Integer;
begin
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.OpenKey('SYSTEM\CurrentControlSet\Services\LanmanServer\Shares', False);
Reg.ReadBinaryData('共享', BBuf, 1501) ;
For i:=0 to 1500 do
s:=s+chr(BBuf[i]);
Reg.CloseKey;
Reg.Free;
Memo1.Lines.Add(s);
end;
但是得出的结果只有前几个字符:CSCFlags=0
请高手指点。
Reg.ReadBinaryData('共享', BBuf, 1501) ;改为REG.GETVALUENAMES(MEMO1.LINES)
For i:=0 to 1500 do
s:=s+chr(BBuf[i]);
改成:
For i:=0 to 1500 do
begin
if Chr( BBUf[i] ) = '' then
s:= s + ' '
else
s:=s+chr(BBuf[i]);
end;
这样就行了,我试过了,你试试看。