crashtuak
12-12-2009, 15:26
Прошу показать пример на конкретной задачи:
Нужно скопировать раздел "HKEY_LOCAL_MACHINE\SOFTWARE\Diskeeper Corporation\" в "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Diskeeper Corporation\" с перезаписью всех существующих параметров. Кто поможет?
FlatX007
12-12-2009, 16:08
А консольные команды ни кто не отменял :)
REG COPY /? - справка по команде.
Расширенная библиотека для работы с реестром (http://creator-lab.ucoz.ru/load/3-1-0-49)
Пример с её использованием:
#include <Array.au3>
#include <Registry_UDF.au3>
$aArr = _RegEnumKeys2Array("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run")
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aArr[0][0]
$sPath = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($aArr[$i][0], "\\Run\\", "\\Run_Test\\") ;Копируем в Run_Test
$sPath = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sPath, "\\[^\\]*$", "")
$sKey = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($aArr[$i][0], "^.*\\", "")
$sKey = StringReplace (http://www.autoitscript.com/autoit3/docs/functions/StringReplace.htm)($sKey, "!", "! ") ;этот символ на конце почему то блокирует запись
$sRet = RegWrite (http://www.autoitscript.com/autoit3/docs/functions/RegWrite.htm)($sPath, $sKey, $aArr[$i][2], $aArr[$i][1])
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
может вместо копирования создать символическую ссылку на нужный ключ реестра?
crashtuak
28-12-2009, 19:42
Creat0R, спасибо, ваш вариант работает идеально.
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
Тут важно чтобы приложения были 64-битными, иначе некорректно может отображаться реестр.
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC