C++可以用来与正在运行的应用程序交互吗

Can C++ be used to interact with running applications?

本文关键字:运行 应用程序 交互 C++      更新时间:2023-10-16

我想利用C++,构建一些可以与其他窗口交互的桌面应用程序。类似于窗口平铺管理器(例如最小化当前窗口、将窗口捕捉到网格中等)。这在C++中可行吗?我只处理过命令行的东西,所以有没有一个好的框架来处理这种工作?任何朝着正确方向的事情,或者我如何能完成这样的事情,都将是很棒的。

在Windows中

您可以使用EnumWindows在每个窗口中进行迭代。它从最上面的窗口开始向下移动。以下代码将在每个可见窗口中循环,并打印出winow的文本。

#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("%sn", buff);
    }
    return TRUE;
}
int main() {
    EnumWindows(EnumWindowsProc, 0);
    return 0;
}

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


我创建了一个工具来处理窗口和形状,名为桌面游乐场,它正是使用这种方法。

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

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

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

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

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