不用TRegistry,如何用API枚举某键下面的subkey 和value?
谁有没有用API操作注册表的完整的API例子(包括枚举,读取各种类型的值)?
找了很久,没找到,哪们知道,指教一下,谢!
谁有没有用API操作注册表的完整的API例子(包括枚举,读取各种类型的值)?
找了很久,没找到,哪们知道,指教一下,谢!
解决方案 »
- 用过1STClass的进来
- 我刚刚开始学习使用Delphi,以后希望大家能多帮忙!先问一个简单的问题
- 怎么在TreeView控件中获得当前选择的节点名称??
- FasteReport4 没有数据时也显示header内容
- delphi6做的程序在DELPHI7打开会不会出问题,delphi7做的程序在DELPHI6打开会不会出问题
- 简单问题
- Delphi 中如何支持开发多语言平台应用程式?
- 请问在注册表中哪一个键值是IE当前主页的键值谢谢
- 在desktop中建的paradox表在相关性的问题?
- 请问如何遍历某一目录的全部文件。
- 请教:关于两窗体间传递消息的问题
- 请高手指教这个高难度的报表如何实现,不胜感谢
我看过TRegistry,但是它太对象化了,每个东西都对象化,因此显得有点过于繁杂
自己一个一个去找,再写,有点麻烦。
想直接找个大家写好了来用用。
var //枚举
i:integer;
iRes:integer;
s:String;
hTemp:HKEY;
Buf:Pointer;
BufSize:Cardinal;
begin
Result:=False;
ResultList:='';
if RegOpenKeyEx(RootKey,PChar(Name),0,KEY_READ,hTemp)=ERROR_SUCCESS then
begin
Result:=True;
BufSize:=1024;
GetMem(buf, BufSize);
i:=0;
iRes := ERROR_SUCCESS;
while iRes=ERROR_SUCCESS do
begin
BufSize:=1024;
if DoKeys then
iRes:=RegEnumKeyEx(hTemp,i,buf,BufSize,nil,nil,nil,nil)
else
iRes:=RegEnumValue(hTemp,i,buf,BufSize,nil,nil,nil,nil);
if iRes=ERROR_SUCCESS then
begin
SetLength(s,BufSize);
Move(buf^,s[1],BufSize);
if ResultList='' then
ResultList:=s
else
ResultList:=Concat(ResultList,#13#10,s);
inc(i);
end;
end;
FreeMem(buf);
RegCloseKey(hTemp);
end;
end;procedure TForm1.Button1Click(Sender: TObject); //读取键值
var hKey1:HKEY;
size:Cardinal;
value:array[0..255]of char;
begin
RegOpenKeyEx(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windows\CurrentVersion',0,KEY_READ,hKey1);
RegQueryValueEx(hKey1,'CommonFilesDir',nil,nil,@value,@size);
ShowMessage(value);
RegCloseKey(hKey1);
end;procedure TForm1.Button2Click(Sender: TObject);
var s:string;
begin
RegEnum(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windows\CurrentVersion',s,False);
ShowMessage(s);
end;
{
返回注册表中指定主键下的所有的键名列表
}
var
RegKey: HKEY;
I: DWORD;
Size: DWORD;
NumSubKeys: DWORD;
NumSubValues: DWORD;
MaxSubValueLen: DWORD;
ValueName: string;
begin
Result := False;
if RegOpenKeyEx(RootKey, PChar(SubKey), 0, KEY_READ, RegKey) = ERROR_SUCCESS then
begin
if RegQueryInfoKey(RegKey, nil, nil, nil, @NumSubKeys, nil, nil, @NumSubValues, @MaxSubValueLen, nil, nil, nil) = ERROR_SUCCESS then
begin
SetLength(ValueName, MaxSubValueLen + 1);
if NumSubValues <> 0 then
for I := 0 to NumSubValues - 1 do
begin
Size := MaxSubValueLen + 1;
RegEnumValue(RegKey, I, PChar(ValueName), Size, nil, nil, nil, nil);
Names.Add(PChar(ValueName));
end;
Result := True;
end;
RegCloseKey(RegKey);
end;
end;function RegGetKeyNames(const RootKey: HKEY; const SubKey: string; Names: TStrings): Boolean;
{
返回注册表中指定主键下的所有子键的名称列表
}
var
RegKey: HKEY;
I: DWORD;
Size: DWORD;
NumSubKeys: DWORD;
MaxSubKeyLen: DWORD;
KeyName: string;
begin
Result := False;
if RegOpenKeyEx(RootKey, PChar(SubKey), 0, KEY_READ, RegKey) = ERROR_SUCCESS then
begin
if RegQueryInfoKey(RegKey, nil, nil, nil, @NumSubKeys, @MaxSubKeyLen, nil, nil, nil, nil, nil, nil) = ERROR_SUCCESS then
begin
SetLength(KeyName, MaxSubKeyLen + 1);
if NumSubKeys <> 0 then
for I := 0 to NumSubKeys - 1 do
begin
Size := MaxSubKeyLen + 1;
RegEnumKeyEx(RegKey, I, PChar(KeyName), Size, nil, nil, nil, nil);
Names.Add(PChar(KeyName));
end;
Result := True;
end;
RegCloseKey(RegKey);
end
end;