屏幕捕获(CopyFromScreen无法完全工作)

本文关键字:工作 CopyFromScreen 屏幕 | 更新日期: 2023-09-27 17:50:26

可能重复:
如何获得屏幕截图以包括调用窗口(在XP上(

我目前正在使用CopyFromScreen(0, 0, 0, 0, imageSize)来捕获桌面,但不幸的是,有一个特定的winform的内容没有被它捕获(其他内容都可以(。

这位winform的工作非常简单;这只是一个股票行情程序。黑色背景和每毫秒左右移动的标签,仅此而已。没有边界。

我无法使用directx的CaptureScreen(我已经尝试过了(,因为显卡的驱动程序不允许我访问前缓冲区(后缓冲区中没有任何内容(。我也不能使用SendKey({PRTSC}),因为我不能覆盖剪贴板的内容。

然而,有趣的是,通过按下键盘的"打印屏幕"并将其粘贴到MS Paint中,可以完美地捕捉到股票代码程序。只是通过代码中的CopyFromScreen无法工作。我该如何让它工作,或者在不使用win32 API的情况下有其他解决方法吗?

编辑:

我发现了为什么它不起作用。

事实证明,我的ticker程序的表单将TransparentKey设置为,而不是null(在本例中为栗色(。当TransparentKey不为null时,CopyFromScreen将不起作用。它只是复制一个空白图像。

有人知道如何让两者(TransparentKey和CopyFromScreen(协同工作吗?lol

编辑2(已解决(:

正如下面发布的,我发现CopyFromScreen实际上是一个围绕BitBlt的包装器。我没有调用CopyFromScreen,而是在这里使用了BitBlt调用:

如何在Windows中将屏幕截图直接保存到文件中?

不过,我对代码做了一些修改。将呼叫更改为:

WIN32_API.BitBlt(hMemDC, 0, 0,size.cx,size.cy, hDC, 0, 0, WIN32_API.SRCCOPY | WIN32_API.CAPTUREBLT);

并将其添加到WIN32_API类:

public const int CAPTUREBLT = 1073741824 

现在可以用TransparentKey捕获桌面了。

屏幕捕获(CopyFromScreen无法完全工作)

将屏幕捕获到位图中或http://www.csharphelp.com/2006/11/capturing-the-screen-image-using-c/可能会有所帮助。