'u kullanarak birden fazla ekran masaüstü görüntüsünü yakalayın Q ++ ile C++ ile bir ekran yakalama uygulaması yazıyorum. Çift ekranlarda ayar yaparken bir sorunum var. İkinci ekran ile bir görüntü alamıyorum. Bir C# uygulamasını denedim ve tüm masaüstlerini tek bir görüntüde yakalayacağım ve oradan her ekran masaüstü görüntüsünü çıkarabileceğim. İşte C# koduQt4
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 kodu daha küçük olmasıdır, yerli pencereler masaüstüne işlemek eğer Ayrıca ben test Qt desktop0> winId() ama onları eşit
QPixmap CaptureWinDesktop()
{
WId desktop=GetDesktopWindow();
WId desktop2=QApplication::desktop()->winId();
if(desktop!=desktop2)
{
qDebug("sunt fdiferite WId");
}
QPixmap entireDesktop= QPixmap::grabWindow(desktop);
return entireDesktop;
}
farklıdır
Bunun Qt'de bir hata olup olmadığından emin değilim veya aynı pencere tutamacını kullanarak, aslında masaüstünde 2 ekrandan oluşan röle olduğunda, yalnızca ilk masaüstünü yeniden dener. Bir fikir, yerel pencereler aramaları kullanmak ve geçici bir dosyaya görüntü kaydetmek ve orada bir QPixmap yüklemek, ancak bu MFC olmadan C++ bir dosyada bir HBITMAP kaydetmek için basit değildir. Sonuç: Sizce Qt'deki bir hata mı? etrafında herhangi bir fikir (MFC yok)
Ayrıca GDI http: //www.experts-exchange kullanarak bir örnek buldum.com/Microsoft/Development/Q_26484815.html, aşağıya bakın, numaralar kodlanmış, bu yüzden boyutları almak ve – simion314