我可以检测窗口是否部分隐藏?

Tom*_*m A 4 delphi visibility

是否有可能检测到我以外的程序窗口是否1)完全可见,2)部分隐藏,或3)完全隐藏?如果窗口(基于检索到的句柄)不可见,我希望能够告诉我的应用程序不要做任何事情.我不关心窗口是否有焦点,z顺序是什么,或者其他什么,我只是对窗口显示的内容感兴趣.如果我需要别的东西来解决这个问题,我很好,但有可能吗?谢谢.

Rob*_*edy 6

Raymond Chen 几年前写了一篇关于此事的文章.

它的要点是,您可以GetClipBox用来告诉您窗口的设备上下文具有哪种裁剪区域.空区域意味着窗口完全被遮挡,复杂区域意味着它被部分遮挡.如果它是一个简单(矩形)区域,则可见性取决于可见矩形是否与窗口的边界重合.

DC一次只能由一个线程使用.因此,您不应为不属于您的应用程序获取窗口的DC.否则,您可能会遇到另一个应用程序 - 不知道您正在做什么 - 在您仍在使用它来检查剪切区域时尝试使用其DC的情况.不过,用它来判断你自己的窗户应该是完全安全的.