如果所有三个独立的应用程序都是用 Qt 编写的,并且您有它们的源代码,那么您应该能够通过 Qt 中 GUI 对象的父级来统一它们。
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
如果您无法以这种方式访问它们,那么您所谈论的就像 3rd 方窗口管理。这有点像编写一个 shell,比如 Windows 资源管理器,它可以操纵其他窗口应用程序的状态和大小。
使用 Spy++ 或 AutoIt Spy for Windows 之类的程序以及其他操作系统的类似程序,并了解您要控制的窗口的识别标记,如类、窗口标题等。或者您可以自己启动 exe 在QProcess::startDetached()
那类的东西。
http://qt-project.org/doc/qt-5.1/qtcore/qprocess.html#startDetached
然后使用依赖于操作系统的调用来控制窗口。Qt 库没有为第三方窗口内置这些东西,仅适用于您启动的 QApplication 下的那些。AutoHotKey 或 AHK 有很多这样的例子。它是一种脚本语言,用于在 windows 环境中自动执行许多操作,并且还有适用于 Mac 的端口(尽管我自己没有尝试过 mac 端口)。
所以最后你正在寻找你的窗口,可能是这样的调用:
#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
然后像这样操作窗口的位置和状态:
::MoveWindow(hwnd_1, x, y, width, height, TRUE);
::ShowWindow(hwnd_1, SW_SHOWMAXIMIZED);
如果您为您正在操作的窗口正确设置了窗口标志,您甚至可以在您正在控制的窗口顶部绘制小部件。
带有像素图的透明 QLabel
无法使用激活原因使 QSystemTrayIcon 正常工作
执行所有这些操作时在 Windows 中出现的一些问题是,当 Windows UI 设置的显示缩放与您期望的不同时,如果您想很好地使用任务栏,并处理所有您正在操作的程序的模态窗口。
所以总的来说,它是可行的。Qt 将为执行这些命令提供一个很好的界面,但最终您需要进行大量的工作和调试才能将其放入一个漂亮、可靠的窗口管理器中。
希望有帮助。