程序:宿舍局域网实用工具

优质
小牛编辑
122浏览
2023-12-01

脚本编写:天际奇光(Skight) -> Engine @ bbs.hanzify.org

这是以前用NSIS写的一个UI小工具,因为含有很多 NSIS 自定义界面操作,所以拿来供新手参考。强烈不推荐使用 NSIS 来实现界面工具,真不如用VC,Delphi来得简单...

工具策略版权:Skight @ Hesung Studio 脚本编写: 2006.6.1 脚本整理提供: 2007.4.3

引用 LanModifier.nsi 的内容:

!include "LanModifier.nsh"


!define MUI_ICON "${RES_ICON}" 
!define MUI_UI "${RES_UI}"


Name 	${STR_NAME}
Caption "${STR_CAPTION}"
OutFile ${STR_OUTFILE}
CRCCheck off
XPStyle  off



!insertmacro MUI_LANGUAGE "${STR_MUI_LANG}"

VIProductVersion "${STR_VERSION}"
VIAddVersionKey /LANG=${LANG_ID}  "ProductName" 	"${STR_PRODCTNAME}"
VIAddVersionKey /LANG=${LANG_ID}  "Comments"		"${STR_COMMENTS}"
VIAddVersionKey /LANG=${LANG_ID}  "CompanyName" 	"${STR_COMPANYNAME}"
VIAddVersionKey /LANG=${LANG_ID}  "LegalCopyright" 	"${STR_COPYRIGHT}"
VIAddVersionKey /LANG=${LANG_ID}  "FileDescription" "${STR_FILEDESCRIPTION}"
VIAddVersionKey /LANG=${LANG_ID}  "FileVersion" 	"${STR_FILEVERSION}"
VIAddVersionKey /LANG=${LANG_ID}  "InternalName" 	"${STR_INTNAME}"
VIAddVersionKey /LANG=${LANG_ID}  "OriginalFilename" "${STR_OUTFILE}"



Page custom ShowCustom LeaveCustom
Page instfiles



Function .onInit


	SYSTEM::Call "kernel32::CreateMutexA(i 0, i 0, t '${STR_CAPTION}') i .r0 ?e"
		Pop $0
		${if} $0 != 0 
			StrLen $0 "${STR_CAPTION}"
			IntOp $0 $0 + 1
			loop:
			FindWindow $1 '#32770' '' 0 $1
			${if} $1 != 0
			SYSTEM::Call "user32::GetWindowText(i r1, t .r2, i r0) i."
			StrCmp $2 "${STR_CAPTION}" 0 loop
			SYSTEM::Call "user32::SetForegroundWindow(i r1) i."
			${endif}
			ShowWindow $1 2
			ShowWindow $1 1
			Abort
		${endif}
		ClearErrors
	    ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
        IfErrors 0 Pass
		System::Call 'user32::MessageBeep(i) i (0x00000110)'
		Messagebox::show MB_ICONHAND|MB_TOPMOST "LanModifier" "0,103" \
		"您的 Windows 版本过低,本工具只运行于 Win2000以上的 Windows 平台中。    " \
		"确定 (&O)"
		Pop $R0
		Quit
		Pass:
	${Var}	COUNTER_HOSTNUM
	StrCpy 	$COUNTER_HOSTNUM 0 ;;初始化主机计数器
	InitPluginsDir
	File /oname=${MUI_INIFILE} "${RES_INIFILE}"
	File /oname=${MUI_ICOFILE} "${RES_ICOFILE}"
		WriteINIStr "${MUI_INIFILE}" "Field ${LAB_AUTHOR}" "Text" "${STR_AUTHOR}"
		WriteINIStr "${MUI_INIFILE}" "Field ${ICON_HOST}" "Text" "${MUI_ICOFILE}"
		ReadRegStr $R0 HKCR "Hlbackupini.file" ""
			${if} $R0 !=  "主机列表备份文件"
				WriteRegStr HKCR ".hlbf" "" "Hlbackupini.file"
				WriteRegStr HKCR "Hlbackupini.file" "" "主机列表备份文件"
				WriteRegStr HKCR "Hlbackupini.file\DefaultIcon" "" "$SYSDIR\Shell32.dll,-178"
				WriteRegStr HKCR "Hlbackupini.file\shell\open" "" ""
				WriteRegStr HKCR "Hlbackupini.file\shell\open\command" "" "$\"$PROGRAMFILES\Windows NT\Accessories\wordpad.exe$\" $\"%1$\""
					System::Call 'Shell32::SHChangeNotify(i 0x8000000, i 0, i 0, i 0)'
			${endif}
	
	Call InitNetCardInfo
		ReadINIStr $0 ${MUI_INIFILE} "Settings" NetCardNum
		${if} $0 = 1 ;有主机信息
		ReadINIStr ${ARG_Var.1} "${MUI_INIFILE}" "Field ${DL_HOST}" "State"
			SendMessage $HWND_TXT_HOST ${WM_SETTEXT} 0 "STR:${ARG_Var.1}"
		ReadRegStr ${ARG_Var.2} HKLM "${REG_ME_HOSTLIST}\${ARG_Var.1}" "MAC"
			${if} ${ARG_Var.2} == ""
			${orif} ${ARG_Var.2} == ${STR_UNSETTED}
				StrCpy ${ARG_Var.2} "${STR_UNSETTED}"
			${else}
				StrLen ${ARG_Var.3} "${ARG_Var.2}"
				${if} ${ARG_Var.3} != 12
					StrCpy ${ARG_Var.2} "${STR_ERRORFORMAT}"
				${endif}
			${endif}
			SendMessage $HWND_TXT_MAC ${WM_SETTEXT} 0 "STR:${ARG_Var.2}"
		ReadRegStr ${ARG_Var.2} HKLM "${REG_ME_HOSTLIST}\${ARG_Var.1}" "IP"
			${if} ${ARG_Var.2} == ""
				StrCpy ${ARG_Var.2} "${STR_UNSETTED}"
			${endif}
			SendMessage $HWND_TXT_IP ${WM_SETTEXT} 0 "STR:${ARG_Var.2}"
		ReadRegStr ${ARG_Var.2} HKLM "${REG_ME_HOSTLIST}\${ARG_Var.1}" "MASK"
			${if} ${ARG_Var.2} == ""
				StrCpy ${ARG_Var.2} "${STR_UNSETTED}"
			${endif}
			SendMessage $HWND_TXT_MASK ${WM_SETTEXT} 0 "STR:${ARG_Var.2}"
		ReadRegStr ${ARG_Var.2} HKLM "${REG_ME_HOSTLIST}\${ARG_Var.1}" "NETGATE"
			${if} ${ARG_Var.2} == ""
				StrCpy ${ARG_Var.2} "${STR_UNSETTED}"
			${endif}
			SendMessage $HWND_TXT_NETGATE ${WM_SETTEXT} 0 "STR:${ARG_Var.2}"
		ReadRegStr ${ARG_Var.2} HKLM "${REG_ME_HOSTLIST}\${ARG_Var.1}" "DNS"
			${if} ${ARG_Var.2} == ""
				StrCpy ${ARG_Var.2} "${STR_UNSETTED}"
			${endif}
			SendMessage $HWND_TXT_DNS ${WM_SETTEXT} 0 "STR:${ARG_Var.2}"
			
	${else} ;无主机信息
			
		ReadRegStr ${ARG_Var.2} HKLM "${REG_WINLOGON}" "AltDefaultDomainName"
			SendMessage $HWND_TXT_HOST ${WM_SETTEXT} 0 "STR:${ARG_Var.2}"
		ReadINIStr ${ARG_Var.1} ${MUI_INIFILE} "Field ${DL_NETCARD}" State
		ReadINIStr ${ARG_Var.2} ${MUI_INIFILE} "${ARG_Var.1}" "MAC"
			SendMessage $HWND_TXT_MAC ${WM_SETTEXT} 0 "STR:${ARG_Var.2}"
		ReadINIStr ${ARG_Var.2} ${MUI_INIFILE} "${ARG_Var.1}" "IP"
			SendMessage $HWND_TXT_IP ${WM_SETTEXT} 0 "STR:${ARG_Var.2}"
		ReadINIStr ${ARG_Var.2} ${MUI_INIFILE} "${ARG_Var.1}" "MASK"
			SendMessage $HWND_TXT_MASK ${WM_SETTEXT} 0 "STR:${ARG_Var.2}"
		ReadINIStr ${ARG_Var.2} ${MUI_INIFILE} "${ARG_Var.1}" "NETGATE"
			SendMessage $HWND_TXT_NETGATE ${WM_SETTEXT} 0 "STR:${ARG_Var.2}"
		ReadINIStr ${ARG_Var.2} ${MUI_INIFILE} "${ARG_Var.1}" "DNS"
			SendMessage $HWND_TXT_DNS ${WM_SETTEXT} 0 "STR:${ARG_Var.2}"
	${endif}
	
		${if} $COUNTER_HOSTNUM  0
		!insertmacro EnableGlobalBtn $2 1
	${else}
		!insertmacro EnableGlobalBtn $2 0

		ReadINIStr $2 "${MUI_INIFILE}" "Field ${TXT_NOTEPAD}" "HWND"
			ShowWindow $2 0
		ReadINIStr $2 "${MUI_INIFILE}" "Field ${GB_GLOBAL}" "HWND"
		SendMessage $2 ${WM_SETTEXT} 0 "STR:帮助信息"
		ReadINIStr $2 "${MUI_INIFILE}" "Field ${DL_HOST}" "HWND"
			EnableWindow $2 0

		ReadINIStr $2 "${MUI_INIFILE}" "Field ${LAB_HELP}" "HWND"
			ShowWindow $2 1
		SetCtlColors $2  0x6C6C6C transparent
		;CreateFont  $1 "Arial" "8" "700"
		;SendMessage $2 ${WM_SETFONT} $1 0 
	${endif}


	

	!insertmacro EditCtrStyle $HWND_TXT_MAC ${UPPERCASE}
	

	
	InstallOptions::show
	Pop $0 ;IO-Dll执行结果

FunctionEnd

Function LeaveCustom

	ReadINIStr $0 "${MUI_INIFILE}" "Settings" "State"
	
		${Switch} $0

##############################################################
			${Case} ${DL_NETCARD}
;MessageBox MB_OK "DL_NETCARD" # 按下 [选择网卡] 下拉列表
##############################################################


				ReadINIStr $1 "${MUI_INIFILE}" "Field ${DL_NETCARD}" "State"
				WriteRegStr HKLM "${REG_ME}\Settings" "NetCardSeleted" $1

				!insertmacro EnableTXTEdit $2 0 ;;禁用编辑文本框
			${if} $COUNTER_HOSTNUM > 0
				!insertmacro EnableGlobalBtn $2 1
			${else}
				!insertmacro EnableGlobalBtn $2 0

				ReadINIStr $2 "${MUI_INIFILE}" "Field ${TXT_NOTEPAD}" "HWND"
				ShowWindow $2 0
				ReadINIStr $2 "${MUI_INIFILE}" "Field ${GB_GLOBAL}" "HWND"
				SendMessage $2 ${WM_SETTEXT} 0 "STR:帮助信息"
				ReadINIStr $2 "${MUI_INIFILE}" "Field ${DL_HOST}" "HWND"
				EnableWindow $2 0

				ReadINIStr $2 "${MUI_INIFILE}" "Field ${LAB_HELP}" "HWND"
				ShowWindow $2 1
				SetCtlColors $2  0x6C6C6C transparent
				;CreateFont  $1 "Arial" "8" "700"
				;SendMessage $2 ${WM_SETFONT} $1 0 
			${endif}
				!insertmacro ShowReg2Txt $1 $2 $3
				${Break}
				
				
##############################################################
			${Case} ${DL_HOST}
;MessageBox MB_OK "DL_HOST" # 按下 [主机标识] 下拉列表
##############################################################

				ReadINIStr $1 "${MUI_INIFILE}" "Field ${DL_HOST}" "State"
				WriteRegStr HKLM "${REG_ME_HOSTLIST}" "LastHost" "$1"

				!insertmacro EnableGlobalBtn $2 1 
				!insertmacro EnableTXTEdit $2 0 ;;禁用编辑文本框
				!insertmacro ShowReg2Txt $1 $2 $3
				${Break}
##############################################################
			${Case} ${BTN_EDIT_HOST}
;MessageBox MB_OK "BTN_EDIT_HOST" # 按下 [编辑] 按钮
##############################################################
				!insertmacro EnableTXTEdit $2 1 ;;可用编辑文本框

				
				ReadINIStr $2 "${MUI_INIFILE}" "Field ${BTN_EXPORT_HOSTLIST}" "HWND"
				WriteINIStr "${MUI_INIFILE}" "Field ${BTN_EXPORT_HOSTLIST}" "Text" "放弃编辑主机(&C)"
				SendMessage $2 ${WM_SETTEXT} 0 "STR:放弃编辑主机(&C)"
				;---检测转化文本字符显示
				!insertmacro CovertTxt4Edit $2
				!insertmacro EnableGlobalBtn $2 0 ;;隐藏全局操作按钮区-->显示临时编辑帮助区
				
				!insertmacro ShowNotePad $2 $1
					
				ReadINIStr $2 "${MUI_INIFILE}" "Field ${BTN_ADD}" "HWND"
				;;隐藏[添加到主机列表]
					ShowWindow $2 0 

				ReadINIStr $2 "${MUI_INIFILE}" "Field ${BTN_UPDATE}" "HWND"
				 ;; 可用[更新主机]
					EnableWindow $2 1
					ShowWindow $2 1
					
				ReadINIStr $2 "${MUI_INIFILE}" "Field ${BTN_DELETE}" "HWND"
					;; 可用[删除主机]
					ShowWindow $2 1
					${if} $COUNTER_HOSTNUM > 0 ;有主机信息
						EnableWindow $2 1
					${else}
						EnableWindow $2 0
					${endif}
				Abort
				${Break}
				
				
##############################################################
			${Case} ${BTN_NEW_HOST}
;MessageBox MB_OK "BTN_NEW_HOST" # 按下 [新建] 按钮
##############################################################

				ReadINIStr $2 "${MUI_INIFILE}" "Field ${BTN_EXPORT_HOSTLIST}" "HWND"
				WriteINIStr "${MUI_INIFILE}" "Field ${BTN_EXPORT_HOSTLIST}" "Text" "放弃新建主机(&C)"
				SendMessage $2 ${WM_SETTEXT} 0 "STR:放弃新建主机(&C)"
				SendMessage $HWND_TXT_HOST ${WM_SETTEXT} 0 "STR:"
				SendMessage $HWND_TXT_MAC ${WM_SETTEXT} 0 "STR:"
				SendMessage $HWND_TXT_IP ${WM_SETTEXT} 0 "STR:"


						ReadINIStr $4 ${MUI_INIFILE} "Field ${DL_NETCARD}" State
						ReadINIStr $3 ${MUI_INIFILE} "$4" "IP"
							StrCpy $1 "${STR_NOTEPAD_HELP}$\r$\n可能有用的参考信息:$\t  IP 地址:$3$\r$\n"
								StrCpy $3 $3 -3
							SendMessage $HWND_TXT_IP ${WM_SETTEXT} 0 "STR:$3"
						ReadINIStr $3 ${MUI_INIFILE} "$4" "MASK"
							SendMessage $HWND_TXT_MASK ${WM_SETTEXT} 0 "STR:$3"
							StrCpy $1 "$1子网掩码:$3"
						ReadINIStr $3 ${MUI_INIFILE} "$4" "NETGATE"
							SendMessage $HWND_TXT_NETGATE ${WM_SETTEXT} 0 "STR:$3"
							StrCpy $1 "$1  默认网关:$3"
						ReadINIStr $3 ${MUI_INIFILE} "$4" "DNS"
							SendMessage $HWND_TXT_DNS ${WM_SETTEXT} 0 "STR:$3"
							StrCpy $1 "$1  首选DNS :$3"
							;MessageBox MB_OK "$1"
							
					ReadINIStr $2 "${MUI_INIFILE}" "Field ${TXT_NOTEPAD}" "State"
					${if} $2 == "${STR_NOTEPAD_HELP}"
					${orif} $2 == ""
						ReadINIStr $2 "${MUI_INIFILE}" "Field ${TXT_NOTEPAD}" "HWND"
						;SendMessage $2 ${WM_SETTEXT} 0 "STR:${STR_NOTEPAD_HELP}$\r$\n$\r$\n$1$\r$\n"
						SendMessage $2 ${WM_SETTEXT} 0 "STR:$1"
						;SendMessage $2 ${EM_SETSEL} 255 0
					${endif}
					ShowWindow $2 1


				
			ReadINIStr $2 "${MUI_INIFILE}" "Field ${BTN_UPDATE}" "HWND"
				 ;; 隐藏[更新主机]
				ShowWindow $2 0
				EnableWindow $2 0
					
			ReadINIStr $2 "${MUI_INIFILE}" "Field ${BTN_DELETE}" "HWND"
				 ;; 隐藏[删除主机]
				 
				ShowWindow $2 0
				EnableWindow $2 0

			ReadINIStr $2 "${MUI_INIFILE}" "Field ${BTN_ADD}" "HWND"
				;; 显示[添加到主机列表]
				ShowWindow $2 1
				EnableWindow $2 1
				!insertmacro EnableTXTEdit $2 1 ;;可用编辑文本框
			!insertmacro EnableGlobalBtn $2 0 ;;隐藏全局操作按钮区-->显示临时编辑帮助区
				System::Call "user32::SetFocus(i $HWND_TXT_HOST)i" ;;设置焦点
				Abort ;${Break}
				
##############################################################
			${Case} ${BTN_IMPORT_HOSTLIST}
;MessageBox MB_OK "BTN_IMPORT_HOSTLIST" # 按下 [导入备份列表] 按钮
##############################################################

			${Do}
				;FindWindow $4 '#32770' '${STR_CAPTION}'
				;ShowWindow $4 0
				Dialogs::Open "${STR_OPEN_FILE_EXT}" 1  "${STR_OPEN_CAPTION}" $EXEDIR ${VAR_OPENSAVE_ID}
				${if} ${VAR_OPENSAVE} == 0
					${ExitDo}
				${else}
					System::Call 'kernel32::_lopen(t "${VAR_OPENSAVE}", i 0) i .r1'
					System::Call 'kernel32::GetFileSize(i $1, i) i .r2'
					IntOp $2 $2 / 1024
					System::Call 'kernel32::_lclose(i $1) i'
					${if} $2  0 ;;导入了新主机
									!insertmacro EnableGlobalBtn $2 1 
									!insertmacro EnableTXTEdit $2 0 ;;禁用编辑文本框
									ReadINIStr $1 "${MUI_INIFILE}" "Field ${DL_HOST}" "HWND"
									EnableWindow $1 1
									SendMessage $1 ${CB_SHOWDROPDOWN} 1 1

								${endif}
							;;开始转化导入
							${ExitDo}
						${endif}
					${endif}
					System::Call 'user32::MessageBeep(i) i (0x00000101)'
					Messagebox::show MB_ICONHAND|MB_TOPMOST "添加到主机列表" "$SYSDIR\Shell32.dll,200" \
					"${MSG_OPEN_ERROR}  " \
					"确定 (&O)"
					Pop $R0

				${endif}
			${Loop}
			!insertmacro ShowReg2Txt $1 $2 $3
		${Break}

##############################################################
			${Case} ${BTN_EXPORT_HOSTLIST}
;MessageBox MB_OK "BTN_EXPORT_HOSTLIST" # 按下 [备份主机列表] 按钮
##############################################################

			
			
			ReadINIStr $4 "${MUI_INIFILE}" "Field ${BTN_EXPORT_HOSTLIST}" Text
			StrCpy $4 "$4"  4
			${if} $4 == "放弃"

				!insertmacro EnableTXTEdit $2 0 ;;禁用编辑文本框
				
				${if} $COUNTER_HOSTNUM < 1
					ReadINIStr $2 "${MUI_INIFILE}" "Field ${DL_HOST}" "HWND"
					EnableWindow $2 0
					ReadINIStr $2 "${MUI_INIFILE}" "Field ${GB_GLOBAL}" "HWND"
					SendMessage $2 ${WM_SETTEXT} 0 "STR:帮助信息"
					ReadINIStr $2 "${MUI_INIFILE}" "Field ${LAB_HELP}" "HWND"
					ShowWindow $2 1
					SetCtlColors $2  0x004040 transparent
					ReadINIStr $2 "${MUI_INIFILE}" "Field ${TXT_NOTEPAD}" "HWND"
					ShowWindow $2 0
				${else}
					!insertmacro EnableGlobalBtn $2 1 
				${endif}


			${else}
				${if} $COUNTER_HOSTNUM < 1
					System::Call 'user32::MessageBeep(i) i (0x00000001)'
					MessageBox::show MB_ICONHAND|MB_TOPMOST "备份主机列表" "$SYSDIR\shell32.dll,234" \
					"当前没有任何主机信息,无需备份。  " \
					"确定 (&O)"
					Pop $R0
					Abort
				${endif}
				FindWindow $4 '#32770' '${STR_CAPTION}'
				Dialogs::Save "${STR_SAVE_FILE_EXT}" 1 "${STR_SAVE_CAPTION}" $EXEDIR ${VAR_OPENSAVE_ID}

				${if} ${VAR_OPENSAVE} == 0
					Abort
				${else}
					StrCpy $1 "${VAR_OPENSAVE}" "" -5
					StrCpy $2 $1 "" -4
						${if} $2 == ".reg"
							ExecWait `"$WINDIR\Regedit.exe" /s /e "${VAR_OPENSAVE}" "${REG_ME_HOSTLIST_FULL}"`
						ShowWindow $4 0
						System::Call 'user32::MessageBeep(i) i (0x00000001)'
						MessageBox::show MB_ICONHAND|MB_TOPMOST "备份为REG格式" "$SYSDIR\shell32.dll,178" \
						"已成功将当前列表中共 $COUNTER_HOSTNUM 个主机信息备份到指定的注册表文件中。   " \
						"确定 (&O)"
						Pop $R0
						ShowWindow $4 1
						Abort

						${else} 
							${if} $1 != ".hlbf"
								StrCpy ${VAR_OPENSAVE} "${VAR_OPENSAVE}.hlbf"
							${endif}
							ShowWindow $4 0
							Call SaveHostlist2INI

					System::Call 'user32::MessageBeep(i) i (0x00000001)'
					MessageBox::show MB_ICONHAND|MB_TOPMOST "备份完成" "$SYSDIR\shell32.dll,178" \
					"已成功将当前列表中共 $COUNTER_HOSTNUM 个主机信息保存到指定的文件中。   " \
					"确定 (&O)"
					Pop $R0
					ShowWindow $4 1
						${endif}
				${endif}
				
			${endif}
			;ShowWindow $1 1
				!insertmacro ShowReg2Txt $1 $2 $3
			${Break}
				
				
##############################################################
			${Case} ${BTN_DELETE}
;MessageBox MB_OK "BTN_DELETE" # 按下 [删除主机] 按钮
##############################################################

				ReadINIStr $3 "${MUI_INIFILE}" "Field ${DL_HOST}" "State"
					System::Call 'user32::MessageBeep(i) i (0x00000000)'
					MessageBox::show MB_ICONHAND|MB_TOPMOST "删除确认" "$SYSDIR\Shell32.dll,33" \
					"你确定删除主机标识 $3 对应的主机信息吗?    " \
					"确定 (&O)" "取消 (&C)"
					Pop $R0
					${if} $R0 != 1
						Abort
					${endif}
				
				DeleteRegKey HKLM "${REG_ME_HOSTLIST}\$3"
				DeleteRegValue HKLM "${REG_ME_HOSTLIST}" "LastHost"

				!insertmacro EnableTXTEdit $2 0 ;;禁用编辑文本框
				ReadINIStr $1 "${MUI_INIFILE}" "Field ${DL_HOST}" "HWND"
					SendMessage $1 ${CB_GETCURSEL} "" "" $2
					SendMessage $1 ${CB_DELETESTRING} "$2" ""
				!insertmacro AddHostNum -1
				${if} $COUNTER_HOSTNUM < 1
					;!insertmacro EnableGlobalBtn $2 1 
					ReadINIStr $2 "${MUI_INIFILE}" "Field ${DL_HOST}" "HWND"
					EnableWindow $2 0
					ReadINIStr $2 "${MUI_INIFILE}" "Field ${GB_GLOBAL}" "HWND"
					SendMessage $2 ${WM_SETTEXT} 0 "STR:帮助信息"
					ReadINIStr $2 "${MUI_INIFILE}" "Field ${LAB_HELP}" "HWND"
					SetCtlColors $2  0x004040 transparent
					ShowWindow $2 1
					ReadINIStr $2 "${MUI_INIFILE}" "Field ${TXT_NOTEPAD}" "HWND"
					ShowWindow $2 0
				${else}
					!insertmacro EnableGlobalBtn $2 1 
				${endif}
				Call ResetSelectHost
				!insertmacro ShowReg2Txt $1 $2 $3
				${Break}
				
##############################################################
			${Case} ${BTN_UPDATE}
;MessageBox MB_OK "BTN_UPDATE" # 按下 [保存更新] 按钮
##############################################################

				ReadINIStr $3 "${MUI_INIFILE}" "Field ${TXT_HOST}" "State"
				${if} $3 == ""
					System::Call 'user32::MessageBeep(i) i (0x00000001)'
					MessageBox::show MB_ICONHAND|MB_TOPMOST "保存更新" "$SYSDIR\shell32.dll,220" \
					"请填写主机标识。  " \
					"确定(&O)"
					Pop $R0
					System::Call "user32::SetFocus(i $HWND_TXT_HOST)i"
					Abort
				${else}
						${if} 	$COUNTER_HOSTNUM < 1
							
							ReadINIStr $1 "${MUI_INIFILE}" "Field ${DL_HOST}" "HWND"
								SendMessage $1 ${CB_GETCURSEL} "" "" $2
								SendMessage $1 ${CB_DELETESTRING} "$2" "" ;;删除旧主机标识
							!insertmacro AddHostNum 1
							DeleteINIStr "${MUI_INIFILE}" "Field ${DL_HOST}" "State"
						${endif}
					ReadINIStr $4 "${MUI_INIFILE}" "Field ${DL_HOST}" "State"
						${if} "$3" == "$4"
							DeleteRegKey HKLM "${REG_ME_HOSTLIST}\$4"
						${else} ;;标识改动
							ReadRegStr $1 HKLM "${REG_ME_HOSTLIST}\$3" ""
								${if} $1 == "Setted" ;;已有标识
									System::Call 'user32::MessageBeep(i) i (0x00000001)'
									MessageBox::show MB_ICONHAND|MB_DEFBUTTON2|MB_TOPMOST "保存更新" "$SYSDIR\shell32.dll,220" \
									"主机标识 $\"$3$\" 已被占用,保存更新将会覆盖原主机信息,是否继续?  " \
									"是 (&Y)" "否 (&N)"
									Pop $R0
									${if} $R0 != 1 ;;放弃覆盖
										SendMessage $HWND_TXT_HOST ${EM_SETSEL} 255 0
										System::Call "user32::SetFocus(i $HWND_TXT_HOST)i"
										Abort
									${endif}
										

										
										 ;;要覆盖
									ReadINIStr $1 "${MUI_INIFILE}" "Field ${DL_HOST}" "HWND"
									SendMessage $1 ${CB_SELECTSTRING} 0 "STR:$3"
								${else} ;;新的标识
									DeleteRegKey HKLM "${REG_ME_HOSTLIST}\$4" ;;删除旧主机
									ReadINIStr $1 "${MUI_INIFILE}" "Field ${DL_HOST}" "HWND"
									SendMessage $1 ${CB_GETCURSEL} "" "" $2
									SendMessage $1 ${CB_DELETESTRING} "$2" "" ;;删除旧主机标识
									
									SendMessage $1 ${CB_ADDSTRING} 0 "STR:$3" ;;添加新标识
									SendMessage $1 ${CB_SELECTSTRING} 0 "STR:$3" 
								${endif}
						${endif}
						
					!insertmacro EnableGlobalBtn $2 1 
					!insertmacro EnableTXTEdit $2 0 ;;禁用编辑文本框
					!insertmacro SaveTxt2Reg $3 $2 $1 ;;保存并处理文本显示

				${endif}

			Abort ; ${Break}
				
##############################################################
			${Case} ${BTN_ADD}
;MessageBox MB_OK "BTN_ADD" # 按下 [添加到主机列表] 按钮
##############################################################

				ReadINIStr $3 "${MUI_INIFILE}" "Field ${TXT_HOST}" "State"
				${if} $3 == "" ;没填写主机标识
					System::Call 'user32::MessageBeep(i) i (0x00000001)'
					Messagebox::show MB_ICONHAND|MB_TOPMOST "添加到主机列表" "$SYSDIR\Shell32.dll,176" \
					"请先为当前主机填写一个主机标识,以方便以后在主机标识下拉菜单中选择。   " \
					"确定(&O)"
					Pop $R0
					System::Call "user32::SetFocus(i $HWND_TXT_HOST)i"
					Abort

				${else} ;;开始添加到操作
					ReadRegStr $1 HKLM "${REG_ME_HOSTLIST}\$3" ""
					${if} $1 == "Setted"
						ReadINIStr $1 "${MUI_INIFILE}" "Field ${DL_HOST}" "HWND"
							SendMessage $1 ${CB_SELECTSTRING} 0 "STR:$3"
								System::Call 'user32::MessageBeep(i) i (0x00000001)'
								MessageBox::show MB_ICONHAND|MB_DEFBUTTON2|MB_TOPMOST "添加到主机列表" "$SYSDIR\shell32.dll,176" \
								"主机标识 $\"$3$\" 已被占用,是否将其覆盖?   " \
								"是 (&Y)" "否 (&N)"
								Pop $R0
								${if} $R0 != 1 ;;放弃覆盖
									SendMessage $HWND_TXT_HOST ${EM_SETSEL} 255 0
									System::Call "user32::SetFocus(i $HWND_TXT_HOST)i"
									Abort
								${endif}						
							;;覆盖

					${else}
						
						${if} 	$COUNTER_HOSTNUM < 1
						ReadINIStr $1 "${MUI_INIFILE}" "Field ${DL_HOST}" "HWND"
							SendMessage $1 ${CB_GETCURSEL} "" "" $2
							SendMessage $1 ${CB_DELETESTRING} "$2" "" ;;删除旧主机标识
						${endif}
						!insertmacro AddHostNum 1 ;;全局计数器+1
						ReadINIStr $1 "${MUI_INIFILE}" "Field ${DL_HOST}" "HWND"
						SendMessage $1 ${CB_ADDSTRING} 0 "STR:$3"
						SendMessage $1 ${CB_SELECTSTRING} -1 "STR:$3"
					${endif}
					;;同步到窗体信息INI文件
					WriteINIStr ${MUI_INIFILE} "Field ${DL_HOST}" State "$3"
					
					!insertmacro EnableGlobalBtn $2 1 
					!insertmacro EnableTXTEdit $2 0 ;;禁用编辑文本框
					
					!insertmacro SaveTxt2Reg $3 $2 $1 ;;保存并处理文本显示
					
				${endif}
						!insertmacro ShowReg2Txt $1 $2 $3
					${Break}
				


##############################################################
			${Case} ${BTN_CHANGE_MAC}
;MessageBox MB_OK "BTN_CHANGE_MAC" # 按下 [修改MAC] 按钮
##############################################################
				ReadINIStr $2 "${MUI_INIFILE}" "Field ${TXT_MAC}" "State"
						StrCpy $4 "更改为 $\"$2$\""
					${if} $2 == "${STR_UNSETTED}"
					${orif} $2 == "${STR_ERRORFORMAT}"
						StrCpy $2 ""
						StrCpy $4 "还原为 $\"网卡缺省值$\""
					${endif}
				ReadINIStr $1 "${MUI_INIFILE}" "Field ${DL_NETCARD}" "State"
					ReadINIStr $1 "${MUI_INIFILE}" "$1" "RegKeyIndex"
					ReadRegStr $3 HKLM "${REG_NETWORK_ADAPTERS}\$1" "NetworkAddress"
					${if} $3 == $2
						System::Call 'user32::MessageBeep(i) i (0x00000002)'
						MessageBox::show MB_ICONHAND|MB_TOPMOST "提示" "0,103" \
						"当前 MAC 信息 已经是你要修改的值,无需重复修改。$\r$\n$\r$\n提示:你可以 [开启/禁用网络连接] 以刷新 MAC 信息。  $\r$\n"   \
						"哦 (&O)"
						Pop $R0
						Abort
					${orif} $3 == ""
						StrCpy $3 "网卡缺省值"
					${endif}
					System::Call 'user32::MessageBeep(i) i (0x00000001)'
					MessageBox::show MB_ICONHAND|MB_DEFBUTTON2|MB_TOPMOST "修改 MAC 确认" "$SYSDIR\shell32.dll,24" \
					"你确定要将当前 MAC 信息 $\"$3$\" $4 吗?"   \
					"确定 (&O)" "不要 (&C)"
					Pop $R0
					${if} $R0 != 1 ;;不修改
						Abort
					${endif}
						${if} $2 == ""
							DeleteRegValue HKLM "${REG_NETWORK_ADAPTERS}\$1" "NetworkAddress"
						${else}
							WriteRegStr HKLM "${REG_NETWORK_ADAPTERS}\$1" "NetworkAddress" "$2"
						${endif}
						System::Call 'user32::MessageBeep(i) i (0x00000001)'
						MessageBox::show MB_ICONHAND|MB_DEFBUTTON2|MB_TOPMOST "MAC 修改成功" "$SYSDIR\shell32.dll,137" \
						"MAC 信息已经成功更改,是否要立刻 [开启/禁用网络连接] 以生效更新?  "   \
						"是 (&Y)" "否 (&N)"
						Pop $R0
						${if} $R0 == 1
							StrCpy $R0 "ExecTwice"
							Call RefreshConnection
							StrCpy $R0 ""
					${endif}
				Abort
				;${Break}
				
##############################################################
			${Case} ${BTN_CHANGE_IP}
;MessageBox MB_OK "BTN_CHANGE_MAC" # 按下 [修改IP] 按钮
##############################################################


				ReadINIStr $2 ${MUI_INIFILE} "Field ${DL_NETCARD}" State
				ReadINIStr $2 ${MUI_INIFILE} "$2" "InstanceId"
				ReadRegStr $3 HKLM "${REG_NETWORK_CONNECTIONS}\$2\Connection" "Name"
					System::Call 'user32::MessageBeep(i) i (0x00000001)'
					MessageBox::show MB_ICONHAND|MB_DEFBUTTON2|MB_TOPMOST "TCP/IP信息修改确认" "0,103" \
					"确定要将当前主机包含的 TCP/IP 信息修改到 “$3” 属性设置吗?    "   \
					"是 (&Y)" "否 (&N)"
					Pop $R0
					${if} $R0 != 1
						Abort
					${endif}
					
					StrCpy $1 "netsh interface ip set address $\"$3$\" static"
				!insertmacro SetOneInfoTXT $2 "TXT_IP" " IP 地址"
					StrCpy $1 "$1 $2"
				!insertmacro SetOneInfoTXT $2 "TXT_MASK" "子网掩码"
					StrCpy $1 "$1 $2"
				!insertmacro SetOneInfoTXT $2 "TXT_NETGATE" "默认网关"
					StrCpy $1 "$1 $2 1"
				!insertmacro SetOneInfoTXT $2 "TXT_DNS" "首选DNS"
					StrCpy $2 "netsh interface ip set dns $\"$3$\" static $2 primary"
				;;最小化窗口,防止用户等待乱点
					FindWindow $4 '#32770' '${STR_CAPTION}'
					ShowWindow $4 2
					Sleep 200
					Banner::show /NOUNLOAD "STR:正在校验 TCP/IP 信息的正确性……"
					Banner::getWindow /NOUNLOAD
					Pop $R0
					GetDlgItem $R1 $R0 1030
					SendMessage $R1 ${WM_SETTEXT} 0 "STR:正在校验 TCP/IP 信息的正确性……"
					nsExec::ExecToStack "$1"
					Pop $3
					Pop $3
					StrCpy $3 $3 -4
						${if} $3 == "Ok."
						${orif} $3 == "确定。"

							nsExec::ExecToStack "$2"
							Pop $3
							Pop $3
							StrCpy $3 $3 -4
								${if} $3 == "Ok."
								${orif} $3 == "确定。"
									SendMessage $R1 ${WM_SETTEXT} 0 "STR:正在更改当前网络连接的 TCP/IP 信息……"	
									Sleep 4000
									ReadINIStr $2 ${MUI_INIFILE} "Field ${DL_NETCARD}" State
									Push $2
									Call GetTcpIpInfo
									SendMessage $R1 ${WM_SETTEXT} 0 "STR:正在校验操作结果……"	
									Sleep 3000
									Banner::destroy	
										System::Call 'user32::MessageBeep(i) i (0x00000001)'
										MessageBox::show MB_ICONHAND|MB_DEFBUTTON2|MB_TOPMOST "修改 IP 成功" "$SYSDIR\shell32.dll,14" \
										"当前网卡的 TCP/IP 信息已经成功更改!  "   \
										"谢谢 (&T)"
										Pop $R0
									ShowWindow $4 1
									Abort
								${else}
								Banner::destroy	
										System::Call 'user32::MessageBeep(i) i (0x00000001)'
										MessageBox::show MB_ICONHAND|MB_DEFBUTTON2|MB_TOPMOST "更改失败" "$SYSDIR\shell32.dll,18" \
										"DNS 更改失败:$3   "   \
										"确定 (&O)"
										Pop $R0
									
									ShowWindow $4 1
									Abort
								${endif}
						${endif}
						Banner::destroy	
							System::Call 'user32::MessageBeep(i) i (0x00000001)'
							MessageBox::show MB_ICONHAND|MB_DEFBUTTON2|MB_TOPMOST "更改失败" "$SYSDIR\shell32.dll,18" \
							"更改失败:$3   "   \
							"确定 (&O)"
							Pop $R0
				
				ShowWindow $4 1
				Abort
				;${Break}
				
##############################################################
			${Case} ${BTN_MINIMIZE}
;MessageBox MB_OK "BTN_MINIMIZE" # 按下 [全部更改] 按钮
##############################################################
				FindWindow $4 '#32770' '${STR_CAPTION}'
				ShowWindow $4 2
				${Break}

##############################################################
			${Case} ${BTN_RF_CONNECTION}
;MessageBox MB_OK "BTN_RF_CONNECTION" # 按下 [开启禁用网络] 按钮
##############################################################

				Call RefreshConnection
				Abort
				;${Break}
		
		${EndSwitch}

Abort ;;
;;页面回调检测结束
FunctionEnd ;LeaveCustom



##############################################################################




##############################################################
#	功能 -- 获取当前 TCP/IP 信息 
	 ;!macro GetRegMultiStr --(预先)子宏
	 ;Function SubCallBack --(预先)子函数
	 ;Function GetTcpIpInfo --主功能
##############################################################

!macro GetRegMultiStr Arg_reg.value Arg_ini.value

	StrCpy $3 "${Arg_ini.value}"
	GetFunctionAddress $2 SubCallBack
		${ReadRegMultiStr} ${HKLM} "${REG_NETWORK_TCPIP}\$1" "${Arg_reg.value}" $2
	ClearErrors

!macroend

Function SubCallBack
	Exch $2
	
		${if} $2 == "" 
			GetErrorLevel $2
			;MessageBox MB_OK "Error Level: $2"
		${else}
			;MessageBox MB_OK "$3: $2"
			WriteINIStr ${MUI_INIFILE} "$0" "$3" "$2"
		${endif}
	
	Pop $2
FunctionEnd ;SubCallBack
	
Function GetTcpIpInfo

	Exch $0
	Push $1
	Push $2
	Push $3
	
	ReadINIStr $1 ${MUI_INIFILE} "$0" "InstanceId"
	
	!insertmacro GetRegMultiStr "IPAddress" "IP"
	!insertmacro GetRegMultiStr "SubnetMask" "MASK"
	!insertmacro GetRegMultiStr "DefaultGateway" "NETGATE"
	
	ReadRegStr $2 HKLM "${REG_NETWORK_TCPIP}\$1" "NameServer"
		StrCpy $1 0
		${Do}
			StrCpy $3 $2 1 $1
			${IfThen} $3 == ',' ${|} ${ExitDo} ${|}
			IntOp $1 $1 + 1
		${LoopUntil} $3 == "" 
		StrCpy $2 $2 $1
		WriteINIStr ${MUI_INIFILE} "$0" "DNS" "$2"
		
	Pop $3
	Pop $2
	Pop $1
	Pop $0
	
FunctionEnd ;GetTcpIpInfo


##############################################################
#	功能 -- 初始化数据 
#	Function InitNetCardInfo
#	Function InitHostList
#	Function InitLastHostInfo
##############################################################
Function InitNetCardInfo

	Push $0
	Push $1
	Push $2
	Push $3

	StrCpy $0 0
	WriteINIStr ${MUI_INIFILE} "Settings" NetCardNum 0
	WriteINIStr ${MUI_INIFILE} "Field ${DL_NETCARD}" ListItems ""
        ${Do}
            EnumRegKey $1 HKLM "${REG_NETWORK_ADAPTERS}" $0
                ${IfThen} $1 == "" ${|} ${ExitDo} ${|}
            ReadRegStr $2 HKLM "${REG_NETWORK_ADAPTERS}\$1\Ndi\Interfaces" "LowerRange"
                ${if} $2 == "ethernet"
					ReadRegStr $2 HKLM "${REG_NETWORK_ADAPTERS}\$1" "DriverDesc"
						WriteINIStr ${MUI_INIFILE} "Field ${DL_NETCARD}" State "$2"
						WriteINIStr ${MUI_INIFILE} "$2" "RegKeyIndex" "$1"
					ReadRegStr $3 HKLM "${REG_NETWORK_ADAPTERS}\$1" "NetworkAddress"
						${if} $3 == ""
							StrCpy $3 "${STR_UNSETTED}"
						${endif}
						WriteINIStr ${MUI_INIFILE} "$2" "Mac" "$3"
					ReadRegStr $3 HKLM "${REG_NETWORK_ADAPTERS}\$1" "NetCfgInstanceId"
						WriteINIStr ${MUI_INIFILE} "$2" "InstanceId" "$3"
						Push $2
						Call GetTcpIpInfo
					ReadINIStr $3 ${MUI_INIFILE} "Field ${DL_NETCARD}" ListItems
						${if} $3 != ""
							StrCpy $2 "$2|$3"
						${endif}
						WriteINIStr ${MUI_INIFILE} "Field ${DL_NETCARD}" ListItems "$2"
					ReadINIStr $3 ${MUI_INIFILE} "Settings" NetCardNum
						IntOp $3 $3 + 1
						WriteINIStr ${MUI_INIFILE} "Settings" NetCardNum $3
				${endif}
				IntOp $0 $0 + 1
		${Loop}
		

	Pop $3
	Pop $2
	Pop $1
	Pop $0
	
FunctionEnd ;;InitNetCardInfo

Function InitHostList

	Push $0
	Push $1
	Push $2

	StrCpy $0 0

	WriteINIStr ${MUI_INIFILE} "Field ${DL_HOST}" ListItems "" ;;初始化主机列表
        ${Do}
            EnumRegKey $1 HKLM "${REG_ME_HOSTLIST}" $0
            ${IfThen} $1 == "" ${|} ${ExitDo} ${|}
            ;MessageBox MB_OK "$1"
				ReadRegStr $2 HKLM "${REG_ME_HOSTLIST}\$1" ""
				${if} $2 == "Setted" ;;检验是否合法
            	WriteINIStr ${MUI_INIFILE} "Field ${DL_HOST}" State "$1"
				ReadINIStr $2 ${MUI_INIFILE} "Field ${DL_HOST}" ListItems
					${if} $2 != ""
						StrCpy $1 "$1|$2" ;合并/主机标识项目
					${endif}
					WriteINIStr ${MUI_INIFILE} "Field ${DL_HOST}" ListItems "$1"
					!insertmacro AddHostNum 1
				${endif}
			IntOp $0 $0 + 1
		${Loop}
		
	Pop $2
	Pop $1
	Pop $0
FunctionEnd ;;InitHostList

Function ResetSelectHost

	Push $0
	Push $1
	Push $2
	
	ReadINIStr $2 "${MUI_INIFILE}" "Field ${DL_HOST}" "HWND"
		${if} $COUNTER_HOSTNUM  0 ;有主机信息
			WriteINIStr ${MUI_INIFILE} "Field ${GB_SELHOST}" Text "选择主机  ( 当前共 $COUNTER_HOSTNUM 个主机信息 )"
			WriteINIStr ${MUI_INIFILE} "Field ${DL_HOST}" Flags "Notify" ;初始可用主机下拉列表控件
			ReadRegStr $0 HKLM "${REG_ME_HOSTLIST}" "LastHost"
			ReadRegStr $1 HKLM "${REG_ME_HOSTLIST}\$0" ""
				${if} $1 == "Setted"
					WriteINIStr ${MUI_INIFILE} "Field ${DL_HOST}" State "$0"
				${endif}
				
			ReadINIStr $0 ${MUI_INIFILE} "Field ${DL_HOST}" State
				WriteINIStr ${MUI_INIFILE} "Field ${TXT_HOST}" State $0
			ReadRegStr $2 HKLM "${REG_ME_HOSTLIST}\$0" "MAC"
				${if} $2 == ""
				${orif} $2 == "${STR_UNSETTED}"
						StrCpy $2 "${STR_UNSETTED}"
				${else}
					StrLen $3 "$2"
					${if} $3 != 12
						StrCpy $2 "${STR_ERRORFORMAT}"
					${endif}
				${endif}
				WriteINIStr ${MUI_INIFILE} "Field ${TXT_MAC}" State $2
			ReadRegStr $2 HKLM "${REG_ME_HOSTLIST}\$0" "IP"
				${if} $2 == ""
					StrCpy $2 "${STR_UNSETTED}"
				${endif}
				WriteINIStr ${MUI_INIFILE} "Field ${TXT_IP}" State $2
			ReadRegStr $2 HKLM "${REG_ME_HOSTLIST}\$0" "MASK"
				${if} $2 == ""
					StrCpy $2 "${STR_UNSETTED}"
				${endif}
				WriteINIStr ${MUI_INIFILE} "Field ${TXT_MASK}" State $2
			ReadRegStr $2 HKLM "${REG_ME_HOSTLIST}\$0" "NETGATE"
				${if} $2 == ""
					StrCpy $2 "${STR_UNSETTED}"
				${endif}
				WriteINIStr ${MUI_INIFILE} "Field ${TXT_NETGATE}" State $2
			ReadRegStr $2 HKLM "${REG_ME_HOSTLIST}\$0" "DNS"
				${if} $2 == ""
					StrCpy $2 "${STR_UNSETTED}"
				${endif}
				WriteINIStr ${MUI_INIFILE} "Field ${TXT_DNS}" State $2	
			
			
		${else} ;无主机信息
			WriteINIStr ${MUI_INIFILE} "Field ${DL_HOST}" State "${STR_DEFAULT_HOST}"
			WriteINIStr ${MUI_INIFILE} "Field ${DL_HOST}" ListItems "${STR_DEFAULT_HOST}"
			
			ReadRegStr $2 HKLM "${REG_WINLOGON}" "AltDefaultDomainName"
				WriteINIStr ${MUI_INIFILE} "Field ${TXT_HOST}" State $2
			ReadINIStr $1 ${MUI_INIFILE} "Field ${DL_NETCARD}" State
			ReadINIStr $2 ${MUI_INIFILE} "$1" "MAC"
				WriteINIStr ${MUI_INIFILE} "Field ${TXT_MAC}" State $2
			ReadINIStr $2 ${MUI_INIFILE} "$1" "IP"
				WriteINIStr ${MUI_INIFILE} "Field ${TXT_IP}" State $2
			ReadINIStr $2 ${MUI_INIFILE} "$1" "MASK"
				WriteINIStr ${MUI_INIFILE} "Field ${TXT_MASK}" State $2
			ReadINIStr $2 ${MUI_INIFILE} "$1" "NETGATE"
				WriteINIStr ${MUI_INIFILE} "Field ${TXT_NETGATE}" State $2
			ReadINIStr $2 ${MUI_INIFILE} "$1" "DNS"
				WriteINIStr ${MUI_INIFILE} "Field ${TXT_DNS}" State $2	
		${endif}
	
	Pop $2
	Pop $1
	Pop $0
	
FunctionEnd ;;InitLastHostInfo


##############################################################
#	功能 -- 刷新(开启/禁用) 网络连接
#	Function RefreshConnection
##############################################################
Function RefreshConnection

	Push $0
	Push $1
	Push $2
	Push $3
	Push $4
	
	System::Call "advapi32::GetUserName(t .r0, *i ${NSIS_MAX_STRLEN} r1) i.r2"
	;MessageBox MB_OK "UserName: $0 | CharsNm: $1"
		StrCpy $2 $0 2
	Loop:
		IfFileExists "$TEMP\$2$1.tmp" 0 Pass
			IntOp $1 $1 + 100 
		Goto Loop
	Pass:
		StrCpy $1 "$TEMP\$2$1.tmp"
		ReadINIStr $2 ${MUI_INIFILE} "Field ${DL_NETCARD}" State
		ReadINIStr $2 ${MUI_INIFILE} "$2" "InstanceId"
		ReadRegStr $2 HKLM "${REG_NETWORK_CONNECTIONS}\$2\Connection" "Name"
		ReadRegStr $3 HKCR "${REG_NETWORK_FOLDERNAME}" ""
		!insertmacro CreateVBScript "$1" "$2" "$3"
	Sleep 50 ;;稍等I/O
	;FindWindow $4 '#32770' '${STR_CAPTION}'
	;ShowWindow $4 2
	;MessageBox MB_OK "VB脚本已经生成完毕,点击确定打开,查看:$1"
	;ExecWait `"$SYSDIR\notepad.exe" "$1"`
	;Quit
	;ShowWindow $4 1
	ExecWait `"$SYSDIR\WScript.exe" /B /E:vbs "$1"`
	${If} $R0 == "ExecTwice"
		Sleep 5000 ;;等待系统5秒
		ExecWait `"$SYSDIR\WScript.exe" /B /E:vbs "$1"`
	${endif}
		Delete "$1"
	
	Pop $4
	Pop $3
	Pop $2
	Pop $1
	Pop $0

FunctionEnd ;;RefreshConnection

##############################################################
#	功能 -- 导出主机列表备份 / 导入主机列表备份
#
#	Function SaveHostlist2INI
#	Function ImprotHostlist2REG
##############################################################
Function SaveHostlist2INI
	Push $0
	Push $1
	Push $2
	Push $3
	
		FileOpen $2 "${VAR_OPENSAVE}" w
			FileSeek $2 0 END
			FileWrite $2 "${STR_SAVE_FILE_NOTE}"
		FileClose $2
	StrCpy $0 0

	WriteINIStr ${VAR_OPENSAVE} "Main" HostNum 0
	WriteINIStr ${MUI_INIFILE} "Field ${DL_HOST}" ListItems ""
        ${Do}
            EnumRegKey $1 HKLM "${REG_ME_HOSTLIST}" $0
            ${IfThen} $1 == "" ${|} ${ExitDo} ${|}

            ReadRegStr $2 HKLM "${REG_ME_HOSTLIST}\$1" ""
			${if} $2 == "Setted"
			;${orif} $2 == "Hidden"
				ReadINIStr $3 ${VAR_OPENSAVE} "Main" HostNum
					IntOp $3 $3 + 1
					WriteINIStr ${VAR_OPENSAVE} "Main" HostNum $3
					
				FileOpen $2 "${VAR_OPENSAVE}" a
				FileSeek $2 0 END
				FileWrite $2 "$\r$\n"
				FileClose $2
				WriteINIStr ${VAR_OPENSAVE} "Host $3" FLAG "Setted"
				WriteINIStr ${VAR_OPENSAVE} "Host $3" NAME "$1"
				ReadRegStr $2 HKLM "${REG_ME_HOSTLIST}\$1" "MAC"
				${if} $2 == "${STR_ERRORFORMAT}"
				${orif} $2 == "${STR_UNSETTED}"
					StrCpy $2 ""
				${endif}
					WriteINIStr ${VAR_OPENSAVE} "Host $3" MAC "$2"
				ReadRegStr $2 HKLM "${REG_ME_HOSTLIST}\$1" "IP"
					${if} $2 == "${STR_UNSETTED}"
						StrCpy $2 ""
					${endif}
					WriteINIStr ${VAR_OPENSAVE} "Host $3" IP "$2"
				ReadRegStr $2 HKLM "${REG_ME_HOSTLIST}\$1" "MASK"
					${if} $2 == "${STR_UNSETTED}"
						StrCpy $2 ""
					${endif}
					WriteINIStr ${VAR_OPENSAVE} "Host $3" MASK "$2"
				ReadRegStr $2 HKLM "${REG_ME_HOSTLIST}\$1" "NETGATE"
					${if} $2 == "${STR_UNSETTED}"
						StrCpy $2 ""
					${endif}
					WriteINIStr ${VAR_OPENSAVE} "Host $3" NETGATE "$2"
				ReadRegStr $2 HKLM "${REG_ME_HOSTLIST}\$1" "DNS"
					${if} $2 == "${STR_UNSETTED}"
						StrCpy $2 ""
					${endif}
					WriteINIStr ${VAR_OPENSAVE} "Host $3" DNS "$2"	
				${endif}
					IntOp $0 $0 + 1
		${Loop}
			
				ReadRegStr $2 HKLM "${REG_ME_HOSTLIST}" "LastHost"
				WriteINIStr ${VAR_OPENSAVE} "Main" "RectHost" "$2"
				WriteINIStr ${VAR_OPENSAVE} "Main" "Type" "HostList Backup File"
		
	Pop $3
	Pop $2
	Pop $1
	Pop $0

FunctionEnd ;;SaveHostlist2INI



Function ImprotHostlist2REG
	Push $0
	Push $1
	Push $2
	Push $3
	Push $4	
	StrCpy $R4 -1 ;;临时选择标记容器			
	StrCpy $0 0 ;成功导入计数器
	ReadINIStr $4 ${VAR_OPENSAVE} "Main" HostNum
	${if} $4 <= 0
		MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST "主机列表备份文件中没有任何主机信息,无法导入!   " 
	${else}
			${if} 	$COUNTER_HOSTNUM  0
				MessageBox MB_OK|MB_ICONINFORMATION|MB_TOPMOST "导入完成: 从备份文件中成功导入 $0 个主机项目。   "
			${else}
				MessageBox MB_OK|MB_ICONINFORMATION|MB_TOPMOST "没有导入任何主机。  "
			${endif}
	${endif}

	Pop $4
	Pop $3
	Pop $2
	Pop $1
	Exch $0


FunctionEnd ;;ImprotHostlist2REG

Section -Nop
Quit
SectionEnd

点击另存资源文件