WinEvents to sposób, aby przejść tutaj. Interfejs API, którego potrzebujesz, to SetWinEventHook() - jeśli interesuje Cię określone okno, użyj GetWindowThreadProcessId(), aby uzyskać identyfikator wątku HWND, a następnie odsłuchaj zdarzenia tylko z tego konkretnego wątku. W przypadku zmian tytułu okna będziesz potrzebować zdarzenia EVENT_OBJECT_NAMECHANGE.
Możesz przechwycić "w kontekście" lub "poza kontekstem" - ta ostatnia jest najprostsza i oznacza, że zdarzenie zostanie dostarczone z powrotem do twojego własnego procesu, więc nie potrzebujesz osobnej biblioteki DLL - co sprawia, że możliwe zrobić to wszystko w języku C#; ale wątek, który wywołuje SetWinEventHook musi mieć pętlę komunikatów (GetMessage/TranslateMessage/DispatchMessage), ponieważ zdarzenia są dostarczane za pomocą postaci wiadomości za kulisami.
W twoim zgłoszeniu zwrotnym WinEvent, musisz sprawdzić, czy HWND jest tym, na którym Ci zależy, ponieważ dostaniesz zmiany nazw dla dowolnego interfejsu użytkownika w tym docelowym wątku, prawdopodobnie włączając zmiany nazwy okna podrzędnego lub inne rzeczy nie obchodzi cię to.
-
Nawiasem mówiąc, można sprawdzić this answer przez jakiś przykładowy kod C#, który używa WinEvents; używa ich do śledzenia zmian pierwszoplanowych okien we wszystkich oknach na pulpicie; ale wystarczy wykonać kilka prostych modyfikacji opisanych powyżej, aby śledzić zmiany nazw w określonym oknie.
Czy mówisz o pojedynczej przeglądarce, a także przekierowaniach ...? czy wyszukiwałeś na Żądanie/Odpowiedź i uzyskiwałeś dostęp do nagłówków? po prostu ciekawa, czy jestem na tej samej stronie co ty .. – MethodMan
Tak, wymagany hak. Jestem pewien, że już powiedziałem ci o WH_SHELL. –
możliwy duplikat [Zaloguj wszystkie okna zamknięte w systemie Windows] (http://stackoverflow.com/questions/8648386/log-all-windows-that-are-closed-in-windows) –