首頁 > 後端開發 > C++ > 如何使用 C# 擷取特定應用程式視窗的螢幕截圖?

如何使用 C# 擷取特定應用程式視窗的螢幕截圖?

Susan Sarandon
發布: 2025-01-17 12:01:09
原創
877 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板