c - 使用高 CPU 确定窗口是否可见

标签 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();

问题

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

最佳答案

if the window was fully drawn and visible to the human eye?

要截取屏幕截图,您不需要窗口可见。你只需要从它的上下文中复制。所以只需执行 GetWindowDC() 并使用它。

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

如果你想检查窗口是否被完全重绘,你可以测试它的 GetUpdateRect() 值。

关于c - 使用高 CPU 确定窗口是否可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56034052/

相关文章:

c - 如何从系统函数调用中终止后台进程

c++ - "Access violation reading location"从 directx 检索缓冲区时遇到问题

c++ - 用户锁定屏幕的 Windows 消息

python - 使用python获取进程ID

android - 您如何以编程方式在 Android ICS 及更高版本上截取屏幕截图?

c++ - 使用 floorf() 函数时无法链接 Embarcadero XE4 项目

c - 在 x64 环境中与 GCC 和 x86 ASM 链接

c++ - GetGlyphOutline 函数如何工作? (WinAPI)

ios - 我需要我没有的设备的 iOS 屏幕截图

javascript - 使用 Html2Canvas 的文本区域屏幕截图