- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Windows XP 上,我正在 try catch 一个窗口。
但是当我捕获一个窗口时,我得到了窗口标题(名称和图标)但是窗口的整个内容都是黑色的。
当试图保存图片时,整个图片是透明的。
这是我的代码:
[DllImport("User32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool PrintWindow(IntPtr hwnd, IntPtr hDC, uint nFlags);
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
private static extern bool GetWindowRect(IntPtr handle, ref Rectangle rect);
public void CaptureWindow(IntPtr handle)
{
Rectangle rect = new Rectangle();
GetWindowRect(handle, ref rect);
rect.Width = rect.Width - rect.X;
rect.Height = rect.Height - rect.Y;
try
{
Bitmap bmp = new Bitmap(rect.Width, rect.Height);
Graphics memoryGraphics = Graphics.FromImage(bmp);
IntPtr hdc = memoryGraphics.GetHdc();
PrintWindow(handle, hdc, 0);
ResultsPB.Image = bmp;
memoryGraphics.ReleaseHdc(hdc);
}
catch (Exception)
{
throw;
}
}
最佳答案
看C# Capturing Direct 3D Screen .打印屏幕捕获可见区域,而不是句柄。
DirectX 和 OpenGL 直接通过硬件绘制。使用 PrintScreen,您只能捕获由 Windows 管理绘制的句柄屏幕。
如果您只需要可见区域,请使用 Graphics.CaptureFromScreen。
我尝试了 BitBlt 和 PrintScreen 以及来自 http://magnum.dimajix.de/download/demos.shtml 的 OpenGL 演示没有成功。 PrintScreen 只返回一个空白位图,而 BitBlt 返回一个旧的捕获(可能来自第一个也是唯一一个 WM_PAINT 消息)。
只需尝试启动您的游戏并收听它的窗口消息。您将看到没有 WM_PAINT 消息。所以 Windows 甚至不知道是否有任何更改。
关于C# PrintWindow 返回黑色图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6827066/
我正在一个大项目中实现一个打印函数来打印所谓的小工具(派生自 CWnd)。在小工具类中,我创建了一个函数来将其呈现到设备上下文 PrintPageContent(CDC * pDC, const CR
我在 Windows XP 上,我正在 try catch 一个窗口。 但是当我捕获一个窗口时,我得到了窗口标题(名称和图标)但是窗口的整个内容都是黑色的。 当试图保存图片时,整个图片是透明的。 这是
我正在使用 PrintWindow 制作 IE 的屏幕截图。问题是有时我会得到带有黑色区域的图像。它可能是整个 html 内容什么是黑色的,有时只有某些区域是黑色的。 IE 的内容在拍摄之间不会改变。
我正在尝试截取 Chrome 窗口的屏幕截图。它看起来像这样: 当我使用 PrintWindow 时要获取屏幕截图,我可以在窗口标题栏/Chrome 选项卡区域看到闪烁。捕获的屏幕截图包含 Windo
经过几个小时的谷歌搜索,我设法“写下”了这个: import win32gui from ctypes import windll hwnd = win32gui.FindWindow(None, '
因此,我在尝试使用 PrintWindow API 为位于非事件桌面上的窗口拍照时遇到了一个问题,它开始让我感到不安。 问题是对于一个特定的窗口,即使 PrintWindow 成功并且我得到了我想要的
我正在尝试使用 PrintWindow 让 chrome 在我的 Canvas 上绘画。这是我用来呈现桌面捕获的代码 PRECT lpRect; GetWindowRect(g_Window, lpR
我已经成功地让 PrintWindow 在 C++ 中工作,但是当我尝试在 C# 中工作时,我得到了一个包含空数据的位图。在 .NET 4.0 上使用 VS 2012 Pro。这是我的代码:
我的目标是在笔记本电脑屏幕关闭时截取应用程序的屏幕截图,但屏幕截图将始终与关闭屏幕之前的屏幕截图相同。一旦屏幕关闭,它不会重新绘制自身,并保持卡住状态。 我正在使用 Python 中的 printwi
我正在使用 PrintWindow API 截取特定窗口 (hwnd) 的屏幕截图。这工作得很好,它截取了整个窗口的屏幕截图。我的问题是:我的窗口高度是 742,宽度是 653。如果我想截取窗口中间某
当使用 Print Screen+Alt 组合键手动捕获窗口时,我得到以下信息: 但如果我尝试使用 Windows API 以编程方式执行此操作,我明白了: 为什么会出现差异?我如何以编程方式获得第一
我有一个 C++ 程序可以捕获特定窗口的屏幕截图并使用以下代码保存 int main() { GdiplusStartupInput gdiplusStartupInput; ULON
我在 HTML 页面中有一个部分需要打印。我使用下面的JS方法来打印它。 printWindow.print(); 我就是这样做的。 $("#toprint").on("click", functio
我使用的是 Microsoft Visual Studio 2010 和 Windows 7 Professional。这是我将窗口图像复制到剪贴板的代码: void PrintWindowEx( H
我是一名优秀的程序员,十分优秀!