C#截取指定应用程序屏幕截图
使用Graphics.CopyFromScreen()截取整个屏幕截图很简单。但是,更复杂的需求是只截取特定应用程序的屏幕截图。
利用PrintWindow函数
解决方案在于使用PrintWindow Win32 API。即使窗口被遮挡或不在屏幕上,它也能截取窗口位图。以下代码演示了如何实现:
<code class="language-csharp">[DllImport("user32.dll")] public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect); [DllImport("user32.dll")] public static extern bool PrintWindow(IntPtr hWnd, IntPtr hdcBlt, int nFlags); public static Bitmap PrintWindow(IntPtr hwnd) { RECT rc; GetWindowRect(hwnd, out rc); Bitmap bmp = new Bitmap(rc.Width, rc.Height, PixelFormat.Format32bppArgb); Graphics gfxBmp = Graphics.FromImage(bmp); IntPtr hdcBitmap = gfxBmp.GetHdc(); PrintWindow(hwnd, hdcBitmap, 0); gfxBmp.ReleaseHdc(hdcBitmap); gfxBmp.Dispose(); return bmp; }</code>
上述代码片段需要以下类来定义RECT结构:
<code class="language-csharp">[StructLayout(LayoutKind.Sequential)] public struct RECT { private int _Left; private int _Top; private int _Right; private int _Bottom; // ... RECT 结构体的其余代码 ... }</code>
有了这些代码片段,您可以通过获取目标应用程序窗口的句柄轻松截取其屏幕截图。只需将PrintWindow方法中的hwnd替换为您所需应用程序窗口的句柄即可。
以上是如何使用 C# 截取特定应用程序的屏幕截图?的详细内容。更多信息请关注PHP中文网其他相关文章!