

delphi中注册表的写入与读取操作
注:一般软件的信息应保存在HKEY_CURRENT_USER\下的Software\中,+公司名(公司有多个软件的情况)+软件名,
注2:该过程在注册表路径下如找不到公司名和软件名会自动创建,需引入System.Win.Registry单元
注3:
写入字符串用Reg.WriteString,还有WriteFloat,WriteDate,WriteInteger,WriteBinaryData,WriteBool,
读取也有相应的ReadFloat,ReadDate,ReadInteger,ReadBinaryData等
//创建并写入注册表键值的过程,注册表项不存在会自动创建
procedure SaveKeyToRegistry(KeyName, KeyVal: string); //参1键名,参2为键值
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
// 打开HKEY_CURRENT_USER\Software\MyCompany\MySoftName键 ,MyCompany改为自己的公司名,MySoft改为自己的软件名
Reg.RootKey := HKEY_CURRENT_USER; //要打开的根键
if Reg.OpenKey('Software\ctsoft\ctzhibansoft', True) then //要打开的子键
begin
Reg.WriteString(KeyName, KeyVal); //KeyName与KeyVal分别为要写入的键名与键值
// 关闭注册表键
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;
//调用
SaveKeyToRegistry('remindtime', TimeToStr(DateTimePicker1.DateTime)); //添加或修改Remindtime键的值为DateTimePicker1.DateTime,没有就添加,有就修改
//在注册表指定路径读取指定键的值
function ReadRegistryValue(keyName: string): string; //KeyName为要读取的键名
var
Reg: TRegistry;
begin
Result := '';
Reg := TRegistry.Create;
try
// 打开HKEY_CURRENT_USER\Software\MyCompany\MySoftName键
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKeyReadOnly('Software\ctsoft\ctzhibansoft') then
begin
// 读取名为"keyName"的字符串值
Result := Reg.ReadString(keyName);
// 关闭注册表键
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;
//读取
ReadRegistryValue('remindtime');
==========================================================下面两函数主要是调用注册表打开指定键路径
uses System.Win.Registry,Winapi.ShellAPI, System.StrUtils;
//调用注册表打开指定键位置
procedure JumpToKey(Key: string);
var
i, n: Integer;
hWin: HWND;
ExecInfo: ShellExecuteInfoA;
begin
hWin := FindWindowA(PAnsiChar('RegEdit_RegEdit'), nil);
if hWin = 0 then
{if Regedit doesn’t run then we launch it}
begin
FillChar(ExecInfo, 60, #0);
with ExecInfo do
begin
cbSize := 60;
fMask := SEE_MASK_NOCLOSEPROCESS;
lpVerb := PAnsiChar('open');
lpFile := PAnsiChar('regedit.exe');
nShow := 1;
end;
ShellExecuteExA(@ExecInfo);
WaitForInputIdle(ExecInfo.hProcess, 200);
hWin := FindWindowA(PAnsiChar('RegEdit_RegEdit'), nil);
end;
ShowWindow(hWin, SW_SHOWNORMAL);
hWin := FindWindowExA(hWin, 0, PAnsiChar('SysTreeView32'), nil);
SetForegroundWindow(hWin);
i := 30;
repeat
SendMessageA(hWin, WM_KEYDOWN, VK_LEFT, 0);
Dec(i);
until i = 0;
SendMessageA(hWin, WM_KEYDOWN, VK_RIGHT, 0);
i := 1;
n := Length(Key);
repeat
if Key[i] = '\' then
begin
SendMessageA(hWin, WM_KEYDOWN, VK_RIGHT, 0);
end
else
SendMessageA(hWin, WM_CHAR, Integer(Key[i]), 0);
i := i + 1;
until i = n;
end;
//判断一个注册表键路径是否合法,调用注册表打开指定键位置
procedure OpenOneKey(KeyPath: string);
var
i: Integer;
Reg: TRegistry;
keyRoot, keyChild: string;
hk: hkey;
q1: Integer;
begin
KeyPath := trim(KeyPath);
if KeyPath = '' then
begin
Application.MessageBox('数据不能为空,请重新输入!', '出错', MB_OK);
exit;
end;
if Length(KeyPath) < 10 then
begin
Application.MessageBox('非法数据,请重新输入!', '出错', MB_OK);
exit;
end;
//检验数据路径是否存在
q1 := pos('\', KeyPath);
if q1 = 0 then
begin
Application.MessageBox('非法数据,请重新输入!', '出错', MB_OK);
exit;
end;
keyRoot := leftstr(KeyPath, q1 - 1); //根键
keyChild := rightstr(KeyPath, Length(KeyPath) - q1); //后键
Reg := TRegistry.Create;
//reg.RootKey:=HKEY(qqs2);
Reg.RootKey := hk;
if lowercase(keyRoot) = lowercase('HKEY_CLASSES_ROOT') then
Reg.RootKey := HKEY_CLASSES_ROOT
else if lowercase(keyRoot) = lowercase('HKEY_CURRENT_USER') then
Reg.RootKey := HKEY_CURRENT_USER
else if lowercase(keyRoot) = lowercase('HKEY_LOCAL_MACHINE') then
Reg.RootKey := HKEY_LOCAL_MACHINE
else if lowercase(keyRoot) = lowercase('HKEY_USERS') then
Reg.RootKey := HKEY_USERS
else if lowercase(keyRoot) = lowercase('HKEY_PERFORMANCE_DATA') then
Reg.RootKey := HKEY_PERFORMANCE_DATA
else if lowercase(keyRoot) = lowercase('HKEY_CURRENT_CONFIG') then
Reg.RootKey := HKEY_CURRENT_CONFIG
else if lowercase(keyRoot) = lowercase('HKEY_DYN_DATA') then
Reg.RootKey := HKEY_DYN_DATA;
if Reg.KeyExists(keyChild) = false then
begin
Application.MessageBox('该注册表项路径不存在!', '出错', MB_OK);
Reg.Free;
exit;
end;
Reg.Free;
JumpToKey(KeyPath); //’HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer’);
end;
//调用
OpenOneKey('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer');