Identifizierung eines neuen Fensters

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Identifizierung eines neuen Fensters

18 Mar 2015, 03:45

Hallo zusammen,

im verlauf meines Scriptes öffnet sich ein neues Fenster von dem ich im vorfeld nicht weiß wie es benannt ist. Dieses Fenster muss ich irgendwie identifizieren damit ich dessen ID erhalte um dann weitere aktionen durchzuführen.

Meine Idee war nun bevor sich das Fenster öffnet per WinGet, handle_list, List eine Liste der aktiven Fenster zu speichern und danach dann wieder. Diese dann vergleichen.
Eigentlich müsste doch dann ein Fenster übrig bleiben welches das gesuchte ist, oder?

Ich verstehe nur nicht wie man die beiden Arrays so vergleicht, dass am ende das gewünschte Ergebnis übrig bleibt.

Könnt ihr mir da bitte helfen?

Man könnte natürlich auch zu dem Zeitpunkt wo man weiß es öffnet sich gelich das neue Fenster vorher die ID des aktiven Fensters speichern und dann solange die ID ziehen und vergleichen bis man das neue Fenster erkannt hat.

Ich dachte nur per WinGet wäre es irgendwie besser!? :)
just me
Posts: 7284
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Identifizierung eines neuen Fensters

18 Mar 2015, 05:43

Hallo fump,

kannst Du die Fensterklasse eindeutig bestimmen? Möglicherweise kann dann eine Kombination vonahk_class ... und ahk_exe ... helfen, die Fenstermenge einzugrenzen.
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: Identifizierung eines neuen Fensters

18 Mar 2015, 06:49

Es wäre ein Fenster des Internet Explorers. Classe = IEFrame, Process = iexplore.exe
Per Bildsuche wird ein button geklickt der wiederrum das neue Fenster öffnet.
just me
Posts: 7284
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Identifizierung eines neuen Fensters

18 Mar 2015, 07:39

Probiere das mal:

Code: Select all

#NoEnv
^+1:: ; Bestandliste erstellen (Ctrl+Shift+1)
WinGet, List1, List, ahk_class IEFrame ahk_exe iexplore.exe
Return
; ----------------------------------------------------------------------------------------------------------------------
^+2:: ; Neue Liste erstellen (Ctrl+Shift+2)
WinGet, List2, List, ahk_class IEFrame ahk_exe iexplore.exe
NeuArray := []
Loop, %List2%
   NeuArray[List2%A_Index%] := True
Loop, %List1%
   NeuArray.Remove(List1%A_Index%, "")
For Hwnd In NeuArray
   MsgBox, 0, Neues Fenster #%A_Index%, % Format("0x{:x}", Hwnd)
Return
; ----------------------------------------------------------------------------------------------------------------------
Esc::
ExitApp
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: Identifizierung eines neuen Fensters

18 Mar 2015, 08:58

@ just me, funktioniert! Ist in dem Fall auf den IE begrenzt. Nehme ich classe und exe raus funktioniert es aber auch und ich kann egal welches Programm nutzen. Das ist echt super! Vielen Dank dafür!!!

@strobo, vielen Dank für den Link! Das ist ne grandiose Lösung. Die von just me erscheint mir aber effizienter.
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: Identifizierung eines neuen Fensters

19 Mar 2015, 17:33

Hallo just me,

ich habe den Code etwas angepasst um ihn auf alle Browser anwendbar zu machen und auch um die Veränderung per Loop erkennbar zu machen.

Code: Select all

^+1:: ; Bestandliste erstellen (Ctrl+Shift+1)
GroupAdd, Browser, ahk_class MozillaWindowClass
GroupAdd, Browser, ahk_class IEFrame
GroupAdd, Browser, ahk_class Chrome_WidgetWin_
WinGet, List1, List, ahk_group Browser
Return
; ----------------------------------------------------------------------------------------------------------------------
^+2:: ; Neue Liste erstellen (Ctrl+Shift+2)
Loop,
	{
		counter:=0
		WinGet, List2, List, ahk_group Browser
		NeuArray := []
		Loop, %List2%
		   NeuArray[List2%A_Index%] := True
		Loop, %List1%
		   NeuArray.Remove(List1%A_Index%, "")
		For Hwnd In NeuArray
		   counter++
		if (counter>0)
			{
				id2 := WinExist("A")
				break
			}
	}
msgbox % id2
Return
Was mir Probleme macht ist der Chrome. Der hat eigentlich die classe Chrome_WidgetWin_1 aber eben nicht immer. Mal startet er mit Chrome_WidgetWin_2 anscheinend kann die Zahl sich verändern. Ich dachte wenn ich wie in einem anderen Script von mir genutzt die Classe so in die Gruppe adde GroupAdd, Browser, ahk_class Chrome_WidgetWin_ müsste es alle Classen erkennen können. Dem ist aber nicht so.
Wie geht man da am besten vor? Setze ich pauschal einfach mal 10 Chrome Classen rein oder gibts einen anderen Weg?

Wie würdest du es machen wenn du den IE den Chrome und den FireFox abdecken müsstest?
just me
Posts: 7284
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Identifizierung eines neuen Fensters

20 Mar 2015, 02:07

Moin fump,

wie ich die Hilfe verstehe, wird für ahk_class der vollständige Klassenname erwartet wenn man nicht SetTitleMatchMode, RegEx verwendet. Statt der Gruppe könntest Du dann mal ahk_class ^(Chrome_WidgetWin_\d+|IEFrame|MozillaWindowClass) versuchen.

Ansonsten bin ich dankbar dafür, dass ich mich noch nie selbst mit Browserfenstern abgeben musste.

Grüße,

just me
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: Identifizierung eines neuen Fensters

20 Mar 2015, 06:05

Vielen Dank! Das klappt :)

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 10 guests