Что нового

[Реестр] RegToScript

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Скажите а какие перспективы вы ведите у вашей утилиты? Где она может приминаться?
---
Кстати, выбор места сохранения файла не увенчался успехом :( Сохраняет туда, откуда читает файл. Only :(
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Garrett
Скажите а какие перспективы вы ведите у вашей утилиты? Где она может приминаться?
Во первых утилита не моя, автор NIKZZZZ, на руборде можно задать ему вопросы по развитию и багах программы.
Второе, на счёт персективы: как-то я пытался вручную писать данные для реестра, это было издевательство над собой. Просто руки опускались со словами "нафига мне это надо". А теперь я просто экспортирую данные реестра, конвертирую в скрипт. Конкретное применение - полупортабельный софт, можно манипулировать реестром как угодно, добавить данные, стереть данные, добавить данные учитывая текущий каталог, то есть в данных реестра указать переменные текущего каталога. И всё это делается автоматизированно, сначала конвертировать, потом выполнить поиск-замену в коде.
А теперь более конкретный пример: Ассоциатор программ. Ручками бы я её не стал делать. А ещё есть несколько скриптов для LiveCD, для старта и автонастройки любой программы как независимого модуля.
Сохраняет туда, откуда читает файл.
я всегда с харда запускаю утилиту, у меня чтение поддерживается, а если не так, то зачем нужен скрипт, если сохранять данные негде?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
AZJIO [?]
Во-первых, утилита не моя, автор NIKZZZZ
Тогда извиняйте :smile:

А теперь я просто экспортирую данные реестра, конвертирую в скрипт.
Ну, экспорт и импорт, это стандартные функции RegEdit. Конвертировать в скрипт, чтобы их потом всё равно руками там править? Хотя может, я чего-то и не улавливаю :(

сначала конвертировать, потом выполнить поиск-замену в коде

А если прямо в REG файле, скриптом, сделать поиск и замену, а потом просто импортировать?


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

Это дело ясное :smile: Просто при попытке выбрать место сохранения отличное от места самого reg файла, у меня не вышло :( Утилита настойчиво предлагает сохранить файл на выходе, туда, где сам исходный файл!
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Garrett
А если прямо в REG файле, скриптом, сделать поиск и замену, а потом просто импортировать?
Ага, при установке офиса 2010 вам инсталятор предлагает "Вы тут в рег-файле сделайте замену с учётом куда вы там установили наш продукт, а потом мы продолжим установку.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
AZJIO сказал(а):
Garrett
А если прямо в REG файле, скриптом, сделать поиск и замену, а потом просто импортировать?
Ага, при установке офиса 2010 вам инсталятор предлагает "Вы тут в рег-файле сделайте замену с учётом куда вы там установили наш продукт, а потом мы продолжим установку.
Не пойму сарказма?
Вообще-то при установке инсталлятор даёт выбрать место установки.
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Garrett
Вообще-то при установке инсталлятор даёт выбрать место установки.
Данные считывается из поля ввода в переменную, а эта переменная используется в указании пути при добавлении этого пути в реестр.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Брейк!

AZJIO, вообще-то утилита довольно "мутная". Расширение файла сама не меняет, без .ini работать не хочет (сама не может что ли создать с умолчальными настройками), файл по выбранному пути не записывает, значение ключа в функцию RegWrite() всегда передает как строковое, исходного кода нет и т.д. IMHO недружелюбный интерфейс. Но идея на мой взгляд полезная.

Garrett, например я, когда пишу более или менее большую программу, то запись в реестр ее настройки, как правило оставляю на последок (не самое важное это при разработке программы). А когда доходит очередь до RegWrite(), то тут как раз эта утилита будет как нельзя кстати, поскольку 20-30 параметров вбивать в скрипт, постоянно глядя в реестр, не самое веселое занятие.

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

Guezt

Продвинутый
Сообщения
335
Репутация
82
Давно пользуюсь подобной утилитой написаной на AutouIT
от Sanja Alone которая работает без ini файла и полоагаю что написано за много времени до этой но работает она только с reg файлами и только через командную строку.http://sanjaalone.h15.ru/crta.php
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Guezt
Из описания к crta.zip
Ограничения:
Конвертируемые reg-файлы должны быть не в Unicode, а в DOS или WIN кодировке
(первая строка таких reg-файлов содержит текст REGEDIT4).
Другими словами, входной файл должен быть простым ("plain") текстом.
Для этого, на этапе экспорта данных в reg-файл, используйте команду:

regedit /ea имя_файла.reg ветка_реестра

С открытым кодом неплохой скрипт от Sigi2, но он на каждом комментарии выкидывает сообщение об ошибке.

Вот удобная оболочка для "RegToScript 2.5", использующая ключи программы.
Код:
#NoTrayIcon

Global $ini = @ScriptDir&'\RegToScript.ini'
;Проверка существования RegToScript.ini
If Not FileExists($ini) Then
	If MsgBox(4, "Выгодное предложение", 'Хотите создать необходимый RegToScript.ini' & @CRLF &'для сохранения вводимых параметров?') = 6 Then
		$fileini = FileOpen($ini, 2)
		FileWrite($fileini, '[Setup]' & @CRLF & _
'DebugText=..............' & @CRLF & @CRLF & _
'[Script_BeginText]' & @CRLF & _
'=RegHiveLoad,WB-software,%TargetDir%\i386\System32\Config\software' & @CRLF & _
'=RegHiveLoad,WB-default,%TargetDir%\i386\System32\Config\default' & @CRLF & _
'=RegHiveLoad,WB-system,%TargetDir%\i386\System32\SetupReg.hiv' & @CRLF & @CRLF & _
'[Script_Include]' & @CRLF & _
'HKLM\\SYSTEM=WB-system' & @CRLF & _
'HKLM\\SOFTWARE=WB-software' & @CRLF & _
'HKCU=WB-default' & @CRLF & _
'HKCR=WB-software\\Classes' & @CRLF & _
'HKU\\.DEFAULT=WB-default' & @CRLF & @CRLF & _
'[Script_Exclude]' & @CRLF & _
'=\b\w*mru' & @CRLF & @CRLF & _
'[Script_ReplaceData]' & @CRLF & _
'c:\\=x:\\' & @CRLF & @CRLF & _
'[Script_EndText]' & @CRLF & _
'=RegHiveUnLoad,WB-software' & @CRLF & _
'=RegHiveUnLoad,WB-default' & @CRLF & _
'=RegHiveUnLoad,WB-system' & @CRLF & @CRLF & _
'[Au3_Include]' & @CRLF & _
'HKLM=HKLM' & @CRLF & _
'HKCR=HKCR' & @CRLF & _
'HKCU=HKCU' & @CRLF & _
'HKU=HKU' & @CRLF & _
'HKCC=HKCC' & @CRLF & @CRLF & _
'[Au3_Exclude]' & @CRLF & _
'=\b\w*mru' & @CRLF & @CRLF & _
'[Au3_ReplaceData]' & @CRLF & @CRLF & _
'[Bat_Include]' & @CRLF & _
'HKLM=HKLM' & @CRLF & _
'HKCR=HKCR' & @CRLF & _
'HKCU=HKCU' & @CRLF & _
'HKU=HKU' & @CRLF & _
'HKCC=HKCC' & @CRLF & @CRLF & _
'[Bat_Exclude]' & @CRLF & _
'=\b\w*mru' & @CRLF & @CRLF & _
'[Bat_ReplaceData]' & @CRLF & @CRLF & _
'[setting]' & @CRLF & _
'type=au3' & @CRLF & _
'autoclip=0' & @CRLF & _
'autofile=1' & @CRLF)
		FileClose($fileini)
	EndIf
EndIf
;считываем RegToScript.ini
$type= IniRead ($ini, "setting", "type", "au3")
$autoclipset= IniRead ($ini, "setting", "autoclip", "0")
$autofileset= IniRead ($ini, "setting", "autofile", "1")

$Gui = GUICreate("RegToScript",  350, 140, -1, -1, -1, 0x00000010)
$StatusBar = GUICtrlCreateLabel('Строка состояния', 5,123,275,18)
GUICtrlCreateLabel ("используйте drag-and-drop", 110,1,160,18)

GUICtrlCreateLabel ("in", 10,20,9,18)
$inp_reg = GUICtrlCreateInput("", 25, 20, 280, 20) 
GUICtrlSetState(-1,8) 
$fold_reg = GUICtrlCreateButton("...", 315, 20, 27, 21)
GUICtrlSetFont (-1,13)

GUICtrlCreateLabel ("out", 3,50,15,18)
$inp_out = GUICtrlCreateInput("", 25, 50, 280, 20) 
GUICtrlSetState(-1,8) 
$fold_out = GUICtrlCreateButton("...", 315, 50, 27, 21)
GUICtrlSetFont (-1,13)


GUICtrlCreateGroup ("output", 5, 74, 170, 40)
$Au3 = GUICtrlCreateRadio("Au3", 20, 88, 38, 20)
$Bat = GUICtrlCreateRadio("Bat", 70, 88, 38, 20)
$Script = GUICtrlCreateRadio("Script", 120, 88, 50, 20)

$clipboard = GUICtrlCreateButton("clipboard", 282, 80, 60, 25)
$fileout = GUICtrlCreateButton("file", 282, 110, 60, 25)

$autoclip=GUICtrlCreateCheckbox ("auto-clipboard", 185,79,90,20)
$autofile=GUICtrlCreateCheckbox ("auto-file", 185,99,70,20)

If $autoclipset="1" Then GuiCtrlSetState($autoclip, 1)
If $autofileset="1" Then GuiCtrlSetState($autofile, 1)
If $type='au3' Then GUICtrlSetState ($Au3,1)
If $type='bat' Then GUICtrlSetState ($Bat,1)
If $type='script' Then GUICtrlSetState ($Script,1)

 
GUISetState ()

	While 1
		$msg = GUIGetMsg()
		Select
			Case $msg = -13
				If @GUI_DropID=$inp_reg Then
						GUICtrlSetData($inp_reg, @GUI_DRAGFILE)
						$aPath = StringRegExp(@GUI_DRAGFILE, "(^.*)\\(.*)\.(.*)$", 3)
						If $aPath[2]<>'reg' Then
							MsgBox(0, "Ошибка", 'Принимается только reg-файл')
							GUICtrlSetData($inp_reg, '')
							ContinueLoop
						EndIf
						GUICtrlSetData($inp_out, $aPath[0]&'\'&$aPath[1]&'.'&$type)
				
					If GUICtrlRead ($autofile)=1 Then
						RunWait(@ScriptDir&'\RegToScript.exe /'&$type&' "'&@GUI_DRAGFILE&'" "'&$aPath[0]&'\'&$aPath[1]&'.'&$type&'"', '', @SW_HIDE)
						_saveini()
						If FileExists($aPath[0]&'\'&$aPath[1]&'.'&$type) Then
						GUICtrlSetData ($StatusBar, 'Complete "'&$aPath[1]&'.'&$type&'"')
						Else
							GUICtrlSetData ($StatusBar, 'Error "'&$aPath[1]&'.'&$type&'"')
						EndIf
					Endif
					
					If GUICtrlRead ($autoclip)=1 Then _clipboard()
				Endif
				
				If @GUI_DropID=$inp_out Then GUICtrlSetData($inp_out, @GUI_DRAGFILE)
				
			Case $msg = $fileout
					_fileout()
			Case $msg = $clipboard
					_clipboard()
				
			Case $msg = $Au3
					$type = 'au3'
					_saveini()
			Case $msg = $Bat
					$type='bat'
					_saveini()
			Case $msg = $Script
					$type='script'
					_saveini()
			Case $msg = $autoclip
					_saveini()
			Case $msg = $autofile
					_saveini()
				
				; кнопки обзор
			Case $msg = $fold_reg
				$openfile = FileOpenDialog("Выбрать reg-файл", @WorkingDir & "", "(*.reg)", 1 + 4 )
				GUICtrlSetData($inp_reg, $openfile)
				If GUICtrlRead ($autofile)=1 Then _fileout()
				If GUICtrlRead ($autoclip)=1 Then _clipboard()
			Case $msg = $fold_out
				$savefile = FileSaveDialog( "Выбрать имя файла.", @WorkingDir & "", "Scripts (*.au3;*.bat;*.cmd;*.Script)", 2)
				GUICtrlSetData($inp_out, $savefile)
			Case $msg = -3
				ExitLoop
		EndSelect
	WEnd

; кнопка clipboard
Func _clipboard()
$inp_reg0=GUICtrlRead ($inp_reg)
$inp_out0=@TempDir&'\temp.tmp'
;If FileExists($inp_out0) Then FileDelete($inp_out0)
$aPath = StringRegExp($inp_reg0, "(^.*)\\(.*)\.(.*)$", 3)
If $aPath[2]<>'reg' Then
	MsgBox(0, "Ошибка", 'Принимается только reg-файл')
	GUICtrlSetData($inp_reg, '')
	return
EndIf
RunWait(@ScriptDir&'\RegToScript.exe /'&$type&' "'&$inp_reg0&'" "'&$inp_out0&'"', '', @SW_HIDE)
_saveini()
$file = FileOpen($inp_out0, 0)
$text= FileRead($file)
FileClose($file)
ClipPut ($text )
GUICtrlSetData ($StatusBar, 'Complete clipboard "'&$aPath[1]&'"')
EndFunc

; кнопка file
Func _fileout()
$inp_reg0=GUICtrlRead ($inp_reg)
$inp_out0=GUICtrlRead ($inp_out)
$aPath = StringRegExp($inp_reg0, "(^.*)\\(.*)\.(.*)$", 3)
If $aPath[2]<>'reg' Then
	MsgBox(0, "Ошибка", 'Принимается только reg-файл')
	GUICtrlSetData($inp_reg, '')
	return
EndIf
If $inp_out0='' Then $inp_out0=$aPath[0]&'\'&$aPath[1]&'.'&$type
RunWait(@ScriptDir&'\RegToScript.exe /'&$type&' "'&$inp_reg0&'" "'&$inp_out0&'"', '', @SW_HIDE)
_saveini()
$aPath = StringRegExp($inp_reg0, "(^.*)\\(.*)$", 3)
If FileExists($inp_out0) Then
	GUICtrlSetData ($StatusBar, 'Complete "'&$aPath[1]&'"')
Else
	GUICtrlSetData ($StatusBar, 'Error "'&$aPath[1]&'"')
EndIf
EndFunc



; сохранение состояния чекбоксов и радиокнопок
Func _saveini()
If GUICtrlRead ($autoclip)=1 Then
	IniWrite(@ScriptDir&'\RegToScript.ini', "setting", "autoclip", '1')
Else
	IniWrite(@ScriptDir&'\RegToScript.ini', "setting", "autoclip", '0')
Endif
If GUICtrlRead ($autofile)=1 Then
	IniWrite(@ScriptDir&'\RegToScript.ini', "setting", "autofile", '1')
Else
	IniWrite(@ScriptDir&'\RegToScript.ini', "setting", "autofile", '0')
Endif
IniWrite(@ScriptDir&'\RegToScript.ini', "setting", "type", $type)
EndFunc
 
Верх