获取在C#中实际可见的进程/窗口

Joh*_*ohn 2 c# window process visible

我有一个所有打开的窗口列表,Windows任务栏中的窗口.我想要做的是删除列表中不可见的那些.

我的意思是,如果一个窗口被另一个窗口隐藏,它不应该在我的列表中.

过去两天我一直在搜索谷歌而没有成功......

有任何想法吗?

PS:我可以获得每个进程的位置和大小,因此最后一次使用进程/空闲时间也会起作用...

Han*_*ant 6

你需要使用区域,窗口仍然可见的是一组复杂的矩形.从要检查的窗口开始,GetWindowRect和CreateRectRegion为窗口矩形创建一个区域.

在循环中调用GetWindow(),传递GW_HWNDPREV.它返回Z顺序中的上一个窗口,因此它可以重叠.GetWindowRect()获取其矩形,CreateRectRegion()并使用CombineRgn()和RGN_DIFF将其与原始窗口区域组合.

当GetWindow返回NULL时,您已找到所有可能的重叠窗口.使用GetRgnBox检查该区域是否还有其他内容.如果有,则窗口的至少一部分不重叠.