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 diesource
benötigt wird, aber das problem ist, wenn ich klicke aufbutton
auf dieUserForm
zu erfassen, die Quelle des aktiven Fensters der Fokus wird auf dieUserForm
deshalb habe ich eine Verschiebung derfocus
zu denlast active window
wieder.ÄhnlichAlt + 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 dieTheory 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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es das, was Sie versuchen? Diese basiert auf
THEORY 2
FOLLOWUP
Sehen Sie diesen code, wo ich interagiere mit dem IE-Objekt.
handle
können wir direkt auf das Fenster alsIE
Objekt?theory 2
ich bin in der Lage, sich dem Griff derlast active foreground window
. Dies funktioniert gut, wenn ich nur ein Fenster öffnen und keine zusätzlichen tabs. Wie bekomme ich diehandle
wenn dieIE window
hatmultiple tabs
öffnen, habe ich, um den Grifflast active foreground child window
?handle
vonlast active tab
nurdo you mean the last active TAB? or different instances of browser with the same title?
Der obige code funktioniert nicht für dieses Szenario 🙂 Es ist so ganz anders und komplexer Prozess.Ich war immer ein Fehler in GetIEbyHWND.
versuchen Sie, ein Schlaf
Oder diese Lösung