PDA

Показать полную графическую версию : Работа с реестром


TERMINAL
20-02-2009, 12:43
Как возможно с помощью Autolt сохранить целую ветку реестра и по возможности её востановить ?

semiono
20-02-2009, 13:44
ShellExecute("reg","save HKLM\software a:\backup.dat", @SystemDir, "", "@SW_HIDE")
:) сам не проверял, может с ошибками.

TERMINAL
20-02-2009, 13:48
Та да, какието ошибки вылазят...

Creat0R
20-02-2009, 14:26
какието ошибки вылазят »
Какие именно?

Кстати, немного по теме. Есть расширенная библиотека для работы с реестром (http://creator-lab.ucoz.ru/load/3-1-0-49).

semiono
20-02-2009, 14:49
какието ошибки вылазят... »
может тогда на regedit /e c:\hives заменить?
и может там ещё с правами доступа проблеммы.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
Ну не овтопега ради, напишу здесь, ибо не знаю как назвать!
Нужно:
$VST = RegRead("HKLM\Software\VST","VSTPluginPath","REG_SZ")
If $VST = 0 Then
$VST = "myOtherString"
как это по человечески оформить, или это итак верно? Суть я думаю ясна, но скорее это криво с точки зрения языка?
(всмысле = 0 это типа если не существует такого реестра value или key итп)
-------

кстати, еслиб это был InnoSetup я бы здесь применил Flags: createvalueifdoesntexist и создал бы value,
! хотя в любом случае, мне потом это как $переменная нужна чтоб как $Path подставить в GUI,

Кстати, аналог createvalueifdoesntexist тоже подскажите если это в автоит не сложно...

Creat0R
20-02-2009, 15:44
как это по человечески оформить »
Как в справке :), или вы не заглядываете в неё? в RegRead() всего два параметра.

аналог createvalueifdoesntexist тоже подскажите если это в автоит не сложно »
А какое там должно заполняться значение? В любом случае, для записи используется RegWrite().

semiono
20-02-2009, 16:37
Как в справке »
Я имею ввиду логические операторы, а не RegRead() хотя и на них справка есть, но боюсь там подобного нет
If $VST = 0 Then
$VST = "myOtherString"
Или я это корректно написал? Я даже протестить не осмелился, щас заценю, вдруг работает на самом деле!
Creat0R, я бы поизучал логический код, но там всегда примеры офтопичные, не под мои задачи...
мнеб только файлы и реестр "патчить" и более ничего не надо, :) правда условия иногда как тут возникают.

createvalueifdoesntexist - буквально создаёт value в том случае если его ещё нет, в противном случае игнорируется... в автоит тут наверное целый блок с операторами надо наворотить, чего я очень боюсь :)

Creat0R
20-02-2009, 17:07
Я даже протестить не осмелился »
А зря, сначала проверяйте, а потом пишите. Зачем просто так плодить вопросы, когда самому можно их решить? разве самому не интереснее? :)

я бы поизучал логический код, но там всегда примеры офтопичные, не под мои задачи. »
У вас по всей видимости, просто нет терпения ;)

createvalueifdoesntexist - буквально создаёт value в том случае если его ещё нет, в противном случае игнорируется »
Создаёт где, в реестре, или просто заполняет переменную, как в случае с IniRead()?

Если переменную (как я догадываюсь), тогда так:


$Var = _RegReadEx("HKEY_LOCAL_MACHINE\UnexistingKey", "ValueName", "Some Default Value")

MsgBox(4096, "_RegReadEx", _
StringFormat("Return @Error: %i\nReturn @Extended: %i\nReturn $Var: %s", @error, @extended, $Var))

Func _RegReadEx($sKeyName, $sValueName, $sDefault="")
Local $sRet_Value = RegRead($sKeyName, $sValueName)

If $sRet_Value = "" Then $sRet_Value = $sDefault

Return SetError(@error, @extended, $sRet_Value)
EndFunc

semiono
20-02-2009, 17:23
аааа! я зделал! ВЫ правы я лентяй! как всё просто на самом деле!
$VST = RegRead("HKLM\Software\VST","VSTPluginsPath")

If $VST = "" Then
$VST = @SystemDir & "\Plugins"
EndIf

MsgBox(4096,"VSTPluginPath",$VST)
Буду терпения набираться теперь!
Создаёт где, в реестре, »
да, вот кусок
Root: HKLM32; Subkey: "Software\VST"; ValueType: string; ValueName: "VSTPluginsPath";
ValueData: "{sys}\Plugins"; Flags: createvalueifdoesntexist noerror; Permissions: admins-full
очень удобные кстати флаги у инсталлера, просто добавил нужный флаг и готово, хотя там и паскаль есть,
но это когда действительно надо...

ЗЫ как бы тоже получается, что тоже решено - :)
$VST = RegRead("HKLM\Software\VST","VSTPluginsPath")
If $VST = "" Then
$VST = @SystemDir & "\Plugins"
EndIf
RegWrite("HKLM\Software\VST","VSTPluginsPath","REG_SZ",$VST)

Creat0R
20-02-2009, 19:34
да, вот кусок »
Тогда так:

#include <Registry_UDFs.au3>

$Var = _RegReadEx("HKCU\UnexistingKey", "ValueName", "Some Default Value")

MsgBox(4096, "_RegReadEx", _
StringFormat("Return @Error: %i\nReturn @Extended: %i\nReturn $Var: %s", @error, @extended, $Var))

Func _RegReadEx($sKeyName, $sValueName, $sDefault="")
Local $sRet_Value = RegRead($sKeyName, $sValueName)
If $sRet_Value = "" Then $sRet_Value = RegWrite($sKeyName, $sValueName, _RegGetExtendedType(@extended), $sDefault)

Return SetError(@error, @extended, $sRet_Value)
EndFunc

TERMINAL
15-06-2012, 11:41
Creat0R, Подскажи плз, нужно в ветке реестра (HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\hivelist','\REGISTRY\MACHINE\SYSTEM, HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\hivelist','\REGISTRY\MACHINE\SOFTWARE и HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\hivelist','\REGISTRY\USER) найти запись (\Device\HarddiskVolume2\Windows\System32\config\SYSTEM или \Device\HarddiskVolume2\Windows\System32\config\DEFAULT) и заменить HarddiskVolume2 на HarddiskVolume3, где HarddiskVolume3 это условный показать номера диска, который нужно ещё определить.
Система Windows 7.
Пробовал пока найти номера диска таким методом:
Global $HDD0=2, $HDD1=0, $HDD2=0
#Include <WinAPIEx.au3>
$tSDN = _WinAPI_GetDriveNumber("D:")
If (Not @error) And (DllStructGetData($tSDN, 'DeviceType') = 7) Then ; FILE_DEVICE_DISK = 7
$HDD1 = DllStructGetData($tSDN, 'DeviceNumber')
$HDD2 = DllStructGetData($tSDN, 'PartitionNumber')
If _WinAPI_DWordToInt($HDD2) = -1 Then
$HDD2 = 0
Else
$HDD2 -= 1
EndIf
EndIf
$HDD0=$HDD1+$HDD2+1
MsgBox(64,"HarddiskVolume",$HDD0)
;RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\hivelist','\REGISTRY\MACHINE\HARDWARE',"REG_SZ",'')
;RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\hivelist','\REGISTRY\MACHINE\BCD00000000' ,"REG_SZ",'\Device\HarddiskVolume1\Boot\BCD')
RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\hivelist','\REGISTRY\MACHINE\SYSTEM',"REG_SZ",'\Device\HarddiskVolume' & $HDD0 & '\Windows\System32\config\SYSTEM')
RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\hivelist','\REGISTRY\MACHINE\SOFTWARE',"REG_SZ",'\Device\HarddiskVolume' & $HDD0 & '\Windows\System32\config\SOFTWARE')
RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\hivelist','\REGISTRY\USER\.DEFAULT',"REG_SZ",'\Device\HarddiskVolume' & $HDD0 & '\Windows\System32\config\DEFAULT')
RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\hivelist','\REGISTRY\MACHINE\SECURITY',"REG_SZ",'\Device\HarddiskVolume' & $HDD0 & '\Windows\System32\config\SECURITY')
RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\hivelist','\REGISTRY\MACHINE\SAM',"REG_SZ",'\Device\HarddiskVolume' & $HDD0 & '\Windows\System32\config\SAM')
RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\hivelist','\REGISTRY\USER\S-1-5-20',"REG_SZ",'\Device\HarddiskVolume' & $HDD0 & '\Windows\ServiceProfiles\NetworkService\NTUSER.DAT')
RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\hivelist','\REGISTRY\USER\S-1-5-19',"REG_SZ",'\Device\HarddiskVolume' & $HDD0 & '\Windows\ServiceProfiles\LocalService\NTUSER.DAT')
RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\hivelist','\Registry\User\S-1-5-21-2278384629-1295694906-2626142545-1000',"REG_SZ",'\Device\HarddiskVolume' & $HDD0 & '\Users\' & @UserName & '\NTUSER.DAT')
RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\hivelist','\Registry\User\S-1-5-21-2278384629-1295694906-2626142545-1000_Classes',"REG_SZ",'\Device\HarddiskVolume' & $HDD0 & '\Users\' & @UserName & '\AppData\Local\Microsoft\Windows\UsrClass.dat')
Но, я думаю, что выделенные фрагменты могут быть разными, поэтому нужен поиск.




© OSzone.net 2001-2012