Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengambil Tangkapan Skrin Aplikasi Tertentu dalam C#?

Bagaimanakah Saya Boleh Mengambil Tangkapan Skrin Aplikasi Tertentu dalam C#?

Susan Sarandon
Susan Sarandonasal
2025-01-17 11:56:09885semak imbas

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

C# mengambil tangkapan skrin aplikasi tertentu

Mengambil tangkapan skrin keseluruhan skrin adalah mudah menggunakan Graphics.CopyFromScreen(). Walau bagaimanapun, keperluan yang lebih kompleks ialah mengambil tangkapan skrin bagi aplikasi tertentu sahaja.

Gunakan fungsi PrintWindow

Penyelesaian terletak pada penggunaan API PrintWindow Win32. Ia boleh menangkap bitmap tetingkap walaupun tetingkap dikaburkan atau tidak pada skrin. Kod berikut menunjukkan cara melakukan ini:

<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>

Coretan kod di atas memerlukan kelas berikut untuk mentakrifkan struktur 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>

Dengan coretan kod ini, anda boleh mengambil tangkapan skrin tetingkap aplikasi sasaran dengan mudah dengan mendapatkan pemegangnya. Hanya gantikan hwnd dalam kaedah PrintWindow dengan pemegang tetingkap aplikasi yang anda inginkan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengambil Tangkapan Skrin Aplikasi Tertentu dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn