首页 > 解决方案 > 从 PID 的 HWND 截屏

问题描述

我目前正在创建一种截取窗口屏幕截图的方法。现在我正在指定要截屏的应用程序的 PID。我通过使用此函数获取与该 PID 关联的 HWND

void GetAllWindowsFromProcessID(DWORD dwProcessID, std::vector <HWND> &vhWnds) {
    // find all hWnds (vhWnds) associated with a process id (dwProcessID)
    HWND hCurWnd = nullptr;
    do {
        hCurWnd = FindWindowEx(nullptr, hCurWnd, nullptr, nullptr);
        DWORD checkProcessID = 0;
        GetWindowThreadProcessId(hCurWnd, &checkProcessID);
        if (checkProcessID == dwProcessID) {
            vhWnds.push_back(hCurWnd);
        }
    } while (hCurWnd != nullptr);
}

一旦我有了与该 PID 关联的 HWND 的向量,我就会使用我的屏幕截图代码循环并保存每个屏幕截图。

当我使用 Notepad++ (PID 712) 运行此代码时,我得到了 7 个与 PID 关联的 HWND。我已经检查了所有 7 个,除了最后一个打印 Notepad++ 之外,它们都打印了一个黑屏。如果我在记事本或计算器上尝试这个,我只会得到一个黑屏。

我正在使用的完整测试代码..

snip

标签: c++windowsscreenshot

解决方案


这还不是答案(我只需要发布屏幕截图)。

这是我在 Spy++ 中看到的:

在此处输入图像描述

例如,您可能想尝试一个子窗口Windows.UI.Core.CoreWindow


推荐阅读