Holen Sie sich last-aktives Fenster in VBA

Dies ist nicht eine doppelte Frage.

Ich habe eine UserForm bleibt oben auf allen Fenstern die ganze Zeit. Ich will Zugriff auf Quellcode von einem bereits geöffneten Webseite. Ich kann nicht mit findWindow Funktion wie ich haben, mehrere browser-Fenster öffnen mit der exakt gleichen Titel. Ich bin Links mit nur einem option - Schalter in die gewünschte browser-Fenster und als UserForm ist an der Spitze, klicken Sie auf eine Schaltfläche zu wechseln zum letzten aktiven Fenster. Danach werde ich mit getForegroundWindow Funktion.

Wie kann ich Wechseln zum letzten aktiven Fenster ohne Verwendung findWindow oder SendKeys {"%Tab"}(Das funktioniert nicht)? Ich habe ganze internet durchsucht, konnte aber nicht eine Antwort bekommen.

Minimierung der form und immer der Griff funktioniert, aber während der Prüfung alle offenen windows immer Fehler auf For loop-Zeile als No more threads can be created in the system

Function GetIEByHWND(myHWND As Long) As InternetExplorer
    Dim tempWindow As Variant
    Dim objShellWindows As New SHDocVw.ShellWindows

    Set GetIEByHWND = Nothing

    On Error GoTo errhandler

    For Each tempWindow In objShellWindows
        If InStr(tempWindow.Path, "INTERNET") Then
           If myHWND = tempWindow.hwnd Then
               Set GetIEByHWND = tempWindow
               Exit For
            End If
        End If
    Next tempWindow

    Exit Function
  • Last active window meinst du den letzten aktiven TAB? oder verschiedenen Instanzen des Browsers mit dem gleichen Titel?
  • Nicht die der letzten aktiven Registerkarte. Ich glaube nicht, haben Sie mehrere Registerkarten, die ich über mehrere browser-Fenster. Öffnen werde ich die ie Fenster, von denen die source benötigt wird, aber das problem ist, wenn ich klicke auf button auf die UserForm zu erfassen, die Quelle des aktiven Fensters der Fokus wird auf die UserForm deshalb habe ich eine Verschiebung der focus zu den last active window wieder.Ähnlich Alt + Tab.
  • Ok, ich habe zwei Theorien über, wie man das macht. Sie sind ungetestet, obwohl. Theory 1 Durchlaufen Sie alle offenen Fenster und überprüfen Sie Ihre Z-Reihenfolge. Finden Sie die 2. oberste Fenster (1. wird Ihre form) und dann ab damit in den Griff. Theory 2 Minimieren Sie Ihr userform für ein paar Sekunden mit "ShowWindow" mit "SW_MINIMIZE" und dann erhalten Sie das handle des aktiven Fensters.
  • Ich habe gelöscht, den Kommentar finden Sie den code in die Frage.
  • Nein.. Sie tun es nicht so... Siehe das LINK
  • Wenn ich den Griff auf die gewünschte ie-Fenster, wie kann ich einstellen das Fenster, um eine Internet explorer-Objekt, ohne zu prüfen, alle geöffneten Fenster?
  • Ok, wie hast du den Griff?
  • Durch die Verwendung von GetForegroundWindow Private Declare Function GetForegroundWindow Lib "user32" () As Long
  • Aber das würde nicht geben Ihnen die Fenster, die Sie suchen. Es wird Ihnen der oberste windows-handle, welches ist dein userform.
  • Ich hoffe, jemand upvotes Ihre post, so dass Sie mehr als 20 Punkte und dann können wir chatten 🙂
  • Genau das war meine Frage war, wie das wechseln zum letzten aktiven Fenster. Ihre Lösung, um die form scheint zu funktionieren. Wenn die userform minimiert das aktive Fenster wird die gewünschte IE-Fenster, d.h. die foregroundwindow. also die obige Funktion gibt mir die handle des Fensters.
  • Oh, Ok. Sie sind also folgende THEORY 2? Ich Sprach in Bezug auf die Theory 1.
  • Ja, ich bin von der Theorie 2. Nun, da habe ich den Griff den ich einstellen will, das Fenster, um eine internet explorer-Objekt.
  • Sorry wurde abgelenkt auf einen anderen thread. Ok, lassen Sie mich ein paar tests machen und sich wieder auf Sie.

InformationsquelleAutor mayur2j | 2013-04-28
Schreibe einen Kommentar