WinEvents è il modo di andare qui. L'API di cui hai bisogno è SetWinEventHook() - se ti interessa una finestra specifica, usa GetWindowThreadProcessId() per ottenere il threadId dell'HWND e poi ascolta gli eventi solo da quel thread specifico. Per le modifiche al titolo della finestra, ti consigliamo l'evento EVENT_OBJECT_NAMECHANGE.
È possibile agganciare "nel contesto" o "fuori dal contesto" - il secondo è il più semplice, e significa che l'evento viene restituito al proprio processo, quindi non è necessaria una DLL separata - che lo rende possibile fare tutto in C#; ma il thread che chiama SetWinEventHook deve avere un ciclo di messaggi (GetMessage/TranslateMessage/DispatchMessage), poiché gli eventi vengono recapitati utilizzando una forma di messaggi dietro le quinte.
Nel callback di WinEvent, è necessario verificare che HWND sia quello a cui tieni, dal momento che otterrai modifiche al nome per qualsiasi UI su quel thread di destinazione, possibilmente includendo modifiche al nome della finestra figlio o altre cose non ti interessa.
-
Tra l'altro, è possibile controllare this answer per qualche campione codice C# che utilizza WinEvents; li sta usando per tenere traccia delle modifiche della finestra in primo piano su tutte le finestre del desktop; ma dovresti solo fare alcune semplici modifiche sopra descritte per tenere traccia delle modifiche al nome su una finestra specifica.
Stai parlando di un singolo browser e di reindirizzamenti ..? hai cercato su richiesta/risposta e accesso alle intestazioni ?? solo curioso di sapere se io sono sulla stessa pagina come sei .. – MethodMan
Sì, gancio richiesto. Abbastanza sicuro di averti già parlato di WH_SHELL. –
possibile duplicato di [Log tutte le finestre che si chiudono in Windows] (http://stackoverflow.com/questions/8648386/log-all-windows-that-are-closed-in-windows) –