Ottieni quale processo / finestra è effettivamente visibile in C #

Ho una lista di tutte le windows aperte, quelle nella barra delle applicazioni di Windows. Quello che voglio fare è rimuovere quelli che non sono visibili dalla lista.

Quello che voglio dire è che se una finestra è nascosta da un’altra, non dovrebbe essere nella mia lista.

Ho cercato google negli ultimi due giorni senza successo …

Qualche idea?

PS: riesco a ottenere la posizione e la dimensione di ogni processo, in modo da ottenere l’ultima volta che è stato utilizzato un processo / il tempo di inattività potrebbe funzionare anche …

È necessario utilizzare le regioni, ciò che è ancora visibile della finestra può essere un insieme complesso di rettangoli. Inizia con la finestra che vuoi controllare, GetWindowRect e CreateRectRegion per creare una regione per il rettangolo della finestra.

Chiama GetWindow () in un ciclo, passando GW_HWNDPREV. Che restituisce la finestra precedente nell’ordine Z in modo che si possa sovrapporre. GetWindowRect () per ottenere il relativo rettangolo, CreateRectRegion () e combinarlo con l’area della finestra originale utilizzando CombineRgn () con RGN_DIFF.

Quando GetWindow restituisce NULL hai trovato tutte le windows sovrapposte possibili. Usa GetRgnBox per verificare se è rimasto qualcosa della regione. Se c’è, almeno una parte della finestra non è stata sovrapposta.