Получить, какой процесс / окно на самом деле видим в C # - PullRequest
2 голосов
/ 27 марта 2011

У меня есть список всех открытых окон, те, что на панели задач Windows.Я хочу удалить те, которые не видны из списка.

Я имею в виду следующее: если окно скрыто другим, его не должно быть в моем списке.

Последние два дня я безуспешно искал в Google ...

Есть идеи?

PS: я могу определить местоположение и размер каждого процесса, поэтому я получу последнийвремя использования процесса / простой тоже будет работать ...

1 Ответ

6 голосов
/ 27 марта 2011

Вам нужно использовать регионы, то, что все еще видно из окна, может быть сложным набором прямоугольников.Начните с окна, которое вы хотите проверить, GetWindowRect и CreateRectRegion, чтобы создать область для прямоугольника окна.

Вызовите GetWindow () в цикле, передавая GW_HWNDPREV.Который возвращает предыдущее окно в Z-порядке, чтобы оно могло перекрываться.GetWindowRect (), чтобы получить его прямоугольник, CreateRectRegion () и объединить его с исходной областью окна, используя CombineRgn () с RGN_DIFF.

Когда GetWindow возвращает NULL, вы нашли все возможные перекрывающиеся окна.Используйте GetRgnBox, чтобы проверить, осталось ли что-нибудь от региона.Если есть, то по крайней мере одна часть окна не была перекрыта.

...