ホームページ > バックエンド開発 > C++ > C# で特定のアプリケーションのスクリーンショットを取得するにはどうすればよいですか?

C# で特定のアプリケーションのスクリーンショットを取得するにはどうすればよいですか?

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

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

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