Вопрос

Я нахожусь в Windows XP и пытаюсь касать окно.

Но когда я захватываю окно, я получаю заголовок окна (имя и значок), но все содержание окна черное.

При попытке сохранить изображение, все изображение прозрачно.

Это мой код:

    [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;
        }
    }
Это было полезно?

Решение

смотреть на C# захват прямой 3D -экранАнкет Печать экрана захватывает видимую область, а не ручку.

DirectX и OpenGL рисуют непосредственно через аппаратное обеспечение. С помощью отпечатка Eccreen вы можете захватить только экран ручки, который нарисовано Windows.

Если вам нужна только видимая область, используйте графику.

Я пробовал BitBlt и Printscreen с демо -версией OpenGL от http://magnum.dimajix.de/download/demos.shtml безуспешно. Printscreen только вернул пустую растровую карту, а Bitblt вернул старый захват (вероятно, из первого и единственного сообщения WM_Paint).

Просто попробуйте начать свою игру и послушать его окно-месс. Вы увидите, что нет сообщения wm_paint. Таким образом, Windows даже не знает, было ли что -то изменилось.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top