2011-03-26 58 views
2

我有一个打开的窗口列表,在Windows任务栏中。我想要做的是从列表中删除那些不可见的。获取哪个进程/窗口实际上在C#中可见#

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

我一直在寻找谷歌在过去的两天,没有成功...

任何想法?

PS:我可以得到每道工序的位置和大小,因此让上一次的过程中使用/闲置时间将工作太...

+0

我真的不知道你的意思是由一个进程的位置和大小。这是窗户的大小和位置,而不是流程。空闲时间也无济于事。一个模糊的窗口可能是忙碌或空闲的,同样也是最顶层的窗口。 – 2011-03-27 00:06:51

回答

5

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

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

当GetWindow返回NULL时,你已经找到了所有可能的重叠窗口。使用GetRgnBox来检查该区域是否还有其他东西。如果有,窗口的至少一部分不重叠。

+0

+1听起来像你之前做过的那样 – 2011-03-26 23:37:33

+0

Cr * p,它是C#。您需要拼写GetWindowRect和GetWindow,使用pinvoke.net。其余的可以使用.NET Region类。 – 2011-03-26 23:37:48

+0

@David - OT:你如何看待其他人如此迅速地张贴问题? – 2011-03-26 23:39:24

相关问题