Ich schreibe eine Screen Capture-Anwendung in Qt4 mit C++. Ich habe ein Problem, wenn ich auf zwei Bildschirme abstimme. Ich kann kein Bild mit dem zweiten Bildschirm erstellen. Ich habe versucht, eine C# -Anwendung und das wird alle Desktops in einem Bild greifen und ich konnte von dort jedes Bildschirm-Desktop-Bild extrahieren. Hier ist der C# -Code istErfassen Sie mehrere Bildschirme Desktop-Bild mit Qt4
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);
}
Der Code Qt ist kleiner, i testeten auch, ob die native Windows auf dem Desktop Griff 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 dies ein Fehler in Qt ist oder ein Feature ist, mit dem gleichen Fenstergriff versucht es nur den ersten Desktop, wenn in der Tat der Desktop Relais aus den 2 Bildschirmen zusammengesetzt ist. Eine Idee ist, native Windows-Aufrufe zu verwenden und das Bild in einer temporären Datei zu speichern und eine QPixmap von dort zu laden, aber das ist nicht einfach, eine HBITMAP in einer Datei in C++ ohne MFC zu speichern. Fazit: Was denken Sie, ist das ein Fehler in Qt? keine Ahnung, wie man damit umgehen kann (kein MFC)
Auch ich fand ein Beispiel mit GDI http: //www.experts-exchange.com/Microsoft/Entwicklung/Q_26484815.html, schauen Sie auf der Unterseite, sind die Zahlen hart codiert, so müssen Sie die Abmessungen zu bekommen und ändern Sie den Code – simion314