背景
我正在尝试截取特定窗口的屏幕快照,但是我需要完成此操作的操作系统具有很高的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();
问题
有什么更好的方法可以确定窗口是否被完全绘制并且人眼可见?
答案 0 :(得分:2)
如果窗户被完全拉开并且人眼可以看见?
要获取屏幕截图,您不需要该窗口可见。您只需要从其上下文进行复制。因此,只需GetWindowDC()
并使用它即可。
如果您确实需要检查它是否“对人眼可见”,则还必须确保该窗口位于Z轴的顶部。否则,它可能会被其他窗口覆盖。
如果要检查窗口是否已完全重新粉刷,可以测试其GetUpdateRect()
值。