wie kann ich bei mehreren GUIs Objekte auseinander halten?

  • NAbend,

    ich hab ein kleines Tool welches die "mutter aller Fenster" :D öffnet. In diesem kann man (mehrere) Childfenster öffnen.
    Alle diese GUi Fenster beinhalten jeweils ein IE Objekt. Mein Problem ist jetzt, das ich nicht mit dem IE Objekten im Childfenster umgehen kann.

    BeispielScript mit 1xMutter + 1xChild:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <IE.au3> ;für IE Elemente
    #include<GUIConstantsEx.au3>
    global $gui1, $gui2, $btn1, $btn2, $msg,$oIE,$oIE2,$gui1_IE

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

    $oIE = _IECreateEmbedded()
    $oIE2 = _IECreateEmbedded()

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

    $gui1 = GUICreate('GUI 1',500,500)
    $btn1 = GUICtrlCreateButton('GUI 2', 10, 20, 80, 20)
    $gui1_IE = GUICtrlCreateObj($oIE, 10, 50,480, 440)

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

    $gui2 = GUICreate('GUI 2',600,600)
    $btn2 = GUICtrlCreateButton('Button 2', 10, 20, 100, 20)
    $gui2_IE = GUICtrlCreateObj($oIE2, 10, 50,580, 540)

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

    GUISetState(@SW_SHOW, $gui1)
    _IENavigate($oIE,"www.google.de")
    _IENavigate($oIE2,"www.autoit.de")

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

    While 1
    $msg = GUIGetMsg(1)
    Switch $msg[1] ; Window Handle
    Case $gui1
    Switch $msg[0] ; Event
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $btn1
    GUISetState(@SW_SHOW, $gui2)
    EndSwitch
    Case $gui2
    Switch $msg[0]
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_SHOW, $gui1)
    GUIDelete($gui2)
    Case $btn2
    MsgBox(0, '', 'Button 2 geklickt')
    EndSwitch
    EndSwitch
    WEnd
    GUIDelete($gui1)
    GUIDelete($gui2)

    [/autoit]


    Wenn ich hier im Childfenster bin und mit Tabulator die einzelnen Elemente durchspringen will, wird sofort zurück zur "Mutter aller Fenster" gesrpungen und die Tastaturbefehle werden dahin gesendet - selbst wenn dieses Mutter Fenster minimiert wurde.

    Hat jemand eine idee, was ich falsch mach?
    Ich hab eigentlich schon ganz schön lange rum gesucht und bekomme es nicht hin, das die Tastenanschläge an das aktive Fenster gesendet werden, egal welches das gerade ist.

    Für Rechtschreibfehler gibt es keinen Finderlohn!!

  • hey,

    mit _IEAction hab ich auch schon mal ein wenig rumexperimentiert, aber damit bekomm (bzw. bekam) ich es nur hin, dass ich
    einzelne WebElemente (also buttons und Eingabefelder) direkt ansprechen konnte. Dass heißt ich müsste den User fragen "was willst du alles in dem Webformular eingeben?"
    und könnte dieses Ergebnis dann über _IEAction an die einzelnen Elemente senden. DAs will ich aber nicht. Ich möchte dass der User
    selbst die Daten ins WebFormular eingeben kann (und momentan funktioniert das nur über die Maus)


    In meiner alten Version des Programms hatte ich es so gelöst, dass beim öffnen der 2.Gui sich die komplette motherGui geschlossen hat, aber davon wollte ich eigentlich auch
    weg.

    könnte jemand vielleicht mein beispielscript in dieser Richtung etwas modifizieren?
    denn einfach nur ein wie hier zeile 32 Einfügen geht leider nicht

    Spoiler anzeigen
    [autoit]


    #include <IE.au3> ;für IE Elemente
    #include<GUIConstantsEx.au3>
    global $gui1, $gui2, $btn1, $btn2, $msg,$oIE,$oIE2,$gui1_IE

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

    $oIE = _IECreateEmbedded()
    $oIE2 = _IECreateEmbedded()

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

    $gui1 = GUICreate('GUI 1',500,500)
    $btn1 = GUICtrlCreateButton('GUI 2', 10, 20, 80, 20)
    $gui1_IE = GUICtrlCreateObj($oIE, 10, 50,480, 440)

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

    $gui2 = GUICreate('GUI 2',600,600)
    $btn2 = GUICtrlCreateButton('Button 2', 10, 20, 100, 20)
    $gui2_IE = GUICtrlCreateObj($oIE2, 10, 50,580, 540)

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

    GUISetState(@SW_SHOW, $gui1)
    _IENavigate($oIE,"www.google.de")
    _IENavigate($oIE2,"www.autoit.de")

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

    While 1
    $msg = GUIGetMsg(1)
    Switch $msg[1] ; Window Handle
    Case $gui1
    Switch $msg[0] ; Event
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $btn1
    GUISetState(@SW_SHOW, $gui2)
    _IEAction ($oIE, "disable")
    EndSwitch
    Case $gui2
    Switch $msg[0]
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_SHOW, $gui1)
    GUIDelete($gui2)
    Case $btn2
    MsgBox(0, '', 'Button 2 geklickt')
    EndSwitch
    EndSwitch
    WEnd
    GUIDelete($gui1)
    GUIDelete($gui2)

    [/autoit]

    Für Rechtschreibfehler gibt es keinen Finderlohn!!

  • kann mir da echt keiner weiterhelfen? *liebguck*
    (gibt auch nen virtuellen Keks!)

    Ich würde ungern bei der alten Lösung bleiben, und bin auch der felsenfesten überzeugung das es irgenwie funktionieren muss.
    nur bin ich halt wohl zu blöde dafür...


    naja - wenn noch jemand ne idee hat - immer her damit

    thx

    Für Rechtschreibfehler gibt es keinen Finderlohn!!