Home > Backend Development > C++ > How Can I Capture a Screenshot of a Specific Application Window Using C#?

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

Susan Sarandon
Release: 2025-01-17 12:01:09
Original
877 people have browsed it

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

Take specific application screenshot using C#

Sometimes, you may only need to take a screenshot of a specific application window, rather than the entire screen. In this case, the process is a little more complicated.

PrintWindow API: Solution for application interception

The PrintWindow API in Windows allows you to capture a bitmap of a specified window, even if it is obscured by other elements or located off-screen.

Code implementation

To take advantage of PrintWindow, follow these steps:

  1. Get window handle: Use the GetWindowRect function to get the rectangular coordinates of the desired application window.
  2. Initialize Bitmap: Create a Bitmap object that matches the window size.
  3. Get graphics context: Derive a Graphics context from the bitmap.
  4. Capture window bitmap: Call PrintWindow to capture the window's bitmap to the HDC associated with the Graphics context.
  5. Retrieve bitmap and cleanup: Releases the Graphics context, processes the Bitmap, and returns the captured image.

Here is a code example:

<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>
Copy after login

Summary

Using the PrintWindow API, you can easily take screenshots of specific applications, even if those applications may be minimized or obscured by an upper window. This technology offers many possibilities for window manipulation and image acquisition.

The above is the detailed content of How Can I Capture a Screenshot of a Specific Application Window Using C#?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template