Question

Je suis sur Windows XP et je suis en train de CapTrue une fenêtre.

Mais quand je capture une fenêtre, je reçois le titre de la fenêtre (nom et icône), mais la totalité du contenu de la fenêtre est noir.

Lorsque vous essayez d'enregistrer l'image, l'image entière est transparente.

Ceci est mon 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;
        }
    }
Était-ce utile?

La solution

Regardez C # Capturer direct écran 3D. Imprimer des captures d'écran de la zone visible, pas une poignée.

DirectX et OpenGL tirent directement via le matériel. Avec Impr vous ne pouvez écran de poignée de capture qui sont Drawn gérée sous Windows.

Si vous avez seulement besoin de l'utilisation de la zone visible Graphics.CaptureFromScreen.

Je l'ai essayé et BitBlt Impr avec une démo OpenGL http: //magnum.dimajix .de / télécharger / demos.shtml sans succès. PrintScreen ne retourné un bitmap vide et BitBlt retourner une vieille capture (probablement le message premier et le seul WM_PAINT).

Juste essayer de commencer votre jeu et d'écouter sa fenêtre-messages. Vous verrez qu'il n'y a pas de message WM_PAINT. Donc, Windows ne sait même pas si on a rien changé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top