Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengambil Tangkapan Skrin Aplikasi Tertentu dalam 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!