Nếu cả ba ứng dụng độc lập đều được viết bằng Qt và bạn có nguồn của chúng, bạn sẽ có thể hợp nhất chúng thông qua việc cha mẹ của các đối tượng GUI trong Qt.
http://qt-project.org/doc/qt-4.8/objecttrees.html
http://qt-project.org/doc/qt-4.8/widgets-and-layouts.html
http://qt-project.org/doc/qt-4.8/mainwindows-mdi.html
Nếu bạn không có quyền truy cập đối với họ theo cách đó, những gì bạn đang nói về là như quản lý cửa sổ bên thứ 3. Nó giống như viết một shell, giống như Windows Explorer, điều khiển trạng thái và kích thước của các ứng dụng cửa sổ khác.
Sử dụng chương trình như Spy ++ hoặc AutoIt Spy cho Windows và các chương trình tương tự cho hệ điều hành khác và tìm hiểu các dấu hiệu xác định của cửa sổ bạn muốn kiểm soát, như lớp, tiêu đề cửa sổ, v.v.Hoặc bạn có thể tự khởi chạy bản thân trong một loại điều kiện QProcess::startDetached()
.
http://qt-project.org/doc/qt-5.1/qtcore/qprocess.html#startDetached
Sau đó, sử dụng hệ điều hành các cuộc gọi phụ thuộc kiểm soát các cửa sổ. Thư viện Qt không có công cụ này được tích hợp trong các cửa sổ của bên thứ ba, chỉ dành cho những người trong QApplication mà bạn đã khởi chạy. Có rất nhiều ví dụ về làm những việc như thế này bằng AutoHotKey, hoặc AHK. Nó là một ngôn ngữ kịch bản được thực hiện để tự động hóa rất nhiều thứ trong môi trường cửa sổ, và có cổng cho Mac là tốt (mặc dù tôi đã không cố gắng cổng mac bản thân mình).
Vì vậy, cuối cùng bạn đang nhìn thấy cửa sổ của bạn có thể có một cuộc gọi như thế này:
#include <windows.h>
HWND hwnd_1 = ::FindWindow("Window_Class", "Window Name");
LONG retVal = GetWindowLongA(hwnd_1, GWL_STYLE); // to query the state of the window
Sau đó thao tác các vị trí và trạng thái của cửa sổ như vậy:
::MoveWindow(hwnd_1, x, y, width, height, TRUE);
::ShowWindow(hwnd_1, SW_SHOWMAXIMIZED);
Bạn có thể thậm chí vẽ các widget trên đầu trang của các cửa sổ bạn đang kiểm soát nếu bạn đặt cờ cửa sổ của bạn một cách chính xác cho các cửa sổ bạn đang thao tác.
transparent QLabel with a pixmap
Cannot get QSystemTrayIcon to work correctly with activation reason
Một số vấn đề mà đi lên trong Windows khi thực hiện tất cả điều này, là tìm ra những khuyết tật của Windows UI khi họ thiết lập hiển thị mở rộng quy mô khác với những gì bạn mong đợi, và nếu bạn muốn chơi tốt với thanh tác vụ và xử lý tất cả các cửa sổ phương thức của các chương trình bạn đang thao tác.
Vì vậy, tổng thể, đó là việc có thể thực hiện được. Qt sẽ tạo một giao diện đẹp để thực hiện các lệnh này, nhưng cuối cùng bạn đang xem xét rất nhiều công việc và gỡ lỗi để có được nó trong một trình quản lý cửa sổ đẹp, đáng tin cậy.
Hy vọng điều đó sẽ hữu ích.
Trước hết cảm ơn bạn trả lời tôi, tôi bắt đầu nghĩ rằng không ai có thể trả lời tôi. Tôi không có quyền truy cập vào mã nguồn. 2 Q: bạn biết gì về QWidget :: createWindowContainer(); chức năng, nó có thể làm tất cả các công việc? 2. Nếu giải pháp của bạn là cần thiết rất nhiều porting đến cửa sổ - có lẽ nó không có giá trị - một nd giải pháp shorted là viết các ứng dụng trong NET cho các cửa sổ và trong tôi không biết cho Linux-Ubuntu? – RRR
Tôi chưa từng sử dụng 'createWindowContainer' trước đây. Dường như nó là một phím tắt để nâng cấp bất kỳ loại 'QWindow', như scenegraph hoặc Qt Quick hoặc một cửa sổ OpenGL để có một trang trí cửa sổ đầy đủ hoạt động với các QWidgets khác. Có vẻ như nó chỉ có thể lấy bất kỳ id HWND nào ... http://blog.qt.digia.com/blog/2013/02/19/introducing-qwidgetcreatewindowcontainer/ – phyatt
Cửa sổ xử lý không quá khó. Nó không có nghiên cứu và làm việc, nhưng để được lên và thao tác chúng trong Windows không nên mất nhiều hơn một vài giờ. Tôi chưa thực hiện nó trong Linux và OSX, nhưng nó chỉ là vấn đề nhận được các cuộc gọi đúng tại chỗ. – phyatt