Тема: AHK: Конвертирование reg файлов в ahk
Скрипт для конвертирования файлов реестра (*.reg) в формат ahk.
#NoTrayIcon
#NoEnv
#SingleInstance,Force
SetBatchLines,-1
Process,Priority,,low
SetFormat,float,6.2
param1=%1%
if param1=
{
FileSelectFile,FileToConvert,1,,Выберите файл для конвертирования,Рег файлы (*.reg)
if errorlevel
exitapp
}
else
FileToConvert=%Param1%
FileRead,out,%FileToConvert%
loop,parse,out,`n
step:=a_index/100
if step=0
step=1
Gui,-SysMenu
Gui,Add,Progress,xm ym w400 h20 cBlue vSProgress
Gui,Add,text,xm y+5 w400 h40 vtxt
Gui,Add,Button,xm y+5 w400 h20,Отмена
Gui,Show,,Конвертирование %FileToConvert%
skip=0
WinGet,ID,ID,A
fileappend,;RegToAhk`n,%FileToConvert%.ahk
Loop,Read,%FileToConvert%,%FileToConvert%.ahk
{
row:=A_Index
GuiControl,,txt,Обработка строки №: %row%
GuiControl,,SProgress,%SProgres%
WinSetTitle,ahk_id %ID%,,%SProgres%`% Конвертирование %FileToConvert%
SProgres:=% A_Index/step
line:=A_LoopReadLine
if bin=
{
if (line="" or line="Windows Registry Editor Version 5.00" or line="REGEDIT4")
{
if razdelchek=1
{
fileappend,%deystvie%`,REG_SZ`,%razdel%`,%vetv%`n
razdelchek=0
}
deystvie=
typ=
razdel=
vetv=
parametr=
znachenie=
continue
}
if line contains [H,=
deystvie=RegWrite
if line contains =-,[-H
deystvie=RegDelete
if line contains [H,[-H
{
if razdelchek=1
fileappend,%deystvie%`,REG_SZ`,%razdel%`,%vetv%`n
if line contains HKEY_CURRENT_USER
razdel=HKEY_CURRENT_USER
if line contains HKEY_LOCAL_MACHINE
razdel=HKEY_LOCAL_MACHINE
if line contains HKEY_CLASSES_ROOT
razdel=HKEY_CLASSES_ROOT
if line contains HKEY_USERS
razdel=HKEY_USERS
if line contains HKEY_CURRENT_CONFIG
razdel=HKEY_CURRENT_CONFIG
vetv:=RegExReplace(line, "\[-?" razdel "\\(.*)\]" , "$1")
razdelchek=1
continue
}
razdelchek=0
parametr:=RegExReplace(line, """(.*)""=.*" , "$1")
; StringReplace,parametr,parametr,`,,```,,All
; StringReplace,parametr,parametr,`%,```%,All
if line contains `@=
parametr=`@
if line contains =
typ=REG_SZ
if line contains =dword:
typ=REG_DWORD
if line contains =hex(b):
typ=REG_QWORD
if line contains =hex:
typ=REG_BINARY
if line contains =hex(0):,=hex(2):,=hex(8):,=hex(9):
typ=REG_EXPAND_SZ
if line contains =hex(7):
typ=REG_MULTI_SZ
}
if line contains `@=
znachenie:=RegExReplace(line, "`@=(.*)" , "$1")
else
znachenie:=RegExReplace(line, """" parametr """=(.*)" , "$1")
if typ=REG_SZ
znachenie:=RegExReplace(znachenie, """(.*)""" , "$1")
if typ=REG_DWORD
StringReplace,znachenie,znachenie,dword:,0x,1
if typ=REG_QWORD
StringReplace,znachenie,znachenie,`,,,All
if typ=REG_BINARY
{
if znachenie contains \
{
bin=1
temp.=znachenie
continue
}
temp.=znachenie
znachenie:=temp
temp=
bin=
StringReplace,znachenie,znachenie,hex:,,1
StringReplace,znachenie,znachenie,%a_space%,,All
StringReplace,znachenie,znachenie,`n,,All
StringReplace,znachenie,znachenie,\,,All
StringReplace,znachenie,znachenie,`,,,All
}
if (typ="REG_EXPAND_SZ" or typ="REG_MULTI_SZ")
{
if znachenie contains \
{
bin=1
temp.=znachenie
continue
}
temp.=znachenie
znachenie:=temp
temp=
bin=
znachenie:=RegExReplace(znachenie, "hex\(\d\):(.*)" , "$1")
StringReplace,znachenie,znachenie,%a_space%,,All
StringReplace,znachenie,znachenie,`n,,All
StringReplace,znachenie,znachenie,\,,All
StringReplace,znachenie,znachenie,`,,,All
znachenie:=Hex2Text(znachenie)
}
;msgbox,%line%`n`np=%parametr%`n`nz=%znachenie%
znachenie:=RegExReplace(znachenie, "``" , "````")
StringReplace,znachenie,znachenie,`%,```%,All
StringReplace,znachenie,znachenie,\\,\,All
StringReplace,znachenie,znachenie,\`",`",All
znachenie:=RegExReplace(znachenie, "\;" , "```;")
if deystvie=RegDelete
{
if parametr=`@
line=RegWrite,REG_SZ,%razdel%,%vetv%,,,
else
line=%deystvie%,%razdel%,%vetv%,%parametr%
}
else
{
if parametr=`@
line=%deystvie%,%typ%,%razdel%,%vetv%,,%znachenie%
else
line=%deystvie%,%typ%,%razdel%,%vetv%,%parametr%,%znachenie%
}
FileAppend,%line%`n
}
GuiControl,,txt,Обработка строки №: %row%`n`nКонвертирование завершено.
sleep,3000
gui,destroy
exitapp
ButtonОтмена:
ExitApp
Hex2Text(Hex)
{
startpos:=1
Loop % StrLen(Hex)/2
{
n .= Chr( "0x" . SubStr(Hex, StartPos+2 , 2) . SubStr(Hex, StartPos , 2) )
startpos +=4
}
Return n
}