Pregunta

Estoy en Windows XP y estoy tratando de capturar una ventana.

Pero cuando captura una ventana, obtengo el título de la ventana (nombre e icono) pero todo el contenido de la ventana es negro.

Al intentar guardar la imagen, toda la imagen es transparente.

Este es mi código:

    [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;
        }
    }
¿Fue útil?

Solución

Mirar C# Captura de pantalla 3D directa. La pantalla de impresión captura el área visible, no un mango.

DirectX y OpenGL dibujan directamente a través de hardware. Con PrintScreen solo puede capturar la pantalla de identificación que se dibuja por Windows.

Si solo necesita el área visible, use gráficos. CaptureFromScreen.

He probado bitblt y printscreen con una demostración de OpenGL de http://magnum.dimajix.de/download/demos.shtml sin éxito. PrintScreen solo devolvió un mapa de bits en blanco y BitBlt devuelve una captura antigua (probablemente desde el primer y solo mensaje WM_Paint).

Solo intenta comenzar tu juego y escuchar sus mensajes de ventana. Verá que no hay un mensaje WM_Paint. Por lo tanto, Windows ni siquiera sabe si ha cambiado algo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top