如何使用SHCopyKey函数复制注册表中所有子项内容?

dejoy 2009-05-23 03:41:26
我要求使用WinApi来操作注册表,我想把HKEY_LOCAL_MACHINE\SOFTWARE\Test下的所有子键及内容复制到HKEY_CURRENT_USER\SOFTWARE\Test,尝试使用 SHCopyKey(HKEY_LOCAL_MACHINE,PChar('SOFTWARE\Test'),HKEY_CURRENT_USER, 0);并不成功,
请教各位应该如何写,如有类似例程不胜感激。
...全文
270 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dejoy 2009-05-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dejoy 的回复:]
我的代码执行并不成功,不知何故,win2003 sp2.
没有相关示例,自己摸索了半天,终于成功了,原来是在调用SHCopyKeyA前要用RegCreateKey或RegOpenKey先打开注册表项,如下代码经测试成功,贴出来以资后人。

Delphi(Pascal) codefunction RegCopyKey_BySHCopyKey(hkeySrc: HKEY; szSrcSubKey: string; hkeyDest: HKEY;
szDestSubKey: String; RecurseSubKeys:Boolean = True) : Boolean;
var
hReg: HKEY;
begin
if…
[/Quote]
2楼的方法即我的方法:
SHCopyKey(HKEY_LOCAL_MACHINE,PChar('SOFTWARE\Test'),HKEY_CURRENT_USER, 0); 结果并不成功,正确的方法请看我前面的回复...
结贴..
dejoy 2009-05-24
  • 打赏
  • 举报
回复
Delphi不支持简化的HKLM,调用修正如下
//调用
RegCopyKey_BySHCopyKey(HKEY_LOCAL_MACHINE, 'SOFTWARE\Test', HKEY_CURRENT_USER, 'SOFTWARE\Test', True);
dejoy 2009-05-24
  • 打赏
  • 举报
回复
我的代码执行并不成功,不知何故,win2003 sp2.
没有相关示例,自己摸索了半天,终于成功了,原来是在调用SHCopyKeyA前要用RegCreateKey或RegOpenKey先打开注册表项,如下代码经测试成功,贴出来以资后人。
function RegCopyKey_BySHCopyKey(hkeySrc: HKEY; szSrcSubKey: string; hkeyDest: HKEY;
szDestSubKey: String; RecurseSubKeys:Boolean = True) : Boolean;
var
hReg: HKEY;
begin
if RegCreateKey(hkeyDest, PChar(szDestSubKey), hReg) = ERROR_SUCCESS then
begin
Result := SHCopyKey(hkeySrc, PChar(szSrcSubKey), hReg, 0) = ERROR_SUCCESS;
RegCloseKey(hReg);
end;
end;
//调用
RegCopyKey_BySHCopyKey(HKLM, 'SOFTWARE\Test', HKCU, 'SOFTWARE\Test', True);

gyk120 2009-05-24
  • 打赏
  • 举报
回复
为什么我的也成功了,楼主是什么版本?7还是2000+?
starluck 2009-05-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dejoy 的回复:]
Delphi不支持简化的HKLM,调用修正如下

Delphi(Pascal) code//调用
RegCopyKey_BySHCopyKey(HKEY_LOCAL_MACHINE, 'SOFTWARE\Test', HKEY_CURRENT_USER, 'SOFTWARE\Test', True);
[/Quote]

不支持吗? 回头研究下。
lobtao 2009-05-24
  • 打赏
  • 举报
回复
收藏之 http://hi.baidu.com/lobtao/blog/item/39ac974bd8febff883025c81.html
dejoy 2009-05-24
  • 打赏
  • 举报
回复
我说的delphi不支持的是:
RegCopyKey_BySHCopyKey(HKLM, 'SOFTWARE\Test', HKCU, 'SOFTWARE\Test', True);
以下是支持的:
RegCopyKey_BySHCopyKey(HKEY_LOCAL_MACHINE, 'SOFTWARE\Test', HKEY_CURRENT_USER, 'SOFTWARE\Test', True);

我上面的帖子中已声明我的平台是win2003 + sp2
duduxia 2009-05-24
  • 打赏
  • 举报
回复
收藏了。哈哈。
iqyely 2009-05-24
  • 打赏
  • 举报
回复
非常有用,收藏,谢谢。
老之 2009-05-23
  • 打赏
  • 举报
回复
你的代码没有问题,刚刚试了一下是可以复制的

function SHCopyKeyA(hkeySrc: HKEY; szSrcSubKey: LPCTSTR; hkeyDest: HKEY; fReserved: DWORD): Longint; stdcall;external 'shlwapi.dll';

if SHCopyKeyA(HKEY_CURRENT_USER, PChar('Wind6'), HKEY_LOCAL_MACHINE, 0) = ERROR_SUCCESS then
ShowMessage('y')
else
ShowMessage('n');
dejoy 2009-05-23
  • 打赏
  • 举报
回复
只使用纯WinApi,不使用Deplphi的注册表类。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧