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

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

Susan Sarandon
发布: 2025-01-17 11:56:09
原创
885 人浏览过

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

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中文网其他相关文章!

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