Heim > Backend-Entwicklung > C++ > Wie kann ich mit C# einen Screenshot eines bestimmten Anwendungsfensters erfassen?

Wie kann ich mit C# einen Screenshot eines bestimmten Anwendungsfensters erfassen?

Susan Sarandon
Freigeben: 2025-01-17 12:01:09
Original
872 Leute haben es durchsucht

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

Erstellen Sie einen spezifischen Anwendungs-Screenshot mit C#

Manchmal müssen Sie möglicherweise nur einen Screenshot eines bestimmten Anwendungsfensters und nicht des gesamten Bildschirms erstellen. In diesem Fall ist der Vorgang etwas komplizierter.

PrintWindow API: Lösung für das Abfangen von Anwendungen

Mit der PrintWindow-API in Windows können Sie eine Bitmap eines bestimmten Fensters erfassen, auch wenn es durch andere Elemente verdeckt ist oder sich außerhalb des Bildschirms befindet.

Code-Implementierung

Um PrintWindow zu nutzen, befolgen Sie diese Schritte:

  1. Fensterhandle abrufen: Verwenden Sie die GetWindowRect-Funktion, um die rechteckigen Koordinaten des gewünschten Anwendungsfensters abzurufen.
  2. Bitmap initialisieren: Erstellt ein Bitmap-Objekt, das der Fenstergröße entspricht.
  3. Grafikkontext abrufen: Leiten Sie einen Grafikkontext aus der Bitmap ab.
  4. Fenster-Bitmap erfassen: Rufen Sie PrintWindow auf, um die Bitmap des Fensters im HDC zu erfassen, der dem Grafikkontext zugeordnet ist.
  5. Bitmap abrufen und bereinigen: Gibt den Grafikkontext frei, verarbeitet die Bitmap und gibt das erfasste Bild zurück.

Hier ist ein Codebeispiel:

<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>
Nach dem Login kopieren

Zusammenfassung

Mit der PrintWindow-API können Sie problemlos Screenshots bestimmter Anwendungen erstellen, auch wenn diese Anwendungen möglicherweise minimiert oder durch ein oberes Fenster verdeckt sind. Diese Technologie bietet viele Möglichkeiten zur Fenstermanipulation und Bildaufnahme.

Das obige ist der detaillierte Inhalt vonWie kann ich mit C# einen Screenshot eines bestimmten Anwendungsfensters erfassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage