2016-11-25 3 views
0

J'ai ajouté une boîte ${NSD_CreateIPaddress} dans mon script nsi, mais en validant chaque champ d'IP, je la trouve par défaut à 0. J'obtiens la valeur d'adresse IP en utilisant ${GetText}.NSIS: Comment valider la boîte d'adresse IP

Est-il possible de supprimer la valeur par défaut 0 et de valider chaque champ d'adresse IP. Sil te plait aide moi.

+0

est '$ {}' GetText dans la fonction de congé? Veuillez ajouter un exemple * minimal * de votre script – idleberg

Répondre

0

Je ne suis pas vraiment sûr de ce que vous demandez. Si vous voulez faire la différence entre une adresse vide et l'adresse "0.0.0.0" valide, vous pouvez utiliser le message IPM_ISBLANK. Il ne devrait pas être nécessaire de valider les champs individuels car ils sont déjà limités à 0..255 et vous pouvez même définir une plage personnalisée avec IPM_SETRANGE.

Si vous vous sentez toujours le besoin de regarder les champs individuels que vous pouvez

A) Analysez manuellement la chaîne que vous obtenez de $ {NSD_GetText} vous-même.

ou

B) Déballez l'adresse 32 bits que vous obtenez de IPM_GETADDRESS:

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