Компьютерный форум 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=132575)

TERMINAL 20-02-2009 12:43 1043917

Работа с реестром
 
Как возможно с помощью Autolt сохранить целую ветку реестра и по возможности её востановить ?

semiono 20-02-2009 13:44 1043974

Код:

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

TERMINAL 20-02-2009 13:48 1043983

Та да, какието ошибки вылазят...

Creat0R 20-02-2009 14:26 1044011

Цитата:

Цитата TERMINAL
какието ошибки вылазят »

Какие именно?

Кстати, немного по теме. Есть расширенная библиотека для работы с реестром.

semiono 20-02-2009 14:49 1044027

Цитата:

Цитата TERMINAL
какието ошибки вылазят... »

может тогда на 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 1044077

Цитата:

Цитата semiono
как это по человечески оформить »

Как в справке :), или вы не заглядываете в неё? в RegRead() всего два параметра.

Цитата:

Цитата semiono
аналог createvalueifdoesntexist тоже подскажите если это в автоит не сложно »

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

semiono 20-02-2009 16:37 1044125

Цитата:

Цитата Creat0R
Как в справке »

Я имею ввиду логические операторы, а не RegRead() хотя и на них справка есть, но боюсь там подобного нет
Код:

If $VST = 0 Then
$VST = "myOtherString"

Или я это корректно написал? Я даже протестить не осмелился, щас заценю, вдруг работает на самом деле!
Creat0R, я бы поизучал логический код, но там всегда примеры офтопичные, не под мои задачи...
мнеб только файлы и реестр "патчить" и более ничего не надо, :) правда условия иногда как тут возникают.

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

Creat0R 20-02-2009 17:07 1044154

Цитата:

Цитата semiono
Я даже протестить не осмелился »

А зря, сначала проверяйте, а потом пишите. Зачем просто так плодить вопросы, когда самому можно их решить? разве самому не интереснее? :)

Цитата:

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

У вас по всей видимости, просто нет терпения ;)

Цитата:

Цитата semiono
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 1044177

аааа! я зделал! ВЫ правы я лентяй! как всё просто на самом деле!
Код:

$VST = RegRead("HKLM\Software\VST","VSTPluginsPath")

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

MsgBox(4096,"VSTPluginPath",$VST)

Буду терпения набираться теперь!
Цитата:

Цитата Creat0R
Создаёт где, в реестре, »

да, вот кусок
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 1044283

Цитата:

Цитата semiono
да, вот кусок »

Тогда так:

Код:

#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 1934624

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',"R EG_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',"RE G_SZ",'\Device\HarddiskVolume' & $HDD0 & '\Windows\System32\config\SOFTWARE')
RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\hivelist','\REGISTRY\USER\.DEFAULT',"REG_S Z",'\Device\HarddiskVolume' & $HDD0 & '\Windows\System32\config\DEFAULT')
RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\hivelist','\REGISTRY\MACHINE\SECURITY',"RE G_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')

Но, я думаю, что выделенные фрагменты могут быть разными, поэтому нужен поиск.


Время: 03:51.

Время: 03:51.
© OSzone.net 2001-