Frage zu "GuiCtrlCreateObj" (script pausiert nach rechtsklick im Objekt)

  • hi guys,

    Ich würde gern den inhalt einer Internetseite, die ich über createObj in eine Gui eingeladen habe in die Zwischenablage kopieren (Die website unterstützt leider keinerlei Shortcuts und deshalb wollte ich über rechtsklick alles auswählen, rechtsklick kopieren das erledigen) Aber das Script pausiert sofort nachdem ich das erste mal einen rechtsklick im Objekt auführen lasse.

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    AutoItSetOption ( "MouseCoordMode",0 )
    Opt('MustDeclareVars', 1)

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

    Example()
    Func Example()
    Local $oIE, $GUIActiveX, $GUI_Button_Back, $GUI_Button_Forward
    Local $GUI_Button_Home, $GUI_Button_Stop, $msg

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

    $oIE = ObjCreate("Shell.Explorer.2")

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

    ; Eine simple GUI für die Ausgabe erzeugen.
    GUICreate("Embedded Web control Test", 640, 580, (@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS, $WS_CLIPCHILDREN))
    $GUIActiveX = GUICtrlCreateObj ($oIE, 10, 40, 600, 360)
    $GUI_Button_Home = GUICtrlCreateButton("Home", 230, 420, 100, 30)

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

    GUISetState() ; GUI anzeigen

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

    $oIE.navigate("http://www.autoit.de")

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

    ; Darauf warten, dass das Fenster geschlossen wird ...
    While 1
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $GUI_Button_Home
    sleep(200)
    mousemove(100,100)
    sleep(200)
    mouseClick("secondary")
    sleep(200)
    send("w")
    sleep(200)
    MsgBox(0,"","diese Meldung sollte von allein kommen")
    EndSelect

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

    WEnd

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

    GUIDelete()
    EndFunc ;==>Example

    [/autoit]

    Siehe zeile 33 bis 41. und direkt nach Zeile 37 bleibt das script stehen solange bis ich händich eine Taste (z.B. "W" für alles ausWählen) drücke und somit das Kontextmenü wieder schließe. danach gehts im script weiter.

    kann mir irgendjemand erklären, wie ich mit dem Kontextmenü von solchen Objekten arbeiten kann?

    ps: das beispiel kommt aus der deutschen Hilfe und wurde etwas gekürzt

    Für Rechtschreibfehler gibt es keinen Finderlohn!!

    2 Mal editiert, zuletzt von WiDDoW (7. Juni 2012 um 17:48)

  • Also bei mir klappt es. Aber du kannst dir auch den Quelltext runterladen.

    Übriegens kann man statt

    [autoit]

    (@DesktopWidth - 640) / 2

    [/autoit]


    auch

    [autoit]

    -1

    [/autoit]


    nehmen. :thumbup:

  • hey,

    erst mal danke für deine rückmeldung. also bei mir (Win7, 64bit mit Internet Explorer 9 klappt es nicht)
    und den Quellcode hab ich mir auch schon einmal angeschaut. Bei der Seite dessen Information ich haben will (kann leider nicht verlinken, da sie aus dem Intranet kommt), bekomme ich die benötigten Infos leider nicht aus dem Quellcode.

    In welcher Art und weise das Fenster erstellt wird ist mir erst mal egal. (wie gesagt das Bsp kommt aus der Hilfe Datei und nicht von mir)

    Zitat

    Also bei mir klappt es.


    das heißt du kannst das script starten und klickst auf "home" und daraufhin markiert sich die die Internetseite und es erscheint die MsgBox: "diese Meldung sollte von allein kommen" ohne das du noch irgend etwas klickst oder drückst???

    das ist ja komisch - was hast du für ein System?

    Für Rechtschreibfehler gibt es keinen Finderlohn!!

  • Nagut das Send("w") hat nicht funktioniert. Weiß auch nicht wie du darauf kommst. aber der Rechtsklick hat funktioniert. Und alles markieren mit STRG-A hat auch funktioniert. Ich hab Vista.

    Edit: Manche Seiten unterdrücken Rechtsklick mit Javascript. Aber das kann man ja ausschalten, das Javascript deaktiviert ist.

  • ja - der rechtsklick funktioniert bei mir auch, aber danach ist pause angesagt bis man das kontextmenü selbst irgendwie wieder schließt.

    Was ich halt blöd finde ist: das ganze würde funktionieren wenn man 2 scripte draus machen würde. das erste script erstellt die GUI und das enthaltene Objekt - also die IE instanz und das 2. Script führt den rechtsklick aus und drückt "w" für "allesAuswählen" und dann noch kopieren und schon gehts. aber das würde ich ungern machen, weil sich das in meinen ohren nach pfusch klingt - da muss es eine saubere lösung geben


    Auszug aus der deut. HilfeDatei von GUICtrlCreateObj "...Das Objekt kann nur gesteuert werden, nutzt man 'methods' oder 'properties' an der $ObjectVar."
    kann mir dazu mal jemand näheres erklären? oder sagen wo ich hilfe bei der steuerung von objekten her bekomme? Denn vielleicht bekomme ich ja über diesen Weg sämtlichen
    Inhalt aus dem Objekt in die Zwischenablage (oder in eine Variable oder sonst was)

    Für Rechtschreibfehler gibt es keinen Finderlohn!!

  • Und _IEBodyReadText($oIE) klappt auch nicht?

    Übriegens funktioniert das Send("w") nicht, weil er es ja an die Gui sendet und nicht an das Obj.

  • Also so:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>

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

    AutoItSetOption ( "MouseCoordMode",0 )
    Opt('MustDeclareVars', 1)

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

    Global $oIE, $GUIActiveX, $GUI_Button_Back, $GUI_Button_Forward
    Global $GUI_Button_Home, $GUI_Button_Stop, $iMsg, $sText

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

    $oIE = ObjCreate("Shell.Explorer.2")

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

    GUICreate("Embedded Web control Test", 640, 580, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS, $WS_CLIPCHILDREN))
    $GUIActiveX = GUICtrlCreateObj($oIE, 10, 40, 600, 360)
    $GUI_Button_Home = GUICtrlCreateButton("Home", 230, 420, 100, 30)

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

    GUISetState()

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

    $oIE.navigate("http://www.autoit.de")

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

    While 1
    $iMsg = GUIGetMsg()

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

    Switch $iMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $GUI_Button_Home
    $sText = _IEBodyReadText($oIE)
    MsgBox(0,"",$sText)
    EndSwitch
    WEnd

    [/autoit]

  • Und _IEBodyReadText($oIE) klappt auch nicht?

    Übriegens funktioniert das Send("w") nicht, weil er es ja an die Gui sendet und nicht an das Obj.


    ich hab mich eben mal ins Intranet eingewählt und so wie es aussieht scheint es damit zu funktionieren.
    und das ganze sogar viel besser und eleganter als mit dem blöden rechtsklick (der mir zwar von anfang an nicht sehr gefallen hat, aber
    da auch der Qellcode die info die ich auslesen wollte nicht angezeigt hat, dachte ich es gibt gar keine andere wahl)

    Aber ne so... gefällt mir sehr gut - hätt ich selbst drauf kommen müssen, aber ich bin dann vielleicht auch zu schnell auf eine idee fixiert und überseh sowas dann.

    also: supi vielen Dank
    can be closed

    WiDDoW

    Für Rechtschreibfehler gibt es keinen Finderlohn!!