程序:reg文件转换为nsi脚本

优质
小牛编辑
163浏览
2023-12-01
reg2nsi 是一个能把注册表文件转换为 NSIS 脚本文件的工具,使用非常简单,只需要一个 reg2nsi.exe 即可,并自动把 \\、\" 、$ 转换为 \、$\"、$$。

命令行
reg2nsi.exe /i:输入文件 [/o:输出文件]
/o 是一个可选项

引用reg2nsi.nsi的内容:

Name                 "Reg2nsi"           
OutFile              "reg2nsi.exe"
BrandingText         "Reg2nsi ${__DATE__}"
ShowInstDetails      show
SetCompressor        lzma
InstallButtonText    "$(INSTALL_BUTTON)"
Caption              "Reg2nsi"

!addplugindir        ".\"
ReserveFile          ".\io.ini"
ReserveFile          ".\InstallOptionsEx.dll"

!include             "MUI.nsh"
!include             "LogicLib.nsh"
!include             "Language.nsi"

	!define MUI_ICON icon.ico
  Page custom SetCustom LeaveCustom
	!define MUI_PAGE_HEADER_TEXT "$(INSTALLING_PAGE_TITLE)"
	!define MUI_PAGE_HEADER_SUBTEXT "$(INSTALLING_PAGE_SUBTITLE)"
  !insertmacro MUI_PAGE_INSTFILES
	
	!insertmacro MUI_LANGUAGE English
  !insertmacro MUI_LANGUAGE SimpChinese

Var HWND
Var IN
Var OUT
Var FE ;File encoding

Section
  GetDlgItem $0 $HWNDPARENT 2 ;允许取消按钮 (Enable cancel button)
	EnableWindow $0 1
	
	SetAutoClose false
	;$1: 文件指针 (File pointer)
	
	StrCmp $IN "" 0 +2
	ReadINIStr $IN $PLUGINSDIR\io.ini "Field 1" "State"
	StrCmp $FE "" 0 file_chk_done
	Push $IN
	Call CheckFileEncoding
	StrCmp $FE "Unicode" file_chk_done
	StrCmp $FE "ANSI" file_chk_done
		HideWindow
		MessageBox MB_OK|MB_ICONINFORMATION "$(FILE_CODING_ERROR1) $0 $(FILE_CODING_ERROR2)"
		Quit
	file_chk_done:
	
	StrCmp $OUT "" 0 +2
	ReadINIStr $OUT $PLUGINSDIR\io.ini "Field 2" "State"
	StrCmp $OUT "" 0 chk_ext
	Push $IN
	Call GetFileNameNoExt
	Pop $0
	StrCpy $OUT "$0.nsi"
	Goto in_out_done
	chk_ext:
	StrCpy $0 $OUT "" -4
	StrCmp $0 ".nsi" in_out_done
	StrCpy $OUT "$OUT.nsi"
	in_out_done:
	Push $OUT
	Call GetParent
	Pop $0
	IfFileExists $0 +2
	CreateDirectory $0
	;Delete $OUT
	
	ReadINIStr $0 $PLUGINSDIR\io.ini "Field 5" "State"
	StrCmp $0 1 0 +2
	StrCpy $6 "$\t"
	
	ReadINIStr $0 $PLUGINSDIR\io.ini "Field 6" "State"
	StrCmp $0 1 0 +2
	StrCpy $6 "  "
	
	StrCpy $1 0
	
	Call Main
SectionEnd

Function .onInit
  InitPluginsDir
	File "/oname=$PLUGINSDIR\io.ini" ".\io.ini"
	
	Call GetParameters
FunctionEnd	

Function SetCustom
	StrCmp $IN "" +2
	Abort
	
	WriteINIStr "$PLUGINSDIR\io.ini" "Field 3" Filter "$(CUSTOM_PAGE_FIELD3)"
	WriteINIStr "$PLUGINSDIR\io.ini" "Field 4" Filter "$(CUSTOM_PAGE_FIELD4)"
	WriteINIStr "$PLUGINSDIR\io.ini" "Field 5" Text "$(CUSTOM_PAGE_FIELD5)"
	WriteINIStr "$PLUGINSDIR\io.ini" "Field 6" Text "$(CUSTOM_PAGE_FIELD6)"
	WriteINIStr "$PLUGINSDIR\io.ini" "Field 7" Text "$(CUSTOM_PAGE_FIELD7)"
	WriteINIStr "$PLUGINSDIR\io.ini" "Field 8" Text "$(CUSTOM_PAGE_FIELD8)"
	
	ReadRegStr $0 HKCR .reg ""
	ReadRegStr $1 HKCR "$0\shell\convert" ""
	StrCmp $1 "" +3
  WriteINIStr "$PLUGINSDIR\io.ini" "Field 9" Text "$(UNREG_CONTEXT_MENU)"
	Goto +2
  WriteINIStr "$PLUGINSDIR\io.ini" "Field 9" Text "$(REG_CONTEXT_MENU)"
	
  InstallOptionsEx::initDialog /NOUNLOAD "$PLUGINSDIR\io.ini"
	Pop $HWND
	
  !insertmacro MUI_HEADER_TEXT "$(CUSTOM_PAGE_TITLE)" "$(CUSTOM_PAGE_SUBTITLE)"
	
 	InstallOptionsEx::show
FunctionEnd	

Function LeaveCustom	
	ReadINIStr $0 "$PLUGINSDIR\io.ini" Settings State
  ${Switch} $0
	${Default}
	Abort
	
  ${Case} 1
	ReadINIStr $0 "$PLUGINSDIR\io.ini" "Field 1" State
	Push $0
	Call GetFileNameNoExt
	Pop $0
  GetDlgItem $1 $HWND 1201
  SendMessage $1 ${WM_SETTEXT} 0 "STR:$0.nsi"
	Abort
	
  ${Case} 9
	ReadRegStr $0 HKCR .reg ""
	ReadRegStr $1 HKCR "$0\shell\convert" ""
	StrCmp $1 "" 0 unregistry
	
  WriteRegStr HKCR "$0\shell\convert" "" "$(CONTEXT_MENU)"
  WriteRegStr HKCR "$0\shell\convert\command" "" '"$EXEDIR\reg2nsi.exe" /i:%1'
  GetDlgItem $0 $HWND 1208
  SendMessage $0 ${WM_SETTEXT} 0 "STR:$(UNREG_CONTEXT_MENU)"
	Abort
	unregistry:
	DeleteRegKey HKCR "$0\shell\convert"
  GetDlgItem $0 $HWND 1208
  SendMessage $0 ${WM_SETTEXT} 0 "STR:$(REG_CONTEXT_MENU)"
	Abort
	
  ${Case} 0
	${EndSwitch}
	ReadINIStr $0 $PLUGINSDIR\io.ini "Field 1" "State"
	StrCmp $0 "" 0 +3
		MessageBox MB_OK|MB_ICONEXCLAMATION "$(NO_INPUT_FILE)"
		Abort
		
	ReadINIStr $IN $PLUGINSDIR\io.ini "Field 1" "State"
	Push $IN
	Call CheckFileEncoding
	StrCmp $FE "Unicode" file_chk_done
	StrCmp $FE "ANSI" file_chk_done
		MessageBox MB_OK|MB_ICONINFORMATION "$(FILE_CODING_ERROR1) $0 $(FILE_CODING_ERROR2)"
		Abort
	file_chk_done:	
FunctionEnd	

Function Main
	Push $0
	Push $1
	Push $2
	Push $3
	Push $4
	
	;$9 ROOT_KEY
	;$8 SUB_KEY
	;$7 ENTRY
	;$6 Padding
	;$1 handle of input
	;$3 handle of output
	
	FileOpen $1 $IN r
	StrCmp $FE "Unicode" 0 +2
	FileSeek $1 2
	
	ClearErrors
	FileOpen $3 $OUT w
	IfErrors 0 +3
		MessageBox MB_OK|MB_ICONSTOP "$(WRITE_FILE_ERROR)"
		Quit
	
	
	loop:
	Call ReadFile
	Pop $0
	
	StrCmp $0 "" loop_quit
	
	Push $0
	Call TrimLine
	Pop $0
	
	StrCmp $0 "" loop   ;空行则跳过 (jump if empty line)
	
	loop_trim_line:     ;检测是否有断行 (check if trim line)
	StrCpy $2 $0 1 -1   
	StrCmp $2 "\" 0 no_trim_line
	Call ReadFile
	Pop $2
	StrCmp $2 "" loop_quit
	Push $2
	Call TrimLine
	Pop $2
	StrCpy $0 $0 -1
	StrCpy $0 $0$2
	Goto loop_trim_line
	no_trim_line:
	
	StrCpy $2 $0 1      ;检测是否是健 (check if is a reg key)
	StrCpy $4 $0 1 -1 
	StrCpy $2 $2$4
	StrCmp $2 "[]" 0 +4
	Push $0
	Call GetKey
	Goto loop
	
	StrCpy $2 $0 1
	StrCmp $2 "@" 0 not_default
	Push $0
	Call WriteDefaultValue
	Goto loop
	
	not_default:
	Push $0
	Call GetEntry
	Pop $7 ;项 (entry)
	Pop $2 ;值 (value)
	
	Push $7
	Call ConvertSpecailCharacter
	Pop $7
	
	Push $2
	Call ConvertSpecailCharacter
	Pop $2
	
	Push $2
	Call WriteValue
	
	Goto loop
	loop_quit:
	
	FileClose $3
	FileClose $1
	
	Pop $4
	Pop $3
	Pop $2
	Pop $1
	Pop $0
FunctionEnd	

Function TrimLine
	Exch $R0
	Push $R1
	
	StrCpy $R1 $R0 1 -1  ;去除回车、换行 (Cut the Carriage Return / Line Feed)
	StrCmp $R1 $\r 0 +3
	StrCpy $R0 $R0 -1
	Goto -3
	StrCmp $R1 $\n 0 +3
	StrCpy $R0 $R0 -1
	Goto -6
	
	StrCpy $R1 $R0 1 -1  ;去除行尾空格 (Cut space in line end)
	StrCmp $R1 " " 0 +3
	StrCpy $R0 $R0 -1
	Goto -3
	
	StrCpy $R1 $R0 1     ;去除行首空格 (Cut space in line header)
	StrCmp $R1 " " 0 +3
	StrCpy $R0 $R0 "" 1
	Goto -3
	
	Pop $R1
	Exch $R0
FunctionEnd	
	
Function WriteDefaultValue
	Exch $R0
	Push $R1
	Push $R2
	
	StrCpy $R1 0
	StrLen $R2 $R0
	loop:
		StrCpy $R3 $R0 1 $R1
		StrCmp $R3 "=" loop_quit
		IntCmp $R1 $R2 end
		IntOp $R1 $R1 + 1
		Goto loop
	loop_quit:
	IntOp $R1 $R1 + 1
	StrCpy $R0 $R0 "" $R1
	
	StrCpy $R2 $R0 1     ;去除行首空格 (cut space in line header)
	StrCmp $R2 " " 0 +3
	StrCpy $R0 $R0 "" 1
	Goto -3
	
	StrCpy $R1 $R0 1     ;检测值是否以引号开头及结尾 (check if value begin with quote and end with quote)
	StrCpy $R2 $R0 1 -1
	StrCpy $R1 $R1$R2
	StrCmp $R1 '""' 0 end
	
	StrCpy $R0 $R0 "" 1
	StrCpy $R0 $R0 -1
	
	Push $R0
	Call ConvertSpecailCharacter
	Pop $R0
	
	StrCpy $R0 'WriteRegStr $9 "$8" "" "$R0"'
	Push $R0
	Call WriteFile
	
	end:
	
	Pop $R2
	Pop $R1
	Exch $R0
FunctionEnd	

Function WriteValue
	Exch $R0
	Push $R1
	Push $R2
	
	StrCpy $R1 $R0 1
	StrCpy $R2 $R0 1 -1
	StrCpy $R1 $R1$R2
	StrCmp $R1 '""' str
	
	StrCpy $R1 $R0 6
	StrCmp $R1 "dword:" dword
	
	StrCpy $R1 $R0 4
	StrCmp $R1 "hex:" bin end
	
	str:
	StrCpy $R0 $R0 "" 1
	StrCpy $R0 $R0 -1
	StrCpy $R0 'WriteRegStr $9 "$8" "$7" "$R0"'
	Goto done
	
	dword:
	StrCpy $R0 $R0 "" 6
	StrCmp $R0 "" 0 +3
	StrCpy $R0 'WriteRegDWORD $9 "$8" "$7" ""'
	Goto +2
	StrCpy $R0 'WriteRegDWORD $9 "$8" "$7" 0x$R0'
	Goto done
	
	bin:
	StrCpy $R0 $R0 "" 4
	StrCmp $R0 "" 0 +3
	StrCpy $R0 'WriteRegBin $9 "$8" "$7" ""'
	Goto done
	StrCpy $R1 0
	loop:
		StrCpy $R2 $R0 1 $R1
		StrCmp $R2 "," convert
		StrCmp $R2 "" loop_quit
		IntOp $R1 $R1 + 1
		Goto loop
	convert:
	StrCpy $R2 $R0 $R1
	IntOp $R1 $R1 + 1
	StrCpy $R0 $R0 "" $R1
	StrCpy $R0 $R2$R0
	Goto loop
	loop_quit:
	StrCpy $R0 'WriteRegBin $9 "$8" "$7" $R0'
	
	done:
	Push $R0
	Call WriteFile	
	
	end:
	
	Pop $R2
	Pop $R1
	Exch $R0
FunctionEnd	

Function GetEntry
	Exch $R0
	Push $R1
	Push $R2
	Push $R3
	
	StrCpy $R1 $R0 1
	StrCmp $R1 '"' 0 end
	StrCpy $R1 1
	StrLen $R2 $R0
	loop:
		StrCpy $R3 $R0 2 $R1
		StrCmp $R3 '\"' jump
		StrCpy $R3 $R0 1 $R1
		StrCmp $R3 '"' loop_quit
		IntCmp $R1 $R2 end 0 end
		IntOp $R1 $R1 + 1
		Goto loop
	jump:
	IntOp $R1 $R1 + 2
	Goto loop
	loop_quit:
	StrCpy $R2 $R0 $R1
	StrCpy $R2 $R2 "" 1 ;项 (entry)
	
	IntOp $R1 $R1 + 1
	StrCpy $R1 $R0 "" $R1
	
	StrCpy $R3 $R1 1     ;去除行首空格 (cut space in header)
	StrCmp $R3 " " 0 +3
	StrCpy $R1 $R1 "" 1
	Goto -3
	
	StrCpy $R3 $R1 1
	StrCmp $R3 "=" 0 end
	StrCpy $R1 $R1 "" 1
	
	StrCpy $R3 $R1 1     ;去除行首空格 (cut space in end)
	StrCmp $R3 " " 0 +3
	StrCpy $R1 $R1 "" 1
	Goto -3
	
	StrCpy $R0 $R2
	
	end:
	
	Pop $R3
	Pop $R2
	Exch $R1 ;值 (value)
	Exch
	Exch $R0 ;项 (entry)
FunctionEnd	

Function ConvertSpecailCharacter  ;转换 \" \\ $ 为 $\" \ $$ (Convert \" \\ $ to $\" \ $$)
	Exch $R0
	Push $R1
	Push $R2
	Push $R3
	Push $R4
	
	StrCpy $R1 0
	StrLen $R2 $R0
	loop:
		StrCpy $R3 $R0 2 $R1
		StrCmp $R3 "\\" double_slash
		StrCmp $R3 '\"' quote
		StrCpy $R3 $R0 1 $R1
		StrCmp $R3 $$ dollar
		IntCmp $R1 $R2 loop_quit
		IntOp $R1 $R1 + 1
		Goto loop
		
	double_slash:
	StrCpy $R3 $R0 $R1
	IntOp $R1 $R1 + 1
	StrCpy $R4 $R0 "" $R1
	StrCpy $R0 $R3$R4
	StrLen $R2 $R0
	Goto loop
	
	quote:
	StrCpy $R3 $R0 $R1
	StrCpy $R4 $R0 "" $R1
	StrCpy $R0 "$R3$$$R4"
	StrLen $R2 $R0
	IntOp $R1 $R1 + 3
	Goto loop
	
	dollar:
	StrCpy $R3 $R0 $R1
	StrCpy $R4 $R0 "" $R1
	StrCpy $R0 "$R3$$$R4"
	StrLen $R2 $R0
	IntOp $R1 $R1 + 2
	Goto loop
	
	loop_quit:	
	
	Pop $R4
	Pop $R3
	Pop $R2
	Pop $R1
	Exch $R0
FunctionEnd	

Function GetKey
	Exch $R0
	Push $R1
	Push $R2
	Push $R3
	
	StrCpy $R0 $R0 "" 1
	StrCpy $R0 $R0 -1
	
	StrCpy $R1 0
	StrLen $R2 $R0
	loop:
		StrCpy $R3 $R0 1 $R1
		StrCmp $R3 "\" loop_quit
		IntCmp $R1 $R2 end
		IntOp $R1 $R1 + 1
		Goto loop
	loop_quit:
	StrCpy $R2 $R0 $R1
	StrCmp $R2 HKEY_CLASSES_ROOT 0 +3
	StrCpy $9 HKCR
	Goto sub_key
	StrCmp $R2 HKEY_LOCAL_MACHINE 0 +3
	StrCpy $9 HKLM
	Goto sub_key
	StrCmp $R2 HKEY_CURRENT_USER 0 +3
	StrCpy $9 HKCU
	Goto sub_key
	StrCmp $R2 HKEY_USERS 0 +3
	StrCpy $9 HKU
	Goto sub_key
	StrCmp $R2 HKEY_CURRENT_CONFIG 0 +3
	StrCpy $9 HKCC
	Goto sub_key
	StrCmp $R2 HKEY_DYN_DATA 0 +3
	StrCpy $9 HKDD
	Goto sub_key
	StrCmp $R2 HKEY_PERFORMANCE_DATA 0 end
	StrCpy $9 HKPD
	
	sub_key:
	IntOp $R1 $R1 + 1
	StrCpy $8 $R0 "" $R1
	
	Push $8
	Call ConvertSpecailCharacter
	Pop $8
	
	end:
	
	Pop $R3
	Pop $R2
	Pop $R1
	Pop $R0
FunctionEnd	

Function ReadFile
	Push $R0
	Push $R1
	Push $R2
	
	StrCmp $FE "Unicode" 0 ansi
	
	loop:
		FileReadByte $1 $R2        ;Read Unicode file code thanks kichik
		FileReadByte $1 $R1
		StrCmp $R2$R1 "" end
		IntOp $R1 $R1 << 8
		IntOp $R1 $R1 | $R2
		IntFmt $R1 %lc $R1
		StrCmp $R1 "$\r" loop_quit
		StrCmp $R1 "$\n" loop_quit
		StrCpy $R0 $R0$R1
		Goto loop
	loop_quit:
	StrCpy $R0 "$R0$\r$\n"
	FileSeek $1 2 CUR
	Goto end
	
	ansi:
	FileRead $1 $R0
	
	end:
	
	Pop $R2
	Pop $R1
	Exch $R0
FunctionEnd	

Function WriteFile
	Exch $R0
	Push $R1
	
	ClearErrors
	FileWrite $3 "$6$R0$\r$\n"
	IfErrors 0 +2
	StrCpy $R0 "$(WRITE_FILE_ERROR)"
	DetailPrint $R0
	
	Pop $R1
	Pop $R0
FunctionEnd	

Function CheckFileEncoding
	Exch $R4
	Push $R0
	Push $R1
	Push $R2
	Push $R3
	
	FileOpen $R0 $R4 r
	FileReadByte $R0 $R1
	FileSeek $R0 1
	FileReadByte $R0 $R2
	FileSeek $R0 2
	FileReadByte $R0 $R3
	FileClose $R0
	
	StrCpy $R0 $R1$R2
	StrCmp $R0 255254 0 +3
	StrCpy $FE "Unicode"
	Goto end
	StrCmp $R0 254255 0 +3
	StrCpy $FE "Unicode (big endian)"
	Goto end
	StrCpy $R0 $R1$R2$R3
	StrCmp $R0 239187191 0 +3
	StrCpy $FE "UTF-8"
	Goto end
	
	StrCpy $FE "ANSI"
	end:
	
	Pop $R3
	Pop $R2
	Pop $R1
	Pop $R0
	Pop $R4
FunctionEnd	

Function GetFileNameNoExt
	Exch $R0
	Push $R1
	Push $R2
	Push $R3
	
	StrCpy $R1 0
	StrLen $R3 $R0
	loop:
		StrCpy $R2 $R0 1 -$R1
		StrCmp $R2 . loop_quit
		StrCmp $R2 "\" loop_quit
		IntCmp $R1 $R3 end 0 end
		IntOp $R1 $R1 + 1
		Goto loop
	loop_quit:
	IntOp $R1 $R3 - $R1
	StrCpy $R0 $R0 $R1
	end:
	
	Pop $R3
	Pop $R2
	Pop $R1
	Exch $R0
FunctionEnd	
	
Function GetParameters
	Push $R0
	Push $R1 ;指针 (pointer)
	Push $R2 ;字串长度 (string len)
	Push $R3 ;临时变量 (temp var)
	Push $R4 ;参数起始偏移 (start of parameter)
	Push $R5 ;参数结束偏移 (end of parameter)
	Push $R6 ;参数 (the parameter)
	
	StrCpy $R0 "$CMDLINE /"
	
	StrCpy $R1 0
	StrCpy $R4 ""
	StrCpy $R5 ""
	StrLen $R2 $R0
	loop:
		IntOp $R1 $R1 + 1
	  StrCpy $R3 $R0 2 $R1
		StrCmp $R3 ' /' get ;以 " /" 作为分隔符 (separate by " /")
		IntCmp $R1 $R2 loop_quit 0 loop_quit
		Goto loop
		
		get:
		StrCmp $R4 "" 0 +3
		StrCpy $R4 $R1
		Goto loop
		StrCmp $R5 "" 0 reset
		StrCpy $R5 $R1
	
		IntOp $R4 $R4 + 2
		IntOp $R3 $R5 - $R4
		StrCpy $R6 $R0 $R3 $R4
	
		;检测参数后面是否有空格  (check if space in parameter end)
		StrCpy $R3 $R6 "" -1
		StrCmp $R3 " " 0 +3
		StrCpy $R6 $R6 -1
		Goto -3
	
		StrCmp $R6 "" loop ;检测参数是否为空值 (check if parameter is empty)
		
		reset:
		StrCpy $R4 $R5 ;重置 (reset)
		StrCpy $R5 ""  ;重置 (reset)
		
		;-----------------------------------
		StrCpy $R3 $R6 2
		StrCmp $R3 "i:" input
		StrCmp $R3 "o:" output
		
		input:
		StrCpy $IN $R6 "" 2
		Goto loop
		
		output:
		StrCpy $OUT $R6 "" 2
		Goto loop
		;-----------------------------------
		
	loop_quit:
	
	Pop $R5
	Pop $R4
	Pop $R3
	Pop $R2
	Pop $R1
	Pop $R0
FunctionEnd	

Function GetParent
	Exch $R0
	Push $R1
	Push $R2
	Push $R3
	
	StrCpy $R1 1
	StrLen $R2 $R0
	loop:
		StrCpy $R3 $R0 1 -$R1
		StrCmp $R3 "\" loop_quit
		IntCmp $R1 $R2 loop_quit 0 loop_quit
		IntOp $R1 $R1 + 1
		Goto loop
	loop_quit:
	IntOp $R1 $R2 - $R1
	StrCpy $R0 $R0 $R1
	
	Pop $R3
	Pop $R2
	Pop $R1
	Exch $R0
FunctionEnd

引用Language.nsi的内容:

!define ENG 1033
!define CHS 2052
!define CHT 1028

LangString INSTALL_BUTTON ${ENG} "Con&vert"
LangString INSTALL_BUTTON ${CHS} "转换(&V)"

LangString INSTALLING_PAGE_TITLE ${ENG} "Converting"
LangString INSTALLING_PAGE_TITLE ${CHS} "正在转换"

LangString INSTALLING_PAGE_SUBTITLE ${ENG} "$(^NameDA) is converting"
LangString INSTALLING_PAGE_SUBTITLE ${CHS} "$(^NameDA) 正在转换"

LangString FILE_CODING_ERROR1 ${ENG} "The file you convert encoding by"
LangString FILE_CODING_ERROR1 ${CHS} "你要转换的文档使用了"

LangString FILE_CODING_ERROR2 ${ENG} ", to use it, you must convert to ANSI or Unicode coding. $\r$\nYou can convert by notepad $\"Save as$\" feature"
LangString FILE_CODING_ERROR2 ${CHS} "编码,你需要转换为 ANSI 或 Unicode 编码方可使用。$\r$\n你可以使用记事本的 $\"另存为$\" 功能来转换。"

LangString REG_CONTEXT_MENU ${ENG} "Registry context menu"
LangString REG_CONTEXT_MENU ${CHS} "注册右键菜单"

LangString UNREG_CONTEXT_MENU ${ENG} "Unregistry context menu"
LangString UNREG_CONTEXT_MENU ${CHS} "解注册右键菜单"

LangString CUSTOM_PAGE_TITLE ${ENG} "Registry converter"
LangString CUSTOM_PAGE_TITLE ${CHS} "注册表转换"

LangString CUSTOM_PAGE_SUBTITLE ${ENG} "Please enter a registry file and then press convert button"
LangString CUSTOM_PAGE_SUBTITLE ${CHS} "请输入要转换的注册表文件后按转换按钮"

LangString CONTEXT_MENU ${ENG} "Convert to NSI file"
LangString CONTEXT_MENU ${CHS} "转换为 NSI 文件"

LangString NO_INPUT_FILE ${ENG} "Please open a input file"
LangString NO_INPUT_FILE ${CHS} "请打开输入文件"

LangString WRITE_FILE_ERROR ${ENG} "Write file error"
LangString WRITE_FILE_ERROR ${CHS} "写入文件错误"

LangString CUSTOM_PAGE_FIELD3 ${ENG} "REG file(.reg)|*.reg|All file|*.*"
LangString CUSTOM_PAGE_FIELD3 ${CHS} "REG 文件(.reg)|*.reg|所有文件|*.*"

LangString CUSTOM_PAGE_FIELD4 ${ENG} "NSI file(.nsi)|*.nsi"
LangString CUSTOM_PAGE_FIELD4 ${CHS} "NSI 文件(.nsi)|*.nsi"

LangString CUSTOM_PAGE_FIELD5 ${ENG} "Auto and Tab in line header"
LangString CUSTOM_PAGE_FIELD5 ${CHS} "行首自动加 Tab"

LangString CUSTOM_PAGE_FIELD6 ${ENG} "Auto and Space in line header"
LangString CUSTOM_PAGE_FIELD6 ${CHS} "行首自动加空格"

LangString CUSTOM_PAGE_FIELD7 ${ENG} "Input file:"
LangString CUSTOM_PAGE_FIELD7 ${CHS} "输入文件:"

LangString CUSTOM_PAGE_FIELD8 ${ENG} "Output file:"
LangString CUSTOM_PAGE_FIELD8 ${CHS} "输出文件:"

引用io.ini的内容:

[Settings]

[Field 1]
Type=Text
Notify=ONTEXTCHANGE
Left=13
Right=267
Top=19
Bottom=32

[Field 2]
Type=Text
Left=14
Right=267
Top=59
Bottom=72

[Field 3]
Type=Button
Text=...
State=1
Flags=FILEREQUEST|FILE_MUST_EXIST
Filter=REG file(.reg)|*.reg|All file|*.*
Notify=ONCLICK
Left=270
Right=295
Top=20
Bottom=32

[Field 4]
Type=Button
Text=...
State=2
Flags=FILEREQUEST|FILE_MUST_EXIST|REQ_SAVE
Filter=NSI file(.nsi)|*.nsi
Notify=ONCLICK
Left=270
Right=295
Top=60
Bottom=72

[Field 5]
Type=Checkbox
Text=Auto and Tab in line header
State=1
Left=14
Right=200
Top=86
Bottom=96

[Field 6]
Type=Checkbox
Text=Auto and Space in line header
Left=14
Right=200
Top=104
Bottom=115

[Field 7]
Type=Label
Text=Input file
Left=14
Right=90
Top=11
Bottom=19

[Field 8]
Type=Label
Text=Output file
Left=14
Right=86
Top=51
Bottom=59

[Field 9]
Type=Button
Text=
Notify=ONCLICK
Left=205
Right=295
Top=100
Bottom=116

全部的源文件可以点击这里另存