ホームページ > バックエンド開発 > C++ > C# を使用して特定のアプリケーション ウィンドウのスクリーンショットをキャプチャするにはどうすればよいですか?

C# を使用して特定のアプリケーション ウィンドウのスクリーンショットをキャプチャするにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-17 12:01:09
オリジナル
872 人が閲覧しました

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

C# を使用して特定のアプリケーションのスクリーンショットを取得します

画面全体ではなく、特定のアプリケーション ウィンドウのスクリーンショットのみを撮る必要がある場合があります。この場合、プロセスは少し複雑になります。

PrintWindow API: アプリケーションインターセプトのソリューション

Windows の PrintWindow API を使用すると、指定したウィンドウが他の要素で隠されている場合や画面外にある場合でも、そのウィンドウのビットマップをキャプチャできます。

コードの実装

PrintWindow を利用するには、次の手順に従います:

  1. ウィンドウ ハンドルの取得: GetWindowRect 関数を使用して、目的のアプリケーション ウィンドウの直交座標を取得します。
  2. ビットマップの初期化: ウィンドウ サイズに一致するビットマップ オブジェクトを作成します。
  3. グラフィックス コンテキストの取得: ビットマップからグラフィックス コンテキストを導出します。
  4. ウィンドウ ビットマップのキャプチャ: PrintWindow を呼び出して、グラフィックス コンテキストに関連付けられた HDC にウィンドウのビットマップをキャプチャします。
  5. ビットマップの取得とクリーンアップ: グラフィックス コンテキストを解放し、ビットマップを処理して、キャプチャされたイメージを返します。

コード例は次のとおりです:

<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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート