NSIS:如何验证IP地址框

时间:2016-11-25 05:59:18

标签: nsis

我在我的nsi脚本中添加了一个${NSD_CreateIPaddress}框,但默认情况下,验证每个IP字段的时间是0。我使用${GetText}获取IP地址值。

有没有办法删除默认值0并验证每个IP地址字段。请帮帮我。

1 个答案:

答案 0 :(得分:0)

我不确定你在问什么。如果要区分空白地址和有效“0.0.0.0”地址,可以使用IPM_ISBLANK消息。不需要验证各个字段,因为它们已经限制为0..255,您甚至可以使用IPM_SETRANGE.设置自定义范围

如果您仍然觉得需要查看各个字段

A)手动解析您自己从$ {NSD_GetText}获得的字符串。

B)解压缩您从IPM_GETADDRESS获得的32位地址:

Page Custom myPage myPageLeave
Page InstFiles

!include nsDialogs.nsh
; Using custom version of http://nsis.sourceforge.net/NsDialogs_CreateIPaddress
!ifndef NSD_CreateIPaddress
!define NSD_CreateIPaddress "!insertmacro NSD_CreateIPaddress "
!include LogicLib.nsh
!include WinMessages.nsh
!ifndef ICC_INTERNET_CLASSES
!define ICC_INTERNET_CLASSES 0x00000800
!endif
Function CCInitIP
!insertmacro _LOGICLIB_TEMP
System::Call '*(i8,i${ICC_INTERNET_CLASSES})p.s' ; NSIS 2.50+
System::Call 'COMCTL32::InitCommonControlsEx(pss)'
Pop $_LOGICLIB_TEMP
System::Free $_LOGICLIB_TEMP
FunctionEnd
!macro NSD_CreateIPaddress x y w h t
!insertmacro _LOGICLIB_TEMP
Call CCInitIP
nsDialogs::CreateControl "SysIPAddress32" ${DEFAULT_STYLES}|${WS_TABSTOP} 0 ${x} ${y} ${w} ${h} "${t}"
Exch $0
CreateFont $_LOGICLIB_TEMP "$(^Font)" "$(^FontSize)"
SendMessage $0 ${WM_SETFONT} $_LOGICLIB_TEMP 1
Exch $0
!macroend
!define /math IPM_GETADDRESS ${WM_USER} + 102
!define /math IPM_ISBLANK ${WM_USER} + 105
!endif

Function OnIPNotify ; This function displays some information about the IP
Pop $0 ; Not used

${NSD_GetText} $1 $3
StrCpy $4 "NSD_GetText: $3"

SendMessage $1 ${IPM_ISBLANK} 0 0 $0
StrCpy $4 "$4$\nIPM_ISBLANK: $0"

System::Call 'USER32::SendMessage(pr1, i ${IPM_GETADDRESS}, p 0, *i0 r3)p.r0' ; NSIS 2.50+
IntFmt $5 "0x%.8x" $3
StrCpy $4 "$4$\nIPM_GETADDRESS: ValidFields=$0 PackedIP=$5"
IntOp $0 $3 >> 24
IntOp $0 $0 & 0xff
StrCpy $4 "$4$\n$\t Field1=$0"
IntOp $0 $3 >> 16
IntOp $0 $0 & 0xff
StrCpy $4 "$4$\n$\t Field2=$0"
IntOp $0 $3 >> 8
IntOp $0 $0 & 0xff
StrCpy $4 "$4$\n$\t Field3=$0"
IntOp $0 $3 & 0xff
StrCpy $4 "$4$\n$\t Field4=$0"

${NSD_SetText} $2 $4
FunctionEnd

Function myPage
nsDialogs::Create 1018
Pop $0
${NSD_CreateIPaddress} 1% 0 50% 12u ""
Pop $1
${NSD_CreateLabel} 1% 20u 98% -20u "Enter an IP address to see information here..."
Pop $2

${NSD_OnNotify} $1 OnIPNotify ; Display some information when the control is changed
nsDialogs::Show
FunctionEnd

Function myPageLeave
Push 0
Call OnIPNotify
MessageBox mb_ok $4
FunctionEnd