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

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

Ответить
Настройки темы
запись аргументов в формате файлов INF

Аватара для semiono

Ветеран


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

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


Исходный текст файла:
Код: Выделить весь код
[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, значение...
с последним параметром могут быть сложности, так как он зависит от типа данных и может содержать пробелы и всякие знаки...

Вообщем кто имеет что сказать?

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


Отправлено: 22:56, 13-10-2011

 

Ветеран


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

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


Цитата semiono:
Вообщем кто имеет что сказать? »
Не понятно, в чём у Вас, собственно, проблема.

Отправлено: 02:12, 14-10-2011 | #2



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

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


Аватара для semiono

Ветеран


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

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


Например, в файл
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

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


Последний раз редактировалось semiono, 14-10-2011 в 03:45.


Отправлено: 03:17, 14-10-2011 | #3


Аватара для Creat0R

Must AutoIt


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

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


Цитата semiono:
Нужна функция или процедура чтобы записывать данные в файл в формате: »
Примерно так:

Код: Выделить весь код
_RegFileWrite(@ScriptDir & '\File.reg', 'Add.Reg', 1, 'данные... 0x00000000 | "C:\zzzz" | 00 01 02 03 итп.')

Func _RegFileWrite($sFile, $sSect, $iKey, $sValue)
    Local $sReadFile, $sReadSect, $aSplit, $sTmpSect, $i, $hFile

    $sReadFile = FileRead($sFile)

    If Not @extended Then
        Return SetError(1)
    EndIf

    $sReadSect = StringRegExpReplace($sReadFile, "(?s).*?(\Q[" & $sSect & "]\E.*?)[\r\n]*(\[.*|$)", "\1")
    $aSplit = StringSplit(StringStripCR($sReadSect), @LF)

    For $i = 1 To $aSplit[0]
        If $i = $iKey + 1 Then
            $sTmpSect &= $sValue & @CRLF
        Else
            $sTmpSect &= $aSplit[$i] & @CRLF
        EndIf
    Next

    $sReadFile = StringReplace($sReadFile, $sReadSect, StringTrimRight($sTmpSect, 2))

    $hFile = FileOpen($sFile, 2)

    If $hFile = -1 Then
        Return SetError(2)
    EndIf

    FileWrite($hFile, $sReadFile)
    FileClose($hFile)
EndFunc

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

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

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

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

Отправлено: 03:55, 14-10-2011 | #4


Аватара для semiono

Ветеран


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

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


а продолжение можно попросить?

Найти:
[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,1 6
; ...

Если файл не существует его нужно создать, если секция не существует её нужно создать, если строка не найдена её нужно создать.

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

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


Последний раз редактировалось semiono, 14-10-2011 в 22:42.


Отправлено: 22:31, 14-10-2011 | #5


Аватара для Creat0R

Must AutoIt


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

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


Цитата semiono:
продолжение можно попросить? »
Попросить можно, но вот не знаю кто это реализует, у меня лично ушло слишком много времени на попытку, т.ч я пока пас, сорри

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

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

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


Отправлено: 00:22, 19-10-2011 | #6



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Сохранение файлов MS Office 2007 в формате 2003 vxor Автоматическая установка приложений 1 17-01-2011 20:08
объединение inf файлов netsupport Хочу все знать 5 14-07-2010 09:45
Разное - [решено] Ассоциирование файлов в xml формате Alex_cs_gsp Хочу все знать 4 19-06-2010 11:41
Теория - Число функций n аргументов? Gamover jr Программирование и базы данных 13 30-10-2007 09:25
Редактирование *.inf файлов драйверов. ghostman Автоматическая установка Windows 2000/XP/2003 4 25-01-2006 10:06




 
Переход