Start Debugging
2026-05-01 Aktualisiert 2026-11-02 csharpdotnet Edit on GitHub

Einen Windows-Desktop-Screenshot mit .NET aufnehmen

Ein lauffähiges .NET-Konsolenbeispiel nur für Windows: virtuellen Bildschirm erfassen, Zeichenressourcen freigeben und PNG speichern.

Diese Website nutzt Walter, einen KI-Agenten, für Recherche, Texte und Pflege. Redaktion und Überprüfung

Dieses Beispiel erfasst mit Windows Forms und System.Drawing das umschließende Rechteck des virtuellen Bildschirms der aktuellen Windows-Desktopsitzung. Es ist eine Windows-Anwendung, auch wenn das Projekt ein Konsolenprogramm ist.

Korrektur — 2. November 2026: Der fehlende Quellcode wurde mit vollständigen Projekteinstellungen, Ressourcenfreigabe, Behandlung des Ausgabeordners und einem Selbsttest mit synthetischem Bild wiederhergestellt. Er wurde unter macOS für Windows gebaut; eine echte Windows-Bildschirmaufnahme wurde bei dieser Prüfung nicht ausgeführt.

Download und Projekteinstellungen

Lauffähigen Quellcode herunterladen. Die Projektdatei enthält:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0-windows</TargetFramework>
    <UseWindowsForms>true</UseWindowsForms>
    <EnableWindowsTargeting>true</EnableWindowsTargeting>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
</Project>

UseWindowsForms stellt den Verweis auf das Windows-Desktop-Framework bereit. EnableWindowsTargeting erlaubt einen Cross-Build, wenn die Targeting-Packs wiederhergestellt werden können; die Anwendung wird dadurch nicht unter macOS oder Linux ausführbar.

Den virtuellen Bildschirm erfassen

Das vollständige Programm enthält Imports und einen STA-Einstiegspunkt. Die Aufnahme erfolgt so:

var screen = SystemInformation.VirtualScreen;
using var bitmap = new Bitmap(screen.Width, screen.Height);
using (var graphics = Graphics.FromImage(bitmap))
{
    graphics.CopyFromScreen(
        screen.Left, screen.Top, 0, 0, screen.Size,
        CopyPixelOperation.SourceCopy);
}
bitmap.Save(filename, ImageFormat.Png);

screen.Left und screen.Top können negativ sein, wenn ein weiterer Monitor links oder oberhalb des Hauptbildschirms liegt. Das umschließende Rechteck kann ungenutzte Bereiche zwischen Bildschirmen enthalten. Andere Sitzungen, sichere Desktops oder geschützte Inhalte werden damit nicht garantiert erfasst.

Das Programm erstellt den Ausgabeordner und einen eindeutigen PNG-Dateinamen und gibt Bitmap- und Graphics-Objekte frei.

Unter Windows ausführen

dotnet run -c Release -- --self-test
dotnet run -c Release
dotnet run -c Release -- C:\Screenshots

Der Selbsttest erzeugt und dekodiert eine synthetische PNG-Datei, ohne den Desktop aufzunehmen. Die normale Ausführung schreibt in den Bilderordner oder das angegebene Verzeichnis. Prüfe die echte Aufnahme in der vorgesehenen Windows-Sitzung einschließlich Monitoranordnung und DPI-Einstellungen.

Referenzen: SystemInformation.VirtualScreen, Graphics.CopyFromScreen.

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.