S
stevenldj
Unregistered / Unconfirmed
GUEST, unregistred user!
//删除注册表项
procedure uDelRegKey(sKeyName: String);
var
rReg: TRegistry;
sRootKey: String;
sKeyPath: String;
sSubKeyName: String;
begin
//格式化
if sKeyName[Length(sKeyName)] = '/' then
Delete(sKeyName, Length(sKeyName), 1);
//读取根键
sRootKey := UpperCase(Copy(sKeyName, 1, Pos('/', sKeyName) - 1));
//读取键名
sSubKeyName := Copy(sKeyName, uSubPos('/', sKeyName, 0) + 1, MaxInt);
//读取路径
sKeyPath := Copy(sKeyName, Length(sRootKey) + 2, MaxInt);
Delete(sKeyPath, uSubPos('/', sKeyPath, 0), MaxInt);
//操作注册表
rReg := TRegistry.Create;
try
rReg.RootKey := DWORD($80000000) + DWORD(slRegRootKey.IndexOf(sRootKey));
if rReg.KeyExists(sKeyPath) then begin
rReg.OpenKey(sKeyPath,False);
if not rReg.DeleteKey(sSubKeyName) then
slError.Add('注册表项-删除失败 ' + sKeyName);
rReg.CloseKey;
end;
finally
rReg.Free;
end;
end;
//删除注册表键值
procedure uDelRegValue(sValueName: String);
var
rReg: TRegistry;
sRootKey: String;
sKeyPath: String;
sSubKeyName: String;
begin
//格式化
if sValueName[Length(sValueName)] = '/' then
Delete(sValueName, Length(sValueName), 1);
//读取根键
sRootKey := UpperCase(Copy(sValueName, 1, Pos('/', sValueName) - 1));
//读取键名
sSubKeyName := Copy(sValueName, uSubPos('/', sValueName, 0) + 1, MaxInt);
//读取路径
sKeyPath := Copy(sValueName, Length(sRootKey) + 2, MaxInt);
Delete(sKeyPath, uSubPos('/', sKeyPath, 0), MaxInt);
//操作注册表
rReg := TRegistry.Create;
try
rReg.RootKey := DWORD($80000000) + DWORD(slRegRootKey.IndexOf(sRootKey));
if rReg.KeyExists(sKeyPath) then begin
rReg.OpenKey(sKeyPath,False);
if not rReg.DeleteValue(sSubKeyName) then
slError.Add('注册表值-删除失败 ' + sValueName);
rReg.CloseKey;
end;
finally
rReg.Free;
end;
end;
执行结果如下:
执行结果:(未删除的文件或目录将在下次启动时被删除)
注册表项-删除失败 HKEY_CLASSES_ROOT/CLSID/{7CA83CF1-3AEA-42D0-A4E3-1594FC6E48B2}
注册表项-删除失败 HKEY_CLASSES_ROOT/CLSID/{ABEC6103-F6AC-43A3-834F-FB03FBA339A2}
注册表项-删除失败 HKEY_CLASSES_ROOT/CLSID/{B83FC273-3522-4CC6-92EC-75CC86678DA4}
注册表项-删除失败 HKEY_CLASSES_ROOT/CnsHelper.CH
注册表项-删除失败 HKEY_CLASSES_ROOT/CnsHelper.CH.1
注册表项-删除失败 HKEY_CLASSES_ROOT/TypeLib/{4158DB95-DE71-41FF-BEA1-2C3D1C679DF1}
注册表项-删除失败 HKEY_CLASSES_ROOT/TypeLib/{F97E75A4-0103-4F27-A752-327B600B1130}
注册表项-删除失败 HKEY_CLASSES_ROOT/TypeLib/{F9AD9D67-EFA8-480E-8291-0163F3960DE7}
注册表项-删除失败 HKEY_CURRENT_USER/Software/yahoo
注册表值-删除失败 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Internet Explorer/Search
注册表值-删除失败 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run/helper.dll
注册表项-删除失败 HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/CnsMinKP
注册表项-删除失败 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/CnsMinKP
我用的是 Delphi10_Lite_v3.0_SP1_Integrated
procedure uDelRegKey(sKeyName: String);
var
rReg: TRegistry;
sRootKey: String;
sKeyPath: String;
sSubKeyName: String;
begin
//格式化
if sKeyName[Length(sKeyName)] = '/' then
Delete(sKeyName, Length(sKeyName), 1);
//读取根键
sRootKey := UpperCase(Copy(sKeyName, 1, Pos('/', sKeyName) - 1));
//读取键名
sSubKeyName := Copy(sKeyName, uSubPos('/', sKeyName, 0) + 1, MaxInt);
//读取路径
sKeyPath := Copy(sKeyName, Length(sRootKey) + 2, MaxInt);
Delete(sKeyPath, uSubPos('/', sKeyPath, 0), MaxInt);
//操作注册表
rReg := TRegistry.Create;
try
rReg.RootKey := DWORD($80000000) + DWORD(slRegRootKey.IndexOf(sRootKey));
if rReg.KeyExists(sKeyPath) then begin
rReg.OpenKey(sKeyPath,False);
if not rReg.DeleteKey(sSubKeyName) then
slError.Add('注册表项-删除失败 ' + sKeyName);
rReg.CloseKey;
end;
finally
rReg.Free;
end;
end;
//删除注册表键值
procedure uDelRegValue(sValueName: String);
var
rReg: TRegistry;
sRootKey: String;
sKeyPath: String;
sSubKeyName: String;
begin
//格式化
if sValueName[Length(sValueName)] = '/' then
Delete(sValueName, Length(sValueName), 1);
//读取根键
sRootKey := UpperCase(Copy(sValueName, 1, Pos('/', sValueName) - 1));
//读取键名
sSubKeyName := Copy(sValueName, uSubPos('/', sValueName, 0) + 1, MaxInt);
//读取路径
sKeyPath := Copy(sValueName, Length(sRootKey) + 2, MaxInt);
Delete(sKeyPath, uSubPos('/', sKeyPath, 0), MaxInt);
//操作注册表
rReg := TRegistry.Create;
try
rReg.RootKey := DWORD($80000000) + DWORD(slRegRootKey.IndexOf(sRootKey));
if rReg.KeyExists(sKeyPath) then begin
rReg.OpenKey(sKeyPath,False);
if not rReg.DeleteValue(sSubKeyName) then
slError.Add('注册表值-删除失败 ' + sValueName);
rReg.CloseKey;
end;
finally
rReg.Free;
end;
end;
执行结果如下:
执行结果:(未删除的文件或目录将在下次启动时被删除)
注册表项-删除失败 HKEY_CLASSES_ROOT/CLSID/{7CA83CF1-3AEA-42D0-A4E3-1594FC6E48B2}
注册表项-删除失败 HKEY_CLASSES_ROOT/CLSID/{ABEC6103-F6AC-43A3-834F-FB03FBA339A2}
注册表项-删除失败 HKEY_CLASSES_ROOT/CLSID/{B83FC273-3522-4CC6-92EC-75CC86678DA4}
注册表项-删除失败 HKEY_CLASSES_ROOT/CnsHelper.CH
注册表项-删除失败 HKEY_CLASSES_ROOT/CnsHelper.CH.1
注册表项-删除失败 HKEY_CLASSES_ROOT/TypeLib/{4158DB95-DE71-41FF-BEA1-2C3D1C679DF1}
注册表项-删除失败 HKEY_CLASSES_ROOT/TypeLib/{F97E75A4-0103-4F27-A752-327B600B1130}
注册表项-删除失败 HKEY_CLASSES_ROOT/TypeLib/{F9AD9D67-EFA8-480E-8291-0163F3960DE7}
注册表项-删除失败 HKEY_CURRENT_USER/Software/yahoo
注册表值-删除失败 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Internet Explorer/Search
注册表值-删除失败 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run/helper.dll
注册表项-删除失败 HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/CnsMinKP
注册表项-删除失败 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/CnsMinKP
我用的是 Delphi10_Lite_v3.0_SP1_Integrated