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

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-17 12:07:10469瀏覽

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn