你需要使用区域,窗口仍然可见的是一组复杂的矩形.从要检查的窗口开始,GetWindowRect和CreateRectRegion为窗口矩形创建一个区域.
在循环中调用GetWindow(),传递GW_HWNDPREV.它返回Z顺序中的上一个窗口,因此它可以重叠.GetWindowRect()获取其矩形,CreateRectRegion()并使用CombineRgn()和RGN_DIFF将其与原始窗口区域组合.
当GetWindow返回NULL时,您已找到所有可能的重叠窗口.使用GetRgnBox检查该区域是否还有其他内容.如果有,则窗口的至少一部分不重叠.