Frage

Ich bin unter Windows XP und versuche ein Fenster zu Caprute.

Aber wenn ich ein Fenster erfasse, erhalte ich den Fenstertitel (Name & Symbol), aber der gesamte Inhalt des Fensters ist schwarz.

Beim Versuch, das Bild zu speichern, ist das gesamte Bild transparent.

Dies ist mein Code:

    [DllImport("User32.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool PrintWindow(IntPtr hwnd, IntPtr hDC, uint nFlags);

    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern IntPtr GetForegroundWindow();

    [DllImport("user32.dll")]
    private static extern bool GetWindowRect(IntPtr handle, ref Rectangle rect);

    public void CaptureWindow(IntPtr handle)
    {
        Rectangle rect = new Rectangle();
        GetWindowRect(handle, ref rect);
        rect.Width = rect.Width - rect.X;
        rect.Height = rect.Height - rect.Y;
        try
        {
            Bitmap bmp = new Bitmap(rect.Width, rect.Height);
            Graphics memoryGraphics = Graphics.FromImage(bmp);
            IntPtr hdc = memoryGraphics.GetHdc();
            PrintWindow(handle, hdc, 0);
            ResultsPB.Image = bmp;
            memoryGraphics.ReleaseHdc(hdc);
        }
        catch (Exception)
        {
            throw;
        }
    }
War es hilfreich?

Lösung

Ansehen C# Direkt 3D -Bildschirm erfassen. Drucken Screensht erfasst den sichtbaren Bereich und keinen Griff.

DirectX und OpenGL zeichnen direkt über Hardware. Mit Printscreen können Sie nur den Griffbildschirm erfassen, der von Windows verwaltet wird.

Wenn Sie nur den sichtbaren Bereich benötigen, verwenden Sie Grafiken.

Ich habe Bitblt und Printscreen mit einer OpenGL -Demo von ausprobiert http://magnum.dimajix.de/download/demos.shtml ohne Erfolg. Printscreen hat nur eine leere Bitmap zurückgegeben und Bitblt gibt eine alte Aufnahme zurück (wahrscheinlich von der ersten und einzigen Wm_Paint -Nachricht).

Versuchen Sie einfach, Ihr Spiel zu starten und hören Sie sich die Fensterbilder an. Sie werden sehen, dass es keine WM_Paint -Nachricht gibt. Windows weiß also nicht einmal, ob sich etwas geändert hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top