我要求使用WinApi来操作注册表,我想把HKEY_LOCAL_MACHINE\SOFTWARE\Test下的所有子键及内容复制到HKEY_CURRENT_USER\SOFTWARE\Test,尝试使用  SHCopyKey(HKEY_LOCAL_MACHINE,PChar('SOFTWARE\Test'),HKEY_CURRENT_USER, 0);并不成功,
请教各位应该如何写,如有类似例程不胜感激。

解决方案 »

  1.   

    只使用纯WinApi,不使用Deplphi的注册表类。  
      

  2.   

    你的代码没有问题,刚刚试了一下是可以复制的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');
      

  3.   

    我的代码执行并不成功,不知何故,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);
      

  4.   

    Delphi不支持简化的HKLM,调用修正如下
    //调用
    RegCopyKey_BySHCopyKey(HKEY_LOCAL_MACHINE, 'SOFTWARE\Test', HKEY_CURRENT_USER, 'SOFTWARE\Test', True);
      

  5.   

    收藏之 http://hi.baidu.com/lobtao/blog/item/39ac974bd8febff883025c81.html
      

  6.   

    我说的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
      

  7.   

    2楼的方法即我的方法:
    SHCopyKey(HKEY_LOCAL_MACHINE,PChar('SOFTWARE\Test'),HKEY_CURRENT_USER, 0); 结果并不成功,正确的方法请看我前面的回复...
    结贴..