首页 >后端开发 >C++ >如何使用 C# 捕获特定应用程序窗口的屏幕截图?

如何使用 C# 捕获特定应用程序窗口的屏幕截图?

Susan Sarandon
Susan Sarandon原创
2025-01-17 12:01:09873浏览

How Can I Capture a Screenshot of a Specific Application Window Using C#?

使用C#截取特定应用程序屏幕截图

有时,您可能只需要截取特定应用程序窗口的截图,而不是整个屏幕。这种情况下,过程会稍微复杂一些。

PrintWindow API:应用程序截取的解决方案

Windows中的PrintWindow API允许您截取指定窗口的位图,即使它被其他元素遮挡或位于屏幕外。

代码实现

要利用PrintWindow,请按照以下步骤操作:

  1. 获取窗口句柄: 使用GetWindowRect函数获取所需应用程序窗口的矩形坐标。
  2. 初始化位图: 创建一个与窗口尺寸匹配的Bitmap对象。
  3. 获取图形上下文: 从位图派生一个Graphics上下文。
  4. 截取窗口位图: 调用PrintWindow将窗口的位图捕获到与Graphics上下文关联的HDC上。
  5. 检索位图并清理: 释放Graphics上下文,处理Bitmap,并返回捕获的图像。

以下是一个代码示例:

<code class="language-csharp">using System.Drawing;
using System.Runtime.InteropServices;

public static class ScreenshotHelper
{
    [DllImport("user32.dll")]
    private static extern bool PrintWindow(IntPtr hWnd, IntPtr hdcBlt, int nFlags);

    [DllImport("user32.dll")]
    private static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);

    public static Bitmap CaptureWindow(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;
    }
}

[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
    public int Left;
    public int Top;
    public int Right;
    public int Bottom;
}</code>

总结

使用PrintWindow API,您可以轻松截取特定应用程序的屏幕截图,即使这些应用程序可能已最小化或被上层窗口遮挡。此技术为窗口操作和图像采集提供了多种可能性。

以上是如何使用 C# 捕获特定应用程序窗口的屏幕截图?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn