Показать полную графическую версию : запись аргументов в формате файлов INF
Исходный текст файла:
[Version]
Signature=$Windows NT$
[DefaultInstall]
AddReg=Add.Reg
[Add.Reg]
HKLM,"Software\Classes\FSTFile\Shell\Open\Command","",0x00004000,"C:\FL.exe" "%1"
Нужно изменить на такое:
HKLM,"Software\Classes\FSTFile\Shell\Open\Command","",0x00004000,"D:\zzz\zzz\FL.exe" "%1" %*
А так же изменить SubKey: "Software\Classes\FSTFile\Shell\Open\Command" и тип данных: 0x00004000 на другие значения.
Если посмотреть на формат, то получается:
ROOT, SubKey, KeyName, Type, значение...
с последним параметром могут быть сложности, так как он зависит от типа данных и может содержать пробелы и всякие знаки...
Вообщем кто имеет что сказать? :)
Вообщем кто имеет что сказать? »
Не понятно, в чём у Вас, собственно, проблема.
Например, в файл
D:\DVD\i386\HIVESYS.INF
в секцию
[AddReg]
нужно добавить строки:
HKLM,"SYSTEM\CurrentControlSet\Services\VgaSave\Device0","DefaultSettings.BitsPerPel",0x00010001,32
HKLM,"SYSTEM\CurrentControlSet\Services\VgaSave\Device0","DefaultSettings.XResolution",0x00010001,1024
HKLM,"SYSTEM\CurrentControlSet\Services\VgaSave\Device0","DefaultSettings.YResolution",0x00010001,768
HKLM,"SYSTEM\CurrentControlSet\Control\Video\{23A77BF7-ED96-40EC-AF06-9B1F4867732A}\0000","DefaultSettings.BitsPerPel",0x00010001,32
HKLM,"SYSTEM\CurrentControlSet\Control\Video\{23A77BF7-ED96-40EC-AF06-9B1F4867732A}\0000","DefaultSettings.XResolution",0x00010001,1024
HKLM,"SYSTEM\CurrentControlSet\Control\Video\{23A77BF7-ED96-40EC-AF06-9B1F4867732A}\0000","DefaultSettings.YResolution",0x00010001,768
Но если там уже есть эти параметры реестра, то нужно только изменить их значения чтобы строки не дублировались.
Это типично для формата INI, только здесь отсутствует знак равенства: DefaultSettings.BitsPerPel=32
Нужна функция или процедура чтобы записывать данные в файл в формате: »
Примерно так:
_RegFileWrite(@ScriptDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@scriptdir) & '\File.reg', 'Add.Reg', 1, 'данные... 0x00000000 | "C:\zzzz" | 00 01 02 03 итп.')
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _RegFileWrite($sFile, $sSect, $iKey, $sValue)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sReadFile, $sReadSect, $aSplit, $sTmpSect, $i, $hFile
$sReadFile = FileRead (http://www.autoitscript.com/autoit3/docs/functions/FileRead.htm)($sFile)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) @extended (http://www.autoitscript.com/autoit3/docs/macros.htm#@extended) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
$sReadSect = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sReadFile, "(?s).*?(\Q[" & $sSect & "]\E.*?)[\r\n]*(\[.*|$)", "\1")
$aSplit = StringSplit (http://www.autoitscript.com/autoit3/docs/functions/StringSplit.htm)(StringStripCR (http://www.autoitscript.com/autoit3/docs/functions/StringStripCR.htm)($sReadSect), @LF (http://www.autoitscript.com/autoit3/docs/macros.htm#@lf))
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aSplit[0]
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $i = $iKey + 1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$sTmpSect &= $sValue & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf)
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
$sTmpSect &= $aSplit[$i] & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
$sReadFile = StringReplace (http://www.autoitscript.com/autoit3/docs/functions/StringReplace.htm)($sReadFile, $sReadSect, StringTrimRight (http://www.autoitscript.com/autoit3/docs/functions/StringTrimRight.htm)($sTmpSect, 2))
$hFile = FileOpen (http://www.autoitscript.com/autoit3/docs/functions/FileOpen.htm)($sFile, 2)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $hFile = -1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(2)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
FileWrite (http://www.autoitscript.com/autoit3/docs/functions/FileWrite.htm)($hFile, $sReadFile)
FileClose (http://www.autoitscript.com/autoit3/docs/functions/FileClose.htm)($hFile)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)
а продолжение можно попросить?
Найти:
[AddReg]
HKLM,"SYSTEM\CurrentControlSet\Services\VgaSave\Device0","DefaultSettings.BitsPerPel"
и добавить значение:
,0x00010001,32
должно получиться так:
[AddReg]
HKLM,"SYSTEM\CurrentControlSet\Services\VgaSave\Device1","DefaultSettings.BitsPerPel",0x00010001,16
HKLM,"SYSTEM\CurrentControlSet\Services\VgaSave\Device2","DefaultSettings.BitsPerPel",0x00010001,16
; ...
HKLM,"SYSTEM\CurrentControlSet\Services\VgaSave\Device0","DefaultSettings.BitsPerPel",0x00010001,32
; ...
HKLM,"SYSTEM\CurrentControlSet\Services\VgaSave\Device0","zzDefaultSettings.BitsPerPel",0x00010001,16
; ...
Если файл не существует его нужно создать, если секция не существует её нужно создать, если строка не найдена её нужно создать.
Я не сразу сообразил, прошу прощения, тут похоже лучше всего поделить строку на две части, для поиска взять всю ссылку реестра,
а для редактирования значение и тип параметра, так как значение всегда привязанно к типу данных.
И обязательно нужен поиск, так как указание номера строки неудобно в больших файлах когда номера строк вообще не известны и не фиксированны.
Не знаю насколько это сложно, но мне бы хотелось такой скрипт иметь.
продолжение можно попросить? »
Попросить можно, но вот не знаю кто это реализует, у меня лично ушло слишком много времени на попытку, т.ч я пока пас, сорри :(
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.