delphi 读取注册表多字符串 (REG_MULTI_SZ)

zyd100 2015-09-26 09:07:52
在单元中加入Registry
自定义函数如下:
function getREG_MULTI_SZ(rstr,kStr:string):string;
var
myreg: TRegistry;
STemp: string;
Mtype,ValueSize:Dword;
ArrChar:array [0..200] of char;
i: Integer;
c: char;
begin
Result:='';
myreg := TRegistry.Create; try
Mtype:=REG_MULTI_SZ;
myreg.RootKey:= HKEY_LOCAL_MACHINE;//确定打开注册表的主键,若要打开其它主键,也可以自行定义在如kstr之类,也可更改其它主键
if myreg.OpenKey(rstr,false) then
begin
ValueSize:=sizeof(ArrChar);
RegQueryValueEx(myreg.CurrentKey, PChar(kstr), nil, @Mtype, @ArrChar,@ValueSize);
for i:=0 to 200 do
begin
c := ArrChar[i];
while c = #0 do
begin
while ArrChar[i+1]<>#0 do
begin
ArrChar[i]:=' ';
break;
end;
break;
end;
end;
sTemp := ArrChar;
Result:=Trim(STemp);
end;
finally
myreg.CloseKey;
myreg.Free;
end;
end;


调用:例如:getREG_MULTI_SZ('SYSTEM\CurrentControlSet\services\Tcpip\Parameters',‘DhcpNameServer’)
...全文
557 3 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
JPEXE 2015-09-30
  • 打赏
  • 举报
回复
RegQueryValueEx
山东蓝鸟贵薪 2015-09-30
  • 打赏
  • 举报
回复


这个真可以的哟,如果是你 需要的,请将我 QQ,我直接传给你啊
pathletboy 2015-09-26
  • 打赏
  • 举报
回复
uses
  Registry;

type
  TMultiString = array of string;

  TMultiRegistry = class(TRegistry)
  public
    function ReadMultiString(const name: string): TMultiString;
  end;

function TMultiRegistry.ReadMultiString(const name: string): TMultiString;
var
  RegData: TRegDataType;
  Info: TRegDataInfo;
  buffer: pchar;
  ptr: pchar;
  i: Integer;
begin
  if GetDataInfo(Name, Info) then
  begin
    GetMem(buffer, info.DataSize);
    ReadBinaryData(name, buffer^, info.DataSize);
    ptr := buffer;
    i := 0;
    while (ptr^ <> #0) do
    begin
      SetLength(Result, i + 1);
      Result[i] := ptr;
      Inc(i);
      inc(ptr, StrLen(ptr) + 1);
    end;
    FreeMem(buffer);
  end;
end;
继承TRegistry,增加函数ReadMultiString 调用如下
var
  reg: TMultiRegistry;
  v: TMultiString;
  i: Integer;
begin
  reg := TMultiRegistry.Create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    if not reg.OpenKey('SYSTEM\CurrentControlSet\services\Tcpip\Parameters', False) then
      Exit;
    v := reg.ReadMultiString('DhcpNameServer');
  finally
    reg.Free;
  end;
  for i := 0 to Length(v) - 1 do
  begin
    ShowMessage(v[i]);
  end;
  //HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\ALG
end;
相关推荐
发帖
Windows SDK/API

1177

社区成员

Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
帖子事件
创建了帖子
2015-09-26 09:07
社区公告
暂无公告