Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Реестр - копирование всего в другой (http://forum.oszone.net/showthread.php?t=159988)

crashtuak 12-12-2009 15:26 1293381

Реестр - копирование всего в другой
 
Прошу показать пример на конкретной задачи:
Нужно скопировать раздел "HKEY_LOCAL_MACHINE\SOFTWARE\Diskeeper Corporation\" в "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Diskeeper Corporation\" с перезаписью всех существующих параметров. Кто поможет?

FlatX007 12-12-2009 16:08 1293414

А консольные команды ни кто не отменял :)

REG COPY /? - справка по команде.

Creat0R 12-12-2009 23:09 1293713

Расширенная библиотека для работы с реестром

Пример с её использованием:

Код:

#include <Array.au3>
#include <Registry_UDF.au3>

$aArr = _RegEnumKeys2Array("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run")

For $i = 1 To $aArr[0][0]
    $sPath = StringRegExpReplace($aArr[$i][0], "\\Run\\", "\\Run_Test\\") ;Копируем в Run_Test
    $sPath = StringRegExpReplace($sPath, "\\[^\\]*$", "")
    $sKey = StringRegExpReplace($aArr[$i][0], "^.*\\", "")
    $sKey = StringReplace($sKey, "!", "! ") ;этот символ на конце почему то блокирует запись

    $sRet = RegWrite($sPath, $sKey, $aArr[$i][2], $aArr[$i][1])
Next


amel27 15-12-2009 04:05 1295521

может вместо копирования создать символическую ссылку на нужный ключ реестра?

crashtuak 28-12-2009 19:42 1306380

Creat0R, спасибо, ваш вариант работает идеально.

Yashied 30-12-2009 01:39 1307317

IMHO так быстрее и надежнее.

Код:

Global Const $HKEY_LOCAL_MACHINE = 0x80000002


$hKey = _WinAPI_RegCreateKey($HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\Diskeeper Corporation')
_WinAPI_RegCopyTree($HKEY_LOCAL_MACHINE, 'SOFTWARE\Diskeeper Corporation', $hKey)
_WinAPI_RegCloseKey($hKey)

Func _WinAPI_RegCloseKey($hKey)

    Local $Ret = DllCall('advapi32.dll', 'long', 'RegCloseKey', 'ulong_ptr', $hKey)

    If @error Then
        Return SetError(1, 0, 0)
    Else
        If $Ret[0] Then
            Return SetError(1, $Ret[0], 0)
        EndIf
    EndIf
    Return 1
EndFunc  ;==>_WinAPI_RegCloseKey

Func _WinAPI_RegCopyTree($hSrcKey, $sSrcSubKey, $hDestKey)

    Local $Ret = DllCall('shlwapi.dll', 'long', 'SHCopyKeyW', 'ulong_ptr', $hSrcKey, 'wstr', $sSrcSubKey, 'ulong_ptr', $hDestKey, 'dword', 0)

    If @error Then
        Return SetError(1, 0, 0)
    Else
        If $Ret[0] Then
            Return SetError(1, $Ret[0], 0)
        EndIf
    EndIf
    Return 1
EndFunc  ;==>_WinAPI_RegCopyTree

Func _WinAPI_RegCreateKey($hKey, $sSubKey = '', $iDesired = 0xF003F, $iOptions = 0, $tSecurity = 0)

    Local $Ret = DllCall('advapi32.dll', 'long', 'RegCreateKeyExW', 'ulong_ptr', $hKey, 'wstr', $sSubKey, 'dword', 0, 'ptr', 0, 'dword', $iOptions, 'dword', $iDesired, 'ptr', DllStructGetPtr($tSecurity), 'ulong_ptr*', 0, 'dword*', 0)

    If @error Then
        Return SetError(1, 0, 0)
    Else
        If $Ret[0] Then
            Return SetError(1, $Ret[0], 0)
        EndIf
    EndIf
    Return SetError(0, Number($Ret[9] = 1), $Ret[8])
EndFunc  ;==>_WinAPI_RegCreateKey


semiono 30-12-2009 22:11 1307925

Тут важно чтобы приложения были 64-битными, иначе некорректно может отображаться реестр.


Время: 16:09.

Время: 16:09.
© OSzone.net 2001-