📄 registrydemomain.pas
字号:
unit RegistryDemoMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls,
JclRegistry, JclStrings;
type
TForm1 = class(TForm)
tvKeys: TTreeView;
Splitter1: TSplitter;
lvValues: TListView;
procedure tvKeysExpanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
procedure FormCreate(Sender: TObject);
procedure tvKeysChange(Sender: TObject; Node: TTreeNode);
private
function BuildPath(const Node: TTreeNode): string;
procedure InitTree;
function ExtractRootKey(const FullPath: string): string;
function ExtractKey(const FullPath: string): string;
function AddChildNode(const Node: TTreeNode; const Text: string): TTreeNode;
procedure GetKeyInfos(const Node: TTreeNode; var RootKey: HKEY;
var Key: string);
public
end;
var
Form1: TForm1;
implementation
uses
JclSysUtils;
{$R *.DFM}
procedure TForm1.InitTree;
begin
tvKeys.Items.Clear;
with tvKeys.Items.AddChild(nil, 'HKEY_CLASSES_ROOT') do
HasChildren := true;
with tvKeys.Items.AddChild(nil, 'HKEY_CURRENT_USER') do
HasChildren := true;
with tvKeys.Items.AddChild(nil, 'HKEY_LOCAL_MACHINE') do
HasChildren := true;
with tvKeys.Items.AddChild(nil, 'HKEY_USERS') do
HasChildren := true;
end;
function TForm1.BuildPath(const Node: TTreeNode): string;
begin
if Node <> nil then
Result := BuildPath(Node.Parent) + Node.Text + '\'
else
Result := '';
end;
function TForm1.ExtractRootKey(const FullPath: string): string;
var
strTmp: string;
begin
strTmp := FullPath;
Result := StrToken(strTmp, '\');
end;
function TForm1.ExtractKey(const FullPath: string): string;
var
strTmp: string;
begin
strTmp := FullPath;
StrToken(strTmp, '\');
Result := strTmp;
end;
procedure TForm1.GetKeyInfos(const Node: TTreeNode; var RootKey: HKEY; var Key: string);
var
strTmp,
strRootKey: string;
begin
strTmp := BuildPath(Node);
strRootKey := ExtractRootKey(strTmp);
if strRootKey = 'HKEY_CLASSES_ROOT' then
RootKey := HKEY_CLASSES_ROOT;
if strRootKey = 'HKEY_CURRENT_USER' then
RootKey := HKEY_CURRENT_USER;
if strRootKey = 'HKEY_LOCAL_MACHINE' then
RootKey := HKEY_LOCAL_MACHINE;
if strRootKey = 'HKEY_USERS' then
RootKey := HKEY_USERS;
Key:= ExtractKey(strTmp);
end;
procedure TForm1.tvKeysExpanding(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean);
var
strTmp,
Key: string;
RootKey: HKEY;
stlSubKeys: TStrings;
i: Integer;
NewNode: TTreeNode;
begin
GetKeyInfos(Node, RootKey, Key);
stlSubKeys := TStringList.Create;
RegGetKeyNames(RootKey, Key, stlSubKeys);
for i := 0 to stlSubKeys.Count - 1 do begin
strTmp := stlSubKeys[i];
NewNode := AddChildNode(Node, strTmp);
if NewNode <> nil then
NewNode.HasChildren := RegHasSubKeys(RootKey, Key + strTmp);
end;
stlSubKeys.Free;
end;
function TForm1.AddChildNode(const Node: TTreeNode; const Text: string): TTreeNode;
var
i: integer;
DoesExist: boolean;
begin
DoesExist := false;
Result := nil;
for i := 0 to Node.Count - 1 do
if Node.Item[i].Text = Text then begin
DoesExist := true;
break;
end;
if not DoesExist then
Result := tvKeys.Items.AddChild(Node, Text);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
InitTree;
end;
procedure TForm1.tvKeysChange(Sender: TObject; Node: TTreeNode);
var
strTmp,
Key: string;
RootKey: HKEY;
stlValueNames: TStrings;
i: integer;
begin
lvValues.Items.Clear;
GetKeyInfos(Node, RootKey, Key);
stlValueNames := TStringList.Create;
if RegGetValueNames(RootKey, Key, stlValueNames) then begin
for i := 0 to stlValueNames.Count - 1 do begin
strTmp := stlValueNames[i];
with lvValues.Items.Add do begin
Caption := strTmp;
SubItems.Add(RegReadString(RootKey, Key, strTmp));
end;
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -