Fehlermeldung wenn VNC keine Verbindung aufbauen kann

  • Hi!

    Ich brauche eure Hilfe. Wie bekomme ich es hin im folgenden Script eine Fehlermeldung einzubinden, wenn VNC keine Verbindung aufbauen kann.

    Spoiler anzeigen
    [autoit]


    ;coded by UEZ 2013
    #include <EditConstants.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    Opt("MustDeclareVars", 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $sInputText = "Bitte Passwort eingeben"
    Global $sInputIP = "IP Adresse"
    Global Const $hGUI = GUICreate("Password", 329, 116)
    Global Const $idLabelHeadline = GUICtrlCreateLabel("VNC Starter", 110, 10, 150)
    GUICtrlSetFont(-1, 18, 400, 0, "Arial", 4)
    Global Const $idLabelIP = GUICtrlCreateLabel("IP Adr.", 30, 54, 44, 29)
    Global Const $idInputIP = GUICtrlCreateInput($sInputIP, 68, 52, 151, 21)
    GUICtrlSetColor(-1, 0xA0A0A0)
    Global Const $hInputIP = GUICtrlGetHandle($idInputIP)
    Global Const $idLabelPWD = GUICtrlCreateLabel("Passwort:", 18, 84, 44, 19)
    Global Const $idInputPWD = GUICtrlCreateInput($sInputText, 68, 82, 151, 21)
    GUICtrlSetColor(-1, 0xA0A0A0)
    Global Const $hInputPWD = GUICtrlGetHandle($idInputPWD)
    Global Const $idButtonGO = GUICtrlCreateButton("Start VNC", 241, 80, 75, 25)
    ControlFocus($hGUI, "", $idLabelPWD)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    GUIRegisterMsg($WM_COMMAND, "")
    GUIDelete()
    Exit
    Case $idButtonGO
    If Not IPChk(GUICtrlRead($idInputIP)) Then
    MsgBox(16, "FEHLER", "Bitte IP Adresse überprüfen!", 30)
    ContinueLoop
    EndIf
    If GUICtrlRead($idInputPWD) = "" Or GUICtrlRead($idInputPWD) = $sInputText Then
    MsgBox(16, "FEHLER", "Passwort ist gleich '" & $sInputText & "'", 30)
    ContinueLoop
    EndIf
    GUIRegisterMsg($WM_COMMAND, "")
    vncstart(GUICtrlRead($idInputIP), GUICtrlRead($idInputPWD))
    GUIDelete()
    Exit
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func IPChk($sIP)
    Local $sRegExPattern = _
    "^([01]?\d\d?|2[0-4]\d|25[0-5])\." & _
    "([01]?\d\d?|2[0-4]\d|25[0-5])\." & _
    "([01]?\d\d?|2[0-4]\d|25[0-5])\." & _
    "([01]?\d\d?|2[0-4]\d|25[0-5])$"
    Local $a = StringRegExp($sIP, $sRegExPattern, 3)
    If @error Then Return 0
    Return 1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func vncstart($sIP, $sPwd)
    ShellExecute("C:\Programme\RealVNC\VNC Viewer\vncviewer.exe")
    WinActivate("VNC Viewer")
    Sleep(200)
    Send($sIP & "{Enter}")
    WinWaitActive("VNC Viewer - Authentication")
    Sleep(150)
    Send($sPwd & "{Enter}")
    EndFunc ;==>vncstart

    [/autoit] [autoit][/autoit] [autoit]

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg
    Local $iIDFrom = _WinAPI_LoWord($iwParam)
    Local $iCode = _WinAPI_HiWord($iwParam)
    Switch $ilParam
    Case $hInputPWD
    Switch $iCode
    Case $EN_KILLFOCUS
    If GUICtrlRead($iIDFrom) = "" Then
    GUICtrlSendMsg($iIDFrom, $EM_SETPASSWORDCHAR, 0, 0)
    GUICtrlSetData($iIDFrom, $sInputText)
    GUICtrlSetColor($iIDFrom, 0xA0A0A0)
    EndIf
    Case $EN_SETFOCUS
    GUICtrlSetColor($iIDFrom, 0)
    GUICtrlSetData($iIDFrom, "")
    GUICtrlSendMsg($iIDFrom, $EM_SETPASSWORDCHAR, 9679, 0)
    EndSwitch
    Case $hInputIP
    Switch $iCode
    Case $EN_KILLFOCUS
    If GUICtrlRead($iIDFrom) = "" Then
    GUICtrlSetData($iIDFrom, $sInputIP)
    GUICtrlSetColor($iIDFrom, 0xA0A0A0)
    EndIf
    Case $EN_SETFOCUS
    GUICtrlSetColor($iIDFrom, 0)
    If GUICtrlRead($iIDFrom) = "" Or GUICtrlRead($iIDFrom) = $sInputIP Then GUICtrlSetData($iIDFrom, "")
    EndSwitch
    EndSwitch
    Return "GUI_RUNDEFMSG"
    EndFunc ;==>WM_COMMAND

    [/autoit]

    Vielen Dank!

    Gruß
    Sirius

  • Indem du auf ein Verbindungsfenster und/oder Fehlerfenster wartest? Irgendeine Rückmeldung wird dir RealVNC ja geben wenn etwas nicht wie vorgesehen klappt. Normalerweise müsste ja ein Fenster erscheinen, welches den Remote Computer anzeigt und vermutlich auch dessen IP Adresse im Fenstertitel trägt. Du könntest also vermutlich in einer "do...until" Schleife auf dieses Fenster warten und evtl auch zeitgleich in der Schleife prüfen ob stattdessen eine Fehlermeldung erscheint. Im Fehlerfall dann eben die Schleife mit exitloop verlassen.

    Davon aber mal abgesehen solltest du den Start der VNC Verbindung anderst lösen, da send() ziemlich unzuverlässig ist. Verwende lieber controlsettext() und controlclick(). Alternativ bietet RealVNC auch die Möglichkeit mit cmdline Parametern aufgerufen zu werden, was evtl am zuverlässigsten und einfachsten wäre.

    http://www.realvnc.com/products/open/…ConnectionFiles