Fenster "AlwaysOnTop" Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
LuckyJoe
Posts: 265
Joined: 02 Oct 2013, 09:52

Fenster "AlwaysOnTop"

25 Apr 2020, 08:45

Hallo zusammen,

ich möchte auf Mausklick (+^RButton) ein beliebiges geöffnetes Fenster in den Vordergrund und als "AlwaysOnTop" bringen. Bei erneutem Klick auf dieses Fenster soll die "AlwaysOnTop"-Eigenschaft wieder ausgeschaltet werden. Mit folgendem Script funktioniert das auch schon mal ganz gut:

Code: Select all

+^RButton::
	MouseGetPos,,, FensterUnterMaus
	WinSet, AlwaysOnTop, Toggle, ahk_id %FensterUnterMaus%
Return
Diese Routine soll aber auch dann funktionieren, wenn bereits ein Fenster "AlwaysOnTop" ist und ich jetzt irgendein anderes Fenster als "AlwaysOnTop" in den Vordergrund bringen will. D.h., das bisherige "AlwaysOnTop"-Fenster soll diese Eigenschaft verlieren. Ich möchte nicht erst das alte Fenster ausschalten und dann das neue einschalten.
Ich hatte gedacht, es kann nur ein Fenster diese "AlwaysOnTop"-Eigenschaft haben, aber offensichtlich kann man unterschiedliche Fenster so "ausstatten", was zu sehr merkwürdigen Effekten führt.

Mein erster Lösungsansatz

Code: Select all

+^RButton::
	WinGet, AktiveID, ID, A
	WinSet, AlwaysOnTop, off, ahk_id %AktiveID%
	MouseGetPos,,, FensterUnterMaus
	WinSet, AlwaysOnTop, Toggle, ahk_id %FensterUnterMaus%
Return
funktioniert leider nicht. Hat jemand eine Idee, die mir hier weiterhilft?

HG - Lucky Joe
Herzliche Grüße aus dem Rheinland
Lucky Joe
User avatar
divanebaba
Posts: 795
Joined: 20 Dec 2016, 03:53
Location: Diaspora

Re: Fenster "AlwaysOnTop"  Topic is solved

26 Apr 2020, 04:01

Ich möchte nicht erst das alte Fenster ausschalten ...
Gut. Wie ist es mit "Ich werde das alte Fenster anschließend ausschalten?" :mrgreen:

Code: Select all

+^RButton::
	MouseGetPos,,, FensterUnterMaus
	WinSet, AlwaysOnTop, Toggle, ahk_id %FensterUnterMaus%
	WinSet, AlwaysOnTop, off, ahk_id %pFensterUnterMaus%
	pFensterUnterMaus := FensterUnterMaus
Return
User avatar
LuckyJoe
Posts: 265
Joined: 02 Oct 2013, 09:52

Re: Fenster "AlwaysOnTop"

26 Apr 2020, 04:52

... ja, das funktioniert - Danke!
Herzliche Grüße aus dem Rheinland
Lucky Joe
just me
Posts: 7114
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Fenster "AlwaysOnTop"

26 Apr 2020, 05:48

Moin Lucky Joe,

AlwaysOnTop Fenster haben die Eigenschaft, über anderen Fenstern zu bleiben, ohne selbst aktiv zu sein. Bist Du sicher, dass ein WinSet, AlwaysOnTop, Toggle, ... die Eigenschaft immer einschaltet?

Du kannst ja prüfen, ob das Fenster schon da oben ist:

Code: Select all

WS_EX_TOPMOST := 0x00000008 ; AlwaysOnTop
WinGet, ExStyles, ExStyle, ahk_id %FensterUnterMaus%
If (ExStyles & WS_EX_TOPMOST)
   MsgBox, Das Fenster %FensterUnterMaus% ist schon AlwaysOnTop!
User avatar
LuckyJoe
Posts: 265
Joined: 02 Oct 2013, 09:52

Re: Fenster "AlwaysOnTop"

26 Apr 2020, 08:57

Hallo just me,

du hast vollkommen Recht: toggle schaltet nicht ein sondern um. Das ist nicht so das Problem: bei meinem ersten Script passiert folgendes: Klicke ich Auf FensterA, dann bekommt es die Eigenschaft "AlwaysOnTop", soweit, so gut. Das Fenster ist also immer im Vordergrund.

Mache ich das nun auch mit FensterB, dann kommt FensterB in den Vordergrund, aber alle FensterC-X bleiben auch "unter" FensterA! D.h. es haben jetzt beide Fenster (A und B) diese Eigenschaft. Klickt man auf FensterA, kommt es in den Vordergrund, klickt man auf FensterB, kommt dieses in den Vordergrund, niemals die anderen Fenster, die immer "unterhalb" von A und B bleiben. Ich halte das für falsch, weil es meiner Meinung nach nur ein Fenster geben darf, dass die Einstellung "AlwaysOnTop" haben darf (wie bei Highlander: es kann nur einen geben).
Herzliche Grüße aus dem Rheinland
Lucky Joe
just me
Posts: 7114
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Fenster "AlwaysOnTop"

26 Apr 2020, 10:46

@LuckyJoe,

nein, Windows-Fenster sind keine Highlander. Unter Windows gibt es zwei Ebenen, in denen sich Fenster stapeln können:

1. Die Ebene für die Normalsterblichen, d.h. die Top-Level-Fenster.
2. Die Ebene für die Hochwürdigen, d.h. die Topmost-Fenster.

Topmost-Fenster liegen immer über bzw. vor allen Top-Level-Fenstern. Es kann beliebig viele davon geben. Die Eigenschaft wird durch den ExStyle WS_EX_TOPMOST (0x00000008) bestimmt.
User avatar
LuckyJoe
Posts: 265
Joined: 02 Oct 2013, 09:52

Re: Fenster "AlwaysOnTop"

27 Apr 2020, 06:49

... und wieder was gelernt ;-)
Herzliche Grüße aus dem Rheinland
Lucky Joe

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 3 guests