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

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

Mary-Kate Olsen
发布: 2025-01-17 12:07:10
原创
467 人浏览过

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

C#截取指定应用程序窗口截图

某些情况下,需要截取特定应用程序或窗口的截图,而非整个屏幕。这可以通过PrintWindow Win32 API实现,该API允许将窗口打印到设备上下文。

代码实现

以下C#代码演示如何截取指定窗口的截图:

<code class="language-csharp">// 导入所需的Win32 API
[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);

// 定义表示RECT结构的类
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
    public int Left;
    public int Top;
    public int Right;
    public int Bottom;
}

// 获取窗口句柄和尺寸
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();

// 现在您拥有了表示指定窗口截图的位图</code>
登录后复制

其他说明

  • PrintWindow函数截取的是窗口的客户区,而不是边框或菜单等其他部分。
  • 如果窗口部分可见,则仅截取可见部分。
  • 截取的截图可以保存到文件或在图像查看器中显示。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板