Feedback

C# - Klasse zum Erstellen von Screenshots

Veröffentlicht von am 1/20/2007
(2 Bewertungen)
Mit Hilfe dieser Klasse können Screenshots erstellt werden.

folgende Möglichkeiten bestehen:
- vollständiger Desktop
- aktives Fenster
- benutzerdefinierter Bereich
- anhand des Handels des Fensters

benötigte Namespaces:
System
System.Runtime.InteropServices
System.Drawing
System.Windows.Forms
/// <summary>
/// Klasse zum erzeugen beliebiger Screenshots
/// </summary>
public class Screenshot
{
    public Screenshot()
    {
    }
   
    private struct RECT
    {
        public int Left;
        public int Top;
        public int Right;
        public int Bottom;
    }

    [DllImport("user32.dll")]
    private static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);

    [DllImport("user32.dll")]
    private static extern int GetForegroundWindow();

    /// <summary>
    /// Erzeugt ein Screenshot vom gesamten Desktop.
    /// </summary>
    /// <returns>Bitmap</returns>
    public Bitmap WholeDesktop()
    {
        return CreateScreenshot(0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
    }
    
    /// <summary>
    /// Erzeugt ein Screenshot vom übergebenen Bereich.
    /// </summary>
    /// <param name="topleft">Punkt des Bereich oben - links</param>
    /// <param name="bottomRight">Punkt des Bereich unten - rechts</param>
    /// <returns>Bitmap</returns>
    public Bitmap UserDefined(Point topleft, Point bottomRight)
    {
        return CreateScreenshot(topleft.X, topleft.Y, bottomRight.X, bottomRight.Y);
    }

    /// <summary>
    /// Erzeugt ein Screenshot vom Fenster des übergebenen Handels
    /// </summary>
    /// <param name="windowhandle"></param>
    /// <returns>Bitmap</returns>
    public Bitmap UserDefinedWindowHandle(IntPtr windowhandle)
    {
        return CreateScreenshot(windowhandle);
    }

    /// <summary>
    /// Erzeugt ein Screenshot vom aktiven Fenster.
    /// </summary>
    /// <returns>Bitmap</returns>
    public Bitmap ActiveWindow()
    {
        return CreateScreenshot((System.IntPtr)GetForegroundWindow());
    }

    private Bitmap CreateScreenshot(int left, int top, int width, int height)
    {
        Bitmap bmp = new Bitmap(width, height);
        Graphics g = Graphics.FromImage(bmp);
        g.CopyFromScreen(left, top, 0, 0, new Size(width, height));
        g.Dispose();
        return bmp;
    }

    private Bitmap CreateScreenshot(IntPtr windowhandle)
    {
        RECT windowRectangle;
        GetWindowRect(windowhandle, out windowRectangle);
        return CreateScreenshot(windowRectangle.Left, windowRectangle.Top, windowRectangle.Right - windowRectangle.Left, windowRectangle.Bottom - windowRectangle.Top);
    }
Abgelegt unter Screenshot.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!