Identifizierung eines neuen Fensters

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Identifizierung eines neuen Fensters

Re: Identifizierung eines neuen Fensters

Post by fump2000 » 20 Mar 2015, 06:05

Vielen Dank! Das klappt :)

Re: Identifizierung eines neuen Fensters

Post by just me » 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

Re: Identifizierung eines neuen Fensters

Post by fump2000 » 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?

Re: Identifizierung eines neuen Fensters

Post by fump2000 » 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.

Re: Identifizierung eines neuen Fensters

Post by strobo » 18 Mar 2015, 07:53

Re: Identifizierung eines neuen Fensters

Post by just me » 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

Re: Identifizierung eines neuen Fensters

Post by fump2000 » 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.

Re: Identifizierung eines neuen Fensters

Post by just me » 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.

Identifizierung eines neuen Fensters

Post by fump2000 » 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!? :)

Top