C++可以用来与正在运行的应用程序交互吗
Can C++ be used to interact with running applications?
我想利用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;
}
由于您拥有每个窗口的句柄,因此可以通过向它们发送消息来进行进一步的操作。
我创建了一个工具来处理窗口和形状,名为桌面游乐场,它正是使用这种方法。
我生成一个线程,并将每个窗口与它们的坐标和大小存储在哈希表中。然后,我迭代并将它们的当前位置和大小与上一个进行比较,并执行回调,让我的主线程知道窗口是Created
、Moved
、Reiszed
还是Destroyed
。
在Windows上,您可以使用SendMessage函数来激活窗口或进程。
这个问题与您要创建的应用程序使用的操作系统或GUI框架高度相关。
如果操作系统支持用于这种交互的接口,那么如果有特定的语言绑定到所提供的GUI控件API(C/C++),那么它当然可以与C++一起使用。通常,从代码中原生地使用这些API并不是一个好主意,而是通过一个抽象出低级位和操作的C++库。
在下一个级别上,有一些库可用,甚至支持不同操作系统特定GUI和系统控制API的抽象。如果您正在寻找操作系统可移植代码,请查看Qt框架。
相关文章:
- 如果从脚本运行应用程序,则在 Linux 中使用 GDB
- Bash 自动完成一个选项,而不运行应用程序
- 以管理员身份运行应用程序时,有没有办法获取非管理员用户名
- 使用 C++ dll 运行 c# 应用程序会生成无法加载异常
- 使用 OpenSSL 运行应用程序时出现问题
- 指定在用户固定我的应用程序时用于运行应用程序的命令参数
- 从Visual Studio运行应用程序会导致错误(由CMake生成)
- BOOST ::日志是每次运行应用程序时都可能旋转文件
- 开发时C++ .lib,运行应用程序时.dll
- 有什么理由更喜欢从 IDE 中运行应用程序而不是运行独立的可执行文件?
- macOS 差异在“访达”和“终端”中运行应用程序
- 使用WordPress在网络服务器上运行C 应用程序
- QT创建者的运行应用程序会出现错误QXCBConnection,然后流产
- 在不同的 Ubuntu 版本中编译和运行 c++ 应用程序
- Visual Studio - C++ - 以 32 位或 64 位构建和运行应用程序 - 从适当的程序文件目录加载 D
- Eclipse 在检查语法时看不到包含文件,但在构建或运行应用程序时会看到
- 在另一台 Mac 上运行应用程序
- 在win8登录屏幕上运行应用程序
- 尝试在Qt中运行应用程序时出错
- 为什么当我在Visual c ++ studio 2010中运行应用程序时光标会转到最后一个文本框