Me encuentro con un problema y no se como solucionarlo.
Estoy preparando una aplicacion, y una de las funciones es realizar PING repetitivo a una IP para ver si esta operativa.
El problema es que en el formulario hay un boton para cerrarlo, pero... mientras esta esperando el PING no es operativo, y el tiempo entre PINGs es minimo, asi que hay que machacar el boton varias veces hasta que aciertas y permite la salida...
¿Alguna idea?
Os adjunto el codigo, para facilitar la comprension
La llamada la hago desde otro formulario, asi que aqui defino el $imp_RouterIP muy raro, para que funcione solo esta parte.
Código: Seleccionar todo
#Region INCLUDES
#include <GUIConstants.au3>
#include <array.au3>
#include <AnimaVentana.au3>
#include <LOG_Programa.au3>
#include <ie.au3>
;~ #include "_DBlistView.au3"
#EndRegion INCLUDES
DIM $Form1P
;~ Func btnPING()
$imp_RouterIP = GUICtrlCreateInput("-",1,1,24,24)
GUICtrlSetData ($imp_RouterIP,"10.125.15.1")
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $imp_RouterIP = ' & GUICtrlRead($imp_RouterIP) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
If StringStripWS(GUICtrlRead($imp_RouterIP), 3) <> "" Then
frm_Ping(GUICtrlRead($imp_RouterIP))
Else
#Region --- CodeWizard generated code Start ---
;MsgBox features: Title=Yes, Text=Yes, Buttons=OK, Icon=Warning
MsgBox(48, "Consulta Conectividad", "No hay ninguna IP para comprobar.")
#EndRegion --- CodeWizard generated code Start ---
EndIf
Exit
Func frm_Ping($IP)
Dim $n_TiempoRespuesta, $ErrorIP, $n_Intentos, $Suma_Tiempos
Opt("GUIOnEventMode", 0)
#Region ### START Koda GUI section ### Form=C:\Documents and Settings\n854750\Mis documentos\AutoIT\jxo\Datos CS\Form_Ping.kxf
$Form1P = GUICreate("Verificación Acceso", 287, 312, 282, 139)
$Label1P = GUICtrlCreateLabel("Realizando PING a:" & StringStripWS($IP, 3), 16, 24, 122, 20)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$Label2P = GUICtrlCreateLabel("Resultado:", 104, 72, 65, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$lbl_ResultadoP = GUICtrlCreateLabel("-", 16, 96, 249, 20, $SS_CENTER)
$Label3P = GUICtrlCreateLabel("Intentos:", 16, 136, 54, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$inp_IntentosP = GUICtrlCreateInput("0", 88, 132, 100, 21,BitOR($ES_CENTER, $ES_UPPERCASE, $ES_AUTOHSCROLL, $ES_READONLY))
$Label4P = GUICtrlCreateLabel("Tiempos Respuesta:", 16, 168, 119, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Label5P = GUICtrlCreateLabel("Ultimo Intento:", 48, 200, 72, 17)
$Inp_UltimoP = GUICtrlCreateInput("0", 168, 196, 50, 21,BitOR($ES_CENTER, $ES_UPPERCASE, $ES_AUTOHSCROLL, $ES_READONLY))
$Label6P = GUICtrlCreateLabel("Respuesta Media:", 48, 224, 90, 17)
$Inp_MediaP = GUICtrlCreateInput("0", 168, 220, 50, 21,BitOR($ES_CENTER, $ES_UPPERCASE, $ES_AUTOHSCROLL, $ES_READONLY))
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Btn_OKP = GUICtrlCreateButton("OK", 96, 272, 81, 25, 0,BitOR($BS_DEFPUSHBUTTON,$BS_NOTIFY))
;~ GUICtrlSetOnEvent($Btn_OKP, "btn_OKP")
GUISetState(@SW_ENABLE,$Form1P)
GUISetState(@SW_SHOW,$Form1P)
#EndRegion ### END Koda GUI section ###
$Bucle = 1
While $Bucle
Sleep(1000)
$msgP=""
$msgP = GUIGetMsg()
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $msgP = ' & $msgP & ' Boton: '& $Btn_OKP & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
Select
Case $msgP = $GUI_EVENT_CLOSE
$Bucle = 0
Case $msgP = $Btn_OKP
$Bucle = 0
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Bucle = ' & $Bucle & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
Case Else
$n_Intentos = $n_Intentos + 1
$n_TiempoRespuesta = Ping($IP,500)
$ErrorIP = @error
If $Bucle = 0 Then ExitLoop
If $n_TiempoRespuesta = 0 Then ; Error de IP/Ping
;~ When the function fails (returns 0) @error contains extended information:
;~ 1 = Host is offline
;~ 2 = Host is unreachable
;~ 3 = Bad destination
;~ 4 = Other errors
Switch $ErrorIP
Case 1
GUICtrlSetData($lbl_ResultadoP, "ERROR: El destino esta Fuera de Línea")
Case 2
GUICtrlSetData($lbl_ResultadoP, "ERROR: El tiempo de vida caduco en transito")
Case 3
GUICtrlSetData($lbl_ResultadoP, "ERROR: No existe el destino")
Case 4
GUICtrlSetData($lbl_ResultadoP, "ERROR: Error Desconocido")
Case Else
GUICtrlSetData($lbl_ResultadoP, "ERROR: Error Desconocido " & $ErrorIP)
EndSwitch
Else ; EL Ping ha tenido exito
GUICtrlSetData($lbl_ResultadoP, "PING Realizado")
$n_TiempoRespuesta = int($n_TiempoRespuesta*1000)/1000
EndIf
$Suma_Tiempos = $Suma_Tiempos + $n_TiempoRespuesta
GUICtrlSetData($inp_IntentosP, $n_Intentos) ; Intentos Suma
GUICtrlSetData($Inp_UltimoP, $n_TiempoRespuesta) ; Tiempo Ultimo aviso
GUICtrlSetData($Inp_MediaP, int(($Suma_Tiempos / $n_Intentos)*1000)/1000)
EndSelect
WEnd
GUISetState(@SW_DISABLE,$Form1P)
GUISetState(@SW_HIDE,$Form1P)
EndFunc ;==>frm_Ping