J'écris une application de capture d'écran en Qt4 avec C++. J'ai un problème lors du réglage sur deux écrans. Je suis incapable d'obtenir une image avec le deuxième écran. J'ai essayé une application C# et cela va attraper tous les bureaux dans une image et je pourrais extraire à partir de là chaque image de bureau à l'écran. Voici le code C#Capture d'image de bureau à plusieurs écrans en utilisant 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);
}
Le code Qt est plus petit, je l'ai testé aussi si les fenêtres natives poignée sur le bureau est différent de Qt desktop0> winId() mais leur sont égaux
QPixmap CaptureWinDesktop()
{
WId desktop=GetDesktopWindow();
WId desktop2=QApplication::desktop()->winId();
if(desktop!=desktop2)
{
qDebug("sunt fdiferite WId");
}
QPixmap entireDesktop= QPixmap::grabWindow(desktop);
return entireDesktop;
}
Je ne suis pas sûr que ce soit un bug dans Qt ou est une fonctionnalité, en utilisant la même poignée de fenêtre, il réessaye seulement le premier bureau alors qu'en fait le bureau est composé de relais à partir des 2 écrans. Une idée consiste à utiliser des appels Windows natifs et enregistrer l'image dans un fichier temporaire et charger un QPixmap à partir de là, mais ce n'est pas simple d'enregistrer un HBITMAP dans un fichier en C++ sans MFC. Conclusion: que penses-tu d'un bug dans Qt? une idée de la façon de contourner ce problème (pas de MFC)
J'ai également trouvé un exemple utilisant GDI http: //www.experts-exchange.com/Microsoft/Développement/Q_26484815.html, regardez en bas, les chiffres sont codés en dur, donc vous devez obtenir les dimensions et modifier le code – simion314