背景
我正在尝试截取特定窗口的屏幕截图,但我需要完成此操作的操作系统具有非常高的 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();
问题
有没有更好的方法可以确定窗口是否已完全绘制并且对人眼可见?
最佳答案
if the window was fully drawn and visible to the human eye?
要截取屏幕截图,您不需要窗口可见。你只需要从它的上下文中复制。所以只需执行 GetWindowDC()
并使用它。
如果您真的需要检查它是否“对人眼可见”,您还必须确保窗口位于 Z 顺序的顶部。否则,它可能会被其他窗口覆盖。
如果你想检查窗口是否被完全重绘,你可以测试它的 GetUpdateRect()
值。
关于c - 使用高 CPU 确定窗口是否可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56034052/