Mehrere Sessions für _IECreateEmbedded()

  • Hallo liebe AutoIT Gemeinde,

    ich bin gerade dabei mir das Leben zu erleichtern, allerdings haut das noch nicht so ganz hin. Ich würde gerne mehrere IE Embedded in meiner eigenen GUI öffnen. Dazu würde ich gerne die Funktion im IE "Neue Sitzung" nutzen, um mich an der gleichen Webseite mit unterschiedlichen Namen anzumelden. Leider funktioniert das nicht so einfach wie von mir gedacht. Hat hierzu jemand eine Idee?

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <TabConstants.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <ie.au3>

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

    FileInstall("portalAutoLogin.ini", @ScriptDir&"\portalAutoLogin.ini")
    global $configFile = "portalAutoLogin.ini"
    global $bukrsArr = IniReadSectionNames($configFile)
    global $tabsArr[100]
    global $oIEArr[100]

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

    _IEErrorHandlerRegister()

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

    ;----------------------------------------------------------------------------------
    ; GUI - Splashscreen
    ;----------------------------------------------------------------------------------
    $splash = GUICreate("Loading...", 345, 83, 528, 237)
    $splashprogress = GUICtrlCreateProgress(24, 48, 294, 17)
    $splashlabel = GUICtrlCreateLabel("Starte Anmeldungen", 24, 16, 207, 17)
    GUISetState(@SW_SHOW)
    ;----------------------------------------------------------------------------------

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

    ;----------------------------------------------------------------------------------
    ; GUI
    ;----------------------------------------------------------------------------------
    $PortalAutoLogin = GUICreate("PortalAutoLogin", 1201, 751, 221, 130)
    $Tabarea = GUICtrlCreateTab(8, 40, 1185, 705)
    for $i = 1 to $bukrsArr[0]
    $progr = $i / $bukrsArr[0] * 100
    _createTab($bukrsArr[$i])
    _updateSplashscreen($bukrsArr[$i], $progr)
    Next
    GUICtrlSetState(-1,$GUI_SHOW)
    GUICtrlCreateTabItem("")
    $startagain = GUICtrlCreateButton("Start Auto Login again", 1040, 8, 147, 25)
    $ie_back = GUICtrlCreateButton("<-", 8, 8, 35, 25)
    $ie_forward = GUICtrlCreateButton("->", 48, 8, 35, 25)
    $ie_stop = GUICtrlCreateButton("X", 88, 8, 35, 25)
    GUISetState(@SW_SHOW)
    ;----------------------------------------------------------------------------------

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

    GUIDelete($splash)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Exit

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

    ;----------------------------------------------------------------------------------
    ; FUNCTIONS
    ;----------------------------------------------------------------------------------
    Func _createTab($bukrs)
    $tabsArr[$bukrs] = GUICtrlCreateTabItem($bukrs)
    $oIEArr[$bukrs] = _IECreateEmbedded()

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

    GUICtrlCreateObj($oIEArr[$bukrs], 16, 72, 1169, 665)
    _IENavigate($oIEArr[$bukrs], "http://URL TO PORTAL")
    Local $oForm = _IEFormGetObjByName($oIEArr[$bukrs], "logonForm")
    Local $oUser = _IEFormElementGetObjByName($oForm, "j_user")
    Local $oPass = _IEFormElementGetObjByName($oForm, "j_password")
    _IEFormElementSetValue($oUser, IniRead($configFile, $bukrs, "user", ""))
    _IEFormElementSetValue($oPass, IniRead($configFile, $bukrs, "pass", ""))
    _IEFormSubmit($oForm, 0)
    EndFunc

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

    Func _updateSplashscreen($bukrs, $progr)
    GUICtrlSetData($splashprogress, $progr)
    GUICtrlSetData($splashlabel, "Anmeldung an Portal "&$bukrs&" wird ausgeführt")
    EndFunc

    [/autoit]

    Die INI Datei enthält nur folgende Werte:
    [name der website]
    user=USERNAME
    pass=PASSWORD

    Vielen Dank für eure Hilfe und Ideen!

    Benni

  • Hallo zusammen,

    ich habe noch ordentlich geforscht und gesucht und bin auf folgende Registryeinträge gestoßen (mit AutoIT schon umgesetzt für das direkte Ausführen):

    Spoiler anzeigen
    [autoit]


    RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main", "SessionMerging", "REG_DWORD", "0")
    RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main", "FrameMerging", "REG_DWORD", "0")

    [/autoit]

    Leider funktionieren die Registryeinträge nicht, zumindest nicht für meine Anforderung und dem IE. Kann die Registry-Einträge jemand bestätigen? Evtl. ein Problem mit 64-bit und 32-bit?

    Vielleicht hat noch jemand eine Idee oder Hinweis.

    Vielen Dank,
    Benni

  • Hallo bennithebrain,

    eine rein rethorische Frage schafst du es denn 2 oder mehr IE-Instanzen ohne Skript aufzumachen und dich in jeder mit verschiedenen Accountdaten an der gleichen Website an zu melden und dann auch noch in jeder Instanz die Daten entsprechend demjeweligen Account zu bekommen?

    • Nein, warum sollte es dann automatisiert gehen?
    • Ja, nenne bitte die WebSite bei der dies möglich ist!

    mfg autoBert

    2 Mal editiert, zuletzt von autoBert (31. Januar 2013 um 18:35)

  • Hallo autoBert,

    zunächst danke für deinen Beitrag. Wenn ich deine rhetorische Frage kurz beantworten darf: "Ja, ich kann."

    Beispiel wäre das SAP NetWeaver Enterprise Portal, für das ich es auch programmieren möchte. Wir haben das Portal als Intranet im Einsatz, bei dem die Funktion des Internet Explorers "Datei > Neue Sitzung" problemlos funktioniert.

    Was macht diese Funktion des Internet Explorers? - Es startet wie von dir erwähnt eine neue Instanz des Internet Explorers über die ich mich erneut mit einem anderen User anmelden kann. Da ich unter anderem das Portal administriere und es für mehrere Länder verfügbar ist, wollen wir den Überblick bewahren und haben für jedes Land einen "Admin"-User. Bei 25 verschiedenen Ländern macht es aber keinen Spaß sich manuell für jedes Land mit Benutzername und Passwort anzumelden. Daher die Idee das automatisiert zu tun und zwar über das Auslesen des NetWeaver Anmeldescreens und ausfüllen der benötigten Daten. Danach wäre jeder User bereits angemeldet und man kann nur noch hin- und herschalten zwischen den verschiedenen Portalen auf dem gleichen System.

    Hat jemand eine Idee für die Umsetzung?

    Vielen Dank,
    Benni

  • Hm, schade, aber vielleicht ist es auch nicht möglich mit einem eingebetteten IE? Hat jemand eine andere Idee für die Umsetzung? Bis jetzt habe ich es so, dass man bei einem Klick auf einen anderen Tab aus- und neu eingeloggt wird. Das dauert allerdings ganz schön lange...

    Benni