Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Реестр - копирование всего в другой

Ответить
Настройки темы
[решено] Реестр - копирование всего в другой

Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25


Конфигурация

Профиль | Отправить PM | Цитировать


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

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).


Отправлено: 15:26, 12-12-2009

 

Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 16:08, 12-12-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


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

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

Код: Выделить весь код
#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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:09, 12-12-2009 | #3


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


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

Отправлено: 04:05, 15-12-2009 | #4


Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25

Профиль | Отправить PM | Цитировать


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

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).


Отправлено: 19:42, 28-12-2009 | #5


Аватара для Yashied

Старожил


Сообщения: 206
Благодарности: 88

Профиль | Отправить PM | Цитировать


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

Отправлено: 01:39, 30-12-2009 | #6


Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


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

-------
Полезное сообщение


Отправлено: 22:11, 30-12-2009 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Реестр - копирование всего в другой

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - как мне для студента закрыть доступ на другой локальный диск, закрыть доступ к реестр nisan Microsoft Windows 2000/XP 10 12-09-2009 21:14
CMD/BAT - [решено] Поиск каталога и копирование всего его содержимого desk Скриптовые языки администрирования Windows 4 01-07-2009 14:28
C/C++ - [решено] Всего один цикл Balbec Программирование и базы данных 4 16-05-2008 15:09
Разное - [решено] Всего один вопрос =) Balbec Программирование и базы данных 2 14-05-2008 12:56
[решено] Копирование WIN98 с одного ж.диска на другой Evgen77 Microsoft Windows 95/98/Me (архив) 21 06-12-2006 00:22




 
Переход