Захват изображения рабочего стола с нескольких экранов с помощью Qt4

Я пишу приложение для захвата экрана на Qt4 с помощью C ++. У меня проблема при настройке на два экрана. Я не могу получить изображение на втором экране. Вот код C #

    using System;
using System.Drawing;
using System.Runtime.InteropServices;

public class TestGrab
{
  [STAThread]
  static void Main(string[] args)
  {
    IntPtr hDC = WindowsNative.GetDC(WindowsNative.GetDesktopWindow());
    IntPtr hBitmap = WindowsNative.GetCurrentObject(hDC,
    WindowsNative.OBJ_BITMAP);
    System.Drawing.Bitmap imageDesktop = System.Drawing.Image.FromHbitmap(
    hBitmap);
    imageDesktop.Save(@"c:\zzzzdesktop.png");
  }
}

public class WindowsNative
{
  [DllImport("user32.dll")]
  public static extern IntPtr GetDesktopWindow();

  [DllImport("user32.dll")]
  public static extern IntPtr GetDC(IntPtr ptr);

  public const int OBJ_BITMAP = 7;
  [DllImport("gdi32.dll")]
  public static extern IntPtr GetCurrentObject(IntPtr hdc, uint
  uiObjectType);
}

Код Qt меньше, также я тестировал, отличается ли дескриптор собственного окна рабочего стола от Qt desktop0> winId (), но они равны

QPixmap CaptureWinDesktop()
{
    WId desktop=GetDesktopWindow();
    WId desktop2=QApplication::desktop()->winId();
    if(desktop!=desktop2)
    {
        qDebug("sunt fdiferite WId");
    }
     QPixmap entireDesktop= QPixmap::grabWindow(desktop);
     return entireDesktop;
}

Я не уверен, что это ошибка в Qt или является функцией, используя тот же дескриптор окна, он повторяет попытку только первого рабочего стола, когда на самом деле рабочий стол ретранслируется из двух экранов. Одна из идей - использовать собственные вызовы Windows и сохранить изображение во временном файле и загрузить оттуда QPixmap, но сохранить HBITMAP в файле на C ++ без MFC непросто. Вывод: как вы думаете, что это за ошибка в Qt? есть идеи, как обойти это (без MFC)

6
задан simion314 19 October 2010 в 08:19
поделиться