5

我正在寻找使用 C++ 并构建某种可以与其他窗口交互的桌面应用程序。诸如窗口平铺管理器之类的东西(例如,最小化当前窗口,将窗口捕捉到网格中等)。这可以在 C++ 中完成吗?我只使用过命令行的东西,那么这种工作有没有好的框架?任何朝着正确方向的事情或我如何完成这样的事情都会很棒。

4

3 回答 3

4

在 Windows 中

您可以使用它EnumWindows来遍历每个窗口。它从最上面的窗口开始,然后向下工作。下面的代码将遍历每个可见窗口并打印出窗口的文本。

#include <windows.h>
#include <stdio.h>

BOOL CALLBACK EnumWindowsProc(HWND hWnd, long lParam) {
    char buff[255];

    if (IsWindowVisible(hWnd)) {
        GetWindowText(hWnd, (LPSTR) buff, 254);
        printf("%s\n", buff);
    }
    return TRUE;
}

int main() {
    EnumWindows(EnumWindowsProc, 0);
    return 0;
}

由于您拥有每个窗口的句柄,因此您可以通过向它们发送消息来进行进一步的操作。


我创建了一个使用这种方法的名为Desktop Playground的工具来玩窗口和形状。

我产生一个线程并将每个窗口及其坐标和大小存储在一个哈希表中。然后我遍历并将它们当前的位置和大小与之前的位置和大小进行比较,并执行回调以让我的主线程知道窗口是CreatedMovedReiszed还是Destroyed

于 2013-08-02T18:33:16.717 回答
1

这个问题与您要创建的此类应用程序使用哪个操作系统或 GUI 框架高度相关。

如果操作系统支持这种交互的接口,那么如果有某种语言绑定到提供的 GUI 控制 API (C/C++),它当然可以与 C++ 一起使用。通常从代码中本地使用这些 API 并不是一个好主意,而是通过一个 C++ 库来抽象出低级位和操作。

在下一个级别,有可用的库,甚至支持对不同操作系统特定的 GUI 和系统控制 API 的抽象。如果您正在寻找 OS 可移植代码,请查看Qt 框架

于 2013-08-02T18:40:01.797 回答
1

在 Windows 上,您可以使用SendMessage函数来激活窗口或进程。

于 2013-08-02T18:33:28.810 回答