我有一个所有打开窗口的列表,这些窗口位于 Windows 任务栏中。我想要做的是从列表中删除那些不可见的。
我的意思是,如果一个窗口被另一个窗口隐藏,它不应该在我的列表中。
过去两天我一直在搜索谷歌,但没有成功...
有任何想法吗?
PS:我可以获取每个进程的位置和大小,因此获取最后一次使用进程/空闲时间也可以......
您需要使用区域,窗口仍然可见的可能是一组复杂的矩形。从要检查的窗口开始,GetWindowRect 和 CreateRectRegion 为窗口矩形创建一个区域。
循环调用 GetWindow(),传递 GW_HWNDPREV。它返回 Z 顺序中的前一个窗口,因此它可以重叠。GetWindowRect() 获取其矩形,CreateRectRegion() 并使用带有 RGN_DIFF 的 CombineRgn() 将其与原始窗口区域组合。
当 GetWindow 返回 NULL 时,您已找到所有可能的重叠窗口。使用 GetRgnBox 检查该区域是否有任何剩余。如果有,则至少有一部分窗口没有重叠。