请问如何将注册表中某个键中的所有内容导入到C;\1.reg中,实现的功能就如同用鼠标选中某个key后(注意是左边的某个key,不是右边的某个value),点击菜单的导出功能
解决方案 »
- 快疯掉了关于TStringList分割文本的问题
- DELPHI写出的程序运行时不能开QQ,飞信,否则就出错,请问是什么原因
- 郁闷!到交货时,客户居然提出修改,修改程序还可以,更恐怖的是要修改到数据库的数据结构!死了***
- 急求一关于汉字的繁体与简体的转换算法
- 关于排版的问题,高手指教
- 如何进入钩子的回调函数进行单步调试??(在线)
- 如何编写光盘自启动程序?
- 盗密--windows2000 Advanced Server
- 關於模糊查詢.請各位幫忙!
- 请看下面的程序,帮忙找一个worddocment的属性,有代码
- 怎么产生1ms的事件,timer控件只能去到56ms
- Filter 报错,求救各位大侠!
成功返回True,否则返回False.
所以我为楼主推荐另一种方法:
var
RunFile:string;
begin
RunFile:='Regedit /E C:\1.reg HKEY_CURRENT_USER\Software\ODBC';
WinExec(pchar(RunFile),SW_HIDE);
end;
或者你也可以用API:RegSaveKey试试
Reg:=TRegistry.Create;
Reg.rootkey:=HKEY_CURRENT_USER;
Reg.savekey('software\odbc','c:\1.reg')
var
vKey:String;
begin
vKey:='HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run';
WinExec(PChar(format('Regedit /E C:\a.reg %s',[vKey])),SW_HIDE);
end;//以上经过测试Regedit的运行参数
REGEDIT [/L:system] [/R:user] filename1
REGEDIT [/L:system] [/R:user] /C filename2
REGEDIT [/L:system] [/R:user] /E filename3 [regpath] /L:system Specifies the location of the SYSTEM.DAT file.
/R:user Specifies the location of the USER.DAT file.
filename1 Specifies the file(s) to import into the regist
/C filename2 Specifies the file to create the registry from.
/E filename3 Specifies the file to export the registry to.
regpath Specifies the starting registry key to export from.
(Defaults to exporting the entire registry).
/S (Windows) Silent - no message on completion.
如:HKEY_CURRENT_USER\Software\silver pacs,请注意这里silver pacs多了个空格,就导不出去了,
请问如何解决
var
vKey:String;
begin
vKey:='HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\';
WinExec(PChar(format('Regedit /E C:\a.reg "%s"',[vKey])),SW_HIDE); //加双引号
end;//
RunFile:string;
begin
RunFile:='Regedit /E C:\1.reg "HKEY_CURRENT_USER\Software\silver pacs"';
WinExec(pchar(RunFile),SW_HIDE);
end;
请参考下面的单元:
用法:
ExportRegistryToFile(HKEY_CURRENT_USER,'SoftWare\Borland','C:\aaaa.reg');
///FileName:RegExport.pas
unit RegExport;interface
uses
windows, registry, Classes, sysutils;procedure ExportRegistryToFile(const Root: HKEY; const Key: string; const FileName: TFileName);implementationfunction DBLBackSlash(T: string): string;
///本函数用来把一个'\'变成两个'\\',符合REG文件格式
var
K : Longint;
begin
Result := T;
for K := Length(T) downto 1 do
if Result[k] = '\' then insert('\', Result, K);
end;{$I-}procedure ExportRegistryToFile(const Root: HKEY; const Key: string; const FileName: TFileName);
var
Reg : TRegistry;
F : TextFile;
p : PChar;
FKey : string; procedure ProcessBranch(R: string); ///递归处理子键
var
Values, Keys : TStringList;
i, j, k : longint;
s, t : string;
begin
WriteLn(F);
case Root of
HKEY_CLASSES_ROOT: s := 'HKEY_CLASSES_ROOT';
HKEY_CURRENT_USER: s := 'HKEY_CURRENT_USER';
HKEY_LOCAL_MACHINE: s := 'HKEY_LOCAL_MACHINE';
HKEY_USERS: s := 'HKEY_USERS';
HKEY_PERFORMANCE_DATA: s := 'HKEY_PERFORMANCE_DATA';
HKEY_CURRENT_CONFIG: s := 'HKEY_CURRENT_CONFIG';
HKEY_DYN_DATA: s := 'HKEY_DYN_DATA';
end;
WriteLn(F, '[' + s + '\' + R + ']'); ///like [HKEY_CURRENT_USER\....\....\]
Reg.CloseKey;
Reg.OpenKey(R, False);
Values := TStringList.Create;
Keys := TStringList.Create;
Reg.GetValueNames(Values);
Reg.GetKeyNames(Keys);
for i := 0 to Values.Count - 1 do
begin
s := Values.Strings[i];
t := s;
if s = '' then s := '@' else s := '"' + s + '"';
Write(F, DBLBackSlash(s) + '=');
case Reg.GetDataType(t) of
rdString, rdExpandString: Writeln(F, '"' + DBLBackSlash(Reg.ReadString(t)) + '"');
rdInteger: Writeln(F, 'dword:' + IntToHex(Reg.ReadInteger(t), 8));
rdBinary: begin
Write(F, 'hex:');
j := Reg.GetDataSize(t);
GetMem(p, j);
Reg.ReadBinaryData(t, p^, j);
for k := 0 to j - 1 do
begin
Write(F, IntToHex(byte(p[k]), 2));
if k <> j - 1 then
begin
Write(F, ',');
if (K > 0) and ((K mod 25) = 0) then
WriteLn(F, '\');
end; ///End if K<>j-1
end; ///For
FreeMem(p, j);
WriteLn(F);
end;
else ///case else
WriteLn(F, '""'); ///数据非法!
end; /// End Case
end; ///end For
Reg.CloseKey;
Values.Free;
for i := 0 to Keys.Count - 1 do
if R <> '' then
ProcessBranch(R + '\' + Keys.Strings[i])
else
ProcessBranch(Keys[i]);
Keys.Free;
end;begin
FKey := Key;
if FKey <> '' then
if Key[Length(FKey)] = '\' then
SetLength(FKey, Length(FKey) - 1);
AssignFile(F, FileName);
ReWrite(F);
if IOResult <> 0 then exit;
WriteLn(F, 'REGEDIT4');
Reg := TRegistry.Create;
try
Reg.RootKey := Root;
ProcessBranch(FKey);
finally
Reg.Free;
Close(F);
end;
end;
{$I+}end.