Я пишу приложение для захвата экрана в Qt4 с помощью C ++.У меня проблема при настройке на двух экранах.Я не могу получить изображение со второго экрана.Я попробовал приложение ac #, и оно будет захватывать все рабочие столы в одном изображении, и я мог извлечь из него каждое изображение рабочего стола экрана.Вот код 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)