0

我尝试抓取 Windows 10 上的特定窗口。我阅读了 MSDN 的一些文章以熟悉 API。我的目标是抓住一些特定的窗口,即使它们上面有一些窗口(相当于 OS X CGWindowList API)。因此,如果有 2 个窗口:AB,并且 windowsB部分重叠 window A,我希望能够捕获窗口A内容,而不捕获B部分覆盖窗口的窗口。

根据这个链接,有5种不同的截屏方式,如果我理解正确的话,它们中的大多数只能截取屏幕上的某些区域,即它们不区分窗口。唯一允许抓取特定窗口的 API 是“旧备用,GDI”。

我尝试使用GetWindowDC()函数获取 Windows 的设备上下文,创建兼容的位图,然后使用位块传输 ( BitBlt())。但是,它似乎并不总是按预期工作。

我注意到 Windows 10 上的几个问题(未在其他操作系统上测试):

  1. 窗口的标题栏通常不会被捕获。我试图打开记事本并捕获窗口,但它没有被完全捕获,部分滚动条和标题栏没有被捕获。我试图捕获记事本的子窗口,但它没有按预期工作,而且一些子窗口的坐标似乎是错误的(msctls_statusbar32msctls_statusbar32记事本的子窗口的宽度是实际宽度的 3 倍)窗户)。
  2. 有些应用程序根本没有被捕获。例如,像“照片”、“计算”、“设置”这样的应用程序不会用这种方法捕获,当我尝试捕获它们时,我会得到一个黑色位图。应该有一个允许捕获此类窗口的 API,例如 TeamViewer 能够捕获这些窗口。似乎所有此类窗口都是按ApplicationFrameHost.exe进程呈现的。

有谁知道如何解决这些问题?

4

0 回答 0