Ho un'applicazione .NET che deve essere in grado di rilevare quando una finestra specifica ottiene e perde lo stato attivo. La finestra specifica a cui sono interessato appartiene a un'altra applicazione di cui non ho alcun controllo, sebbene io abbia l'handle di Windows..NET/Win32 - evento per rilevare quando viene attivata una finestra di un'altra app
Sono davvero dopo il modo migliore per affrontare questo. Finora, posso vedere 2 possibilità:
- Utilizzo di una chiamata Win32 su un timer per monitorare eventuali cambiamenti di stato. Non eccezionale, in quanto corre il rischio di perdere i cambiamenti di stato, ad es. se la finestra diventa attiva allora inattiva nell'intervallo di tempo
- Utilizzo di ganci (SetWindowsHookEx) per intercettare i messaggi nella finestra. Sembra che dovrebbe funzionare, ma preoccupato che a) gli hook a livello globale non funzionino con il codice .NET, quindi dovrebbe essere nativo eb) potrebbe essere considerato attività di tipo virus/keylogger, quindi bloccato dal sistema operativo?
Sono sicuro che ci sono anche altre opzioni, in tal caso, mi piacerebbe sentirle!
Perfetto: questo è quasi esattamente quello che stavo cercando. Sembra esserci un caso d'angolo in cui (a volte) la massimizzazione di una finestra precedentemente ridotta a icona non attiva EVENT_SYSTEM_FOREGROUND per quella finestra, quindi anche l'ascolto di EVENT_SYSTEM_MINIMIZEEND lo circonda. Grazie, risposta impressionante –
Il vincolo del loop del messaggio non è stato un problema per me perché stavo correndo un'applicazione WPF. Per chiunque desideri fare lo stesso, ma con un'app Console (nessun loop di messaggi per impostazione predefinita), questo articolo è valido (cerca "Gestione dei messaggi nelle app della console" "Stephen Toub" se il collegamento è interrotto) - http: // msdn .microsoft.com/en-us/magazine/cc163417.aspx –