确定在高CPU下窗口是否可见

时间:2019-05-08 05:25:55

标签: c winapi screenshot

背景

我正在尝试截取特定窗口的屏幕快照,但是我需要完成此操作的操作系统具有很高的CPU使用率,有时我的应用程序将该窗口确定为可见,但是在屏幕快照中却未显示或一半被绘制。

我的理解

由于CPU使用率很高,它将无法为打开此特定窗口的进程提供足够的资源。因此,检查窗口可见性是否成功,可能意味着该窗口已启动创建但尚未绘制(由于缺少资源)。

我的代码

HWND hWnd = FindWindowExA(0, 0, NULL, programdata->caption);
if (hWnd)
{
    if (IsWindowVisible(hWnd))
    {
        RECT rect = { 0 };
        GetWindowRect(hWnd, &rect);

        // if window size also matches requirement then
        TakeScreenshot();

问题

有什么更好的方法可以确定窗口是否被完全绘制并且人眼可见?

1 个答案:

答案 0 :(得分:2)

  

如果窗户被完全拉开并且人眼可以看见?

要获取屏幕截图,您不需要该窗口可见。您只需要从其上下文进行复制。因此,只需GetWindowDC()并使用它即可。

如果您确实需要检查它是否“对人眼可见”,则还必须确保该窗口位于Z轴的顶部。否则,它可能会被其他窗口覆盖。

如果要检查窗口是否已完全重新粉刷,可以测试其GetUpdateRect()值。