Feedback

Klasse zum Erstellen von Screenshots

Sprache: C#

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);
    }
/// <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);
    }