[#1] Aktywne okno
Witam!

Czy istnieje taka możliwość, aby program dostawał na bieżąco informacje o zmianie aktywnego okna? Tzn. aktywne jest okno A, za chwilę staje się aktywne okno B (nieważne, czy użytkownik klika, posługuje się klawiaturą, czy też zmianę aktywnego okna powoduje jakiś program) i program od razu się o tym dowiaduje. Nie chodzi mi tu o jakieś odpytywanie w pętli.
[#2] Re: Aktywne okno

@Kamul, post #1

Intuition czy MUI?
W MUI wystarczy założyć notyfikację na MUIA_Window_Active.

[#3] Re: Aktywne okno

@MinisterQ, post #2

Chodzi mi o wszelkie możliwe okna (czyli raczej Intuition). Mało tego, nie chodzi mi o moje okna, a o wszystkie otwarte okna na danym ekranie.

[#4] Re: Aktywne okno

@Kamul, post #3

W IntuitionBase jest lista okien które są otwarte. To lista struktur Window, każda z nich ma pole flags, z którego można odczytać czy dane okno jest aktywne, czy nie.
Jednak to co chcesz zrobić wiąże się z pewnym niebezpieczeństwem. Nawet jeśli zalokujesz IntuitionBase, zczytasz listę okien, i odblokujesz IntuitionBase, to zaraz potem okno może zostać zamknięte, a Ty zostajesz z nieaktualnym wskaźnikiem na nieistniejące okno...
By tego uniknąć musiałbyś założyć łatę na CloseWindow() i na bieżąco aktualizować swoją listę.

[#5] Re: Aktywne okno

@MinisterQ, post #4

Sprawa się zaczyna nieco komplikować. :)
Na dodatek nadal nie będę znał historii (bo o to dokładnie mi chodzi), które okna w jakiej kolejności były (są) aktywne.
Dzięki.

[#6] Re: Aktywne okno

@Kamul, post #5

Co właściwie starasz się osiągnąć?

[#7] Re: Aktywne okno

@MinisterQ, post #6

Przymierzałem się trochę do napisania czegoś jak alt+tab pod Windowsem czy Linuksem. Mamy wprawdzie Altabbera, ale to nie do końca to, co bym chciał. Ale do tego chyba długa i kręta droga. ;)

[#8] Re: Aktywne okno

@Kamul, post #7

Alt+tab pod windowsem nie bazuje na aktywnym oknie - w ogóle. Nawet teraz, pisząc tą wiadomość mam aktywnego firesuxxa, a winda jako pierwsze na liście zaznacza okno gg, które jest w tle...
By zrobić coś podobnego funkcjonalnie, wystarczy aktualna lista okien z IntuitionBase.

[#9] Re: Aktywne okno

@MinisterQ, post #8

Nawet teraz, pisząc tą wiadomość mam aktywnego firesuxxa, a winda jako pierwsze na liście zaznacza okno gg, które jest w tle...

No właśnie. Bo pod windą to działa bardzo fajnie. Domyślnie zaznacza Ci ostatnio używane okno. Po co miał by to być firesuxx, skoro jego okno już jest aktywne. Zauważ, że pozycje w okienku alttaba poukładane są wg. kolejności, w jakiej ostatnio były aktywne.

[#10] Re: Aktywne okno

@Kamul, post #9

Pętla czesząca IntuitionBase/listę okien, i tworzenie dynamicznie własnej listy na podstawie stanu flag aktywności tych okien... Chyba nie ma innego sposobu.

[#11] Re: Aktywne okno

@MinisterQ, post #10

Ale ten proces musi co jakiś czas (i to dosyć często) sprawdzać ową listę, tak? Bo inaczej skąd będzie wiedział, czy pomiędzy dwoma sprawdzeniami listy nastąpiła pojedyncza zmiana aktywnego okna, czy też może np. dziesięć?

[#12] Re: Aktywne okno

@Kamul, post #11

Dosyć często...
Alternatywą jest łatanie funkcji systemowych (layers? intuition?), i odpowiednie tworzenie listy okien z poziomu tych łat.

[#13] Re: Aktywne okno

@MinisterQ, post #12

Hm... Dosyć paskudna sprawa.
Raz jeszcze dzięki. :)
[#14] Re: Aktywne okno

@MinisterQ, post #12

Chociaż z drugiej strony aktywność okien nie zmienia się aż tak często...
Poza tym można by było spróbować z łatą na ActivateWindow() z intuition.library. Ciekawe czy system wywołuje tą funkcję przy aktywacji okna, czy rzeźbi gdzieś głębiej... W sumie ciekawa sprawa. ;)

[#15] Re: Aktywne okno

@MinisterQ, post #14

Poza tym można by było spróbować z łatą na ActivateWindow() z intuition.library. Ciekawe czy system wywołuje tą funkcję przy aktywacji okna, czy rzeźbi gdzieś głębiej...

Gdyby się okazało, że KAŻDA aktywacja okna odbywa się poprzez ActivateWindow(), to łata na tą funkcję byłaby chyba najbardziej eleganckim rozwiązaniem z wszytkich tutaj wymienionych. :)

[#16] Re: Aktywne okno

@Kamul, post #15

Ogólnie poza przypadkami specjalnymi, możesz łatać ActivateWindow().
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem