[Router-Reconnect] Kontrolle über POPUP-Fenster um mit "OK" zu bestätigen

  • Hallo an alle!

    Ich bin leider eher ein Programmier-Novize, ... vielleicht könnt Ihr mir hier weiter helfen!
    Danke im Voraus für Eure Hilfe!

    Ich habe eine Lösung gebastelt bei meinem Router D-Link DGL 4100 per Internet Explorer die MAC-Adresse zu ändern.

    Nur die Bestätigung der Reboot-Meldung macht mir Kopfzerbrechen.

    Als UDF verwendet ich

    [autoit]

    #include <IE.au3>

    [/autoit]

    Nach dem Bestätigen von "Reboot the Device" erscheint ein POPUP-Fenster. Ich kann es einfach nicht erreichen um "OK" zu klicken!

    Quellcode "Reboot the Device" bestätigen (funktioniert zu 100%:(

    Spoiler anzeigen
    [autoit]

    ;--------------Button "Reboot the Device" drücken -------------------------------------------

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

    $oForm = _IEFormGetCollection($oIE,0)
    $oMAC_Address = _IEFormElementGetCollection($oForm,0)
    $oSubmit = _IEFormElementGetCollection($oForm,1)
    _IEFormElementSetValue($oMAC_Address,$MAC)
    _IEAction($oSubmit,"click")

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

    $oInputs = _IETagNameGetCollection ($oIE, "input")
    For $oInput In $oInputs
    If $oInput.value = "Reboot the Device" Then
    _IEAction ($oInput, "click")
    ExitLoop
    EndIf
    Next
    ;--------------------------------------------------------------

    [/autoit]

    http://s9.directupload.net/file/d/1603/6hv5mr87_jpg.htm

    Hier ein Auszug aus dem Quelltext von dieser HTML Seite:

    Spoiler anzeigen

    Ich denke das folgender HTML-Teil der Schlüssel zum Erfolg ist!

    PHP
    <input type="button" class="button_submit" value="Reboot the Device" onclick="doReboot()" />

    Folgende Versuche habe ich schon gestartet das POPUP weg zu klicken!

    [autoit]

    _IELinkClickByText($oIE, "OK")

    [/autoit]


    oder

    [autoit]

    _IENavigate($ie,"java script:doReboot();")

    [/autoit]


    oder

    [autoit]

    $oclick = _IEGetObjById($oIE, "button")
    _IEAction($oclick, "click")
    $oclick.fireEvent("onclick")

    [/autoit]


    oder

    [autoit]

    ; ... trigger the popup

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

    If WinWait("[CLASS:#32770; TITLE:Windows Internet Explorer]", "", 10) Then
    $hPopUp = WinGetHandle("[CLASS:#32770; TITLE:Windows Internet Explorer]")
    WinActivate($hPopUp)
    WinWaitActive($hPopUp)
    ControlClick($hPopUp, "", "[CLASSNN:Button1]")
    TrayTip("OK", "Clicked 'OK'", 5)
    Else
    TrayTip("Error!", "Window not found before timeout.", 5)
    EndIf

    [/autoit]

    Alles ohne Erfolg! :(

    Ich habe keine Ahnung an welcher Stellschraube ich drehen muss!

    Weiß vielleicht jemand Rat? Für jeden Lösungsvorschlag wäre ich dankbar!

    Viele Grüße
    Satchmo

    PS: Die Scriptschnipsel habe ich aus diversen Threads aus dem Forum von https://autoit.de/www.autoitscript.com

    2 Mal editiert, zuletzt von Satchmo (5. November 2008 um 15:18)

  • Hallo

    Deine zweite Lösung war schon fast richtig ;)
    Probier das mal:

    [autoit]

    _IENavigate($ie,"javascript:doReboot();")

    [/autoit]


    oder

    [autoit]

    _IENavigate($ie,"js:doReboot();")

    [/autoit]

    Danke für Deinen Tipp! :)

    Ich konnte die Ursache einkreisen, warum das Script keine weiteren Befehle entgegen nimmt. Es bleibt bei der OK-Abfrage stehen. Erst wenn ich manuell mit dem Mauszeiger auf OK drücke wird das Script weiter abgearbeitet! Und der Reboot durchgeführt.

    Jetzt muss es nur noch gelingen den Script-Teil

    [autoit]

    _IENavigate($oIE,"js:doReboot();")

    [/autoit]

    an der markierten Stelle einzuarbeiten! Denn genau an dieser Stellen warten das Script auf den manuellen Maus-Klick!! ;)


    [autoit]

    ;--------------Button "Reboot the Device" drücken -------------------------------------------

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

    $oForm = _IEFormGetCollection($oIE,0)
    $oMAC_Address = _IEFormElementGetCollection($oForm,0)
    $oSubmit = _IEFormElementGetCollection($oForm,1)
    _IEFormElementSetValue($oMAC_Address,$MAC)
    _IEAction($oSubmit,"click")

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

    $oInputs = _IETagNameGetCollection ($oIE, "input")
    For $oInput In $oInputs
    If $oInput.value = "Reboot the Device" Then
    _IEAction ($oInput, "click") ; <== hier bleibt das Script stehen und wartet auf OK-Klick!
    ExitLoop
    EndIf
    Next

    [/autoit]

    Meine Programmierkenntnisse reichen hierzu leider nicht aus um das umzusetzen!

    Vielleicht hat jemand eine Lösung parat?

    Gruß
    Satchmo

  • Hi @all,

    ich habe mir gerade eine Lösung "gebastelt", die ich euch nicht vorenthalten möchte:

    [autoit]

    ;--------------Button "Reboot the Device" drücken und POPUP-Fenster mit OK bestätigen -------------------------------------------

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

    $oForm = _IEFormGetCollection($oIE,0)
    $oMAC_Address = _IEFormElementGetCollection($oForm,0)
    $oSubmit = _IEFormElementGetCollection($oForm,1)
    _IEFormElementSetValue($oMAC_Address,$MAC)
    _IEAction($oSubmit,"click")

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

    $oInputs = _IETagNameGetCollection ($oIE, "input")
    $hwnd = _IEPropertyGet($oIE, "hwnd")
    For $oInput In $oInputs
    If $oInput.value = "Reboot the Device" Then
    ; anstatt _IEAction ($oInput, "click") wird "focus" verwendet, dh Button wird nur markiert und nicht gleich angeklickt!
    _IEAction ($oInput, "focus")
    ControlSend($hwnd, "", "[CLASS:Internet Explorer_Server; INSTANCE:1]", "{Enter}")
    ; Wartet bis das Explorerfenster im Vordergrund ist, und klickt dann auf OK.
    ControlClick("Windows Internet Explorer", "", "[CLASS:Button; TEXT:OK; Instance:1;]")
    _IELoadWait ($oIE)
    ExitLoop
    EndIf
    Next

    [/autoit]

    Um die Kontrolle über das POPUP-Fenster zu erhalten, besteht der Workaround nicht darin, per _IEAction ($oInput, "click") ein Klick auf "Reboot the Device" auszulösen, sondern den Button "Reboot the Device" mit Hilfe von _IEAction ($oInput, "focus") nur zu "markieren"! So erhält man erst die Kontrolle über das anschließend auftauchende POPUP-Fenster: mit ControlSend {Enter} wird der Button "Reboot the Device" bestätigt und mit ControlClick "OK" das POPUP-Fenster geschlossen.

    That's it

    Viele Grüße
    Satchmo