Erfassen von mehreren Bildschirmen, desktop-Bild mit Qt4

Schreibe ich ein screen-capture-Anwendung, die in Qt4 mit c++. Ich habe ein problem beim tuning auf zwei Bildschirme. Ich bin nicht in der Lage zu bekommen ein Bild mit dem zweiten Bild. Ich habe versucht, eine c# - Anwendung, und das wird schnappen Sie alle desktops in einem Bild konnte ich extrahieren von dort aus jeder Bildschirm-desktop-Bild.
Hier ist der c# - code

    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);
}

Den Qt-code ist kleiner,auch die, die ich getestet habe, wenn die native windows-handle zum desktop unterscheidet sich von der Qt-desktop0>winId (), aber Sie sind gleich

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

Ich bin mir nicht sicher ob das ein bug in Qt ist, oder ein feature, mit dem gleichen Fenster-handle es wiederholt nur den ersten desktop, wenn in der Tat die desktop-es ist die Staffel aus der 2 Bildschirme . Eine Idee ist, die systemeigene windows-Anrufe und speichern Sie das Bild in einem temp-Datei und laden Sie ein QPixmap von dort, aber das ist nicht einfach so speichern Sie ein HBITMAP in eine Datei die in c++ ohne MFC.
Fazit: was denken Sie, ist das ein bug in Qt? irgendeine Idee, wie das zu umgehen(kein MFC )

InformationsquelleAutor simion314 | 2010-10-19
Schreibe einen Kommentar