tôi đang viết một ứng dụng chụp màn hình trong Qt4 với C++. Tôi gặp sự cố khi điều chỉnh trên màn hình kép. Tôi không thể tải hình ảnh với màn hình thứ hai. Tôi đã thử một ứng dụng C# và sẽ lấy tất cả các máy tính để bàn trong một hình ảnh và tôi có thể trích xuất từ đó mỗi hình ảnh màn hình máy tính để bàn. Đây là C# mãChụp nhiều màn hình máy tính để bàn bằng cách sử dụng 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);
}
Mã Qt là nhỏ hơn, cũng có thể tôi đã kiểm tra nếu cửa sổ mẹ đẻ xử lý máy tính để bàn khác với Qt desktop0> winId() nhưng họ đều bình đẳng
QPixmap CaptureWinDesktop()
{
WId desktop=GetDesktopWindow();
WId desktop2=QApplication::desktop()->winId();
if(desktop!=desktop2)
{
qDebug("sunt fdiferite WId");
}
QPixmap entireDesktop= QPixmap::grabWindow(desktop);
return entireDesktop;
}
Tôi không chắc chắn nếu đây là một lỗi trong Qt hoặc là một tính năng, sử dụng cùng một cửa sổ xử lý nó chỉ thử lại máy tính để bàn đầu tiên khi trên thực tế máy tính để bàn nó là relay được tạo từ 2 màn hình. Một ý tưởng là sử dụng các cuộc gọi Windows và lưu hình ảnh trong một tập tin tạm thời và tải một QPixmap từ đó, nhưng đó không phải là đơn giản để tiết kiệm một HBITMAP trong một tập tin trong c + + mà không MFC. Kết luận: bạn nghĩ gì là lỗi trong Qt? bất kỳ ý tưởng làm thế nào để làm việc xung quanh nó (không MFC)
Ngoài ra tôi đã tìm thấy một ví dụ sử dụng GDI http: //www.experts-exchange.com/Microsoft/Development/Q_26484815.html, nhìn vào phía dưới, các con số được mã hóa cứng, vì vậy bạn phải lấy kích thước và sửa đổi mã – simion314