Mam aplikację .NET, która musi być w stanie wykryć, kiedy konkretne okno dostaje i traci ostrość. Konkretne okno, które mnie interesuje, należy do innej aplikacji, nad którą nie mam kontroli, mimo że mam uchwyt okna..NET/Win32 - zdarzenie, aby wykryć, kiedy okno należące do innej aplikacji zostanie skupione
Naprawdę idę po najlepszy sposób, aby rozwiązać ten problem. Do tej pory widzę 2 możliwości:
- Użycie wywołania Win32 na zegarze w celu monitorowania zmian stanu. Nie świetne, ponieważ grozi to brakiem zmian stanu, np. jeśli okno staje się aktywne, to nieaktywne w przedziale czasowym
- Używanie przechwytów (SetWindowsHookEx) do przechwytywania wiadomości do okna. Wygląda na to, że powinno działać, ale obawia się, że a) haki na poziomie globalnym nie będą działały z kodem .NET, więc musiałyby być natywne i b) czy można to uznać za działanie typu wirus/keylogger, tak zablokowane przez system operacyjny?
Jestem pewien, że są inne opcje, jeśli tak, chciałbym je usłyszeć!
Idealny - to prawie dokładnie to, czego szukałem. Wydaje się, że istnieje przypadek, w którym (czasem) zmaksymalizowanie wcześniej zminimalizowanego okna nie uruchamia EVENT_SYSTEM_FOREGROUND dla tego okna - więc słuchanie EVENT_SYSTEM_MINIMIZEEND również go omija. Dzięki, świetna odpowiedź –
Ograniczenie pętli wiadomości nie stanowiło dla mnie problemu, ponieważ korzystałem z aplikacji WPF. Dla każdego, kto chce zrobić to samo, ale z aplikacją Console (bez domyślnej pętli komunikatów), ten artykuł jest dobry (wyszukaj "Obsługa wiadomości w aplikacjach konsolowych" "Stephen Toub", jeśli łącze jest zepsute) - http: // msdn .microsoft.com/en-us/magazine/cc163417.aspx –