015ef0f962
2. 增加了对于服务端截屏请求的处理类
autogui-cpp
本项目继承自Robot CPP,在此感谢该项目的贡献。
原先的项目仅支持Windows与Mac OS,本项目增加了对Linux X11的支持,Linux Wanland的支持正在开发中
为什么要创建本项目,这是因为我在苦苦寻找pyautogui的cpp实现,但很遗憾,我并没有找到这个轮子。
本项目在原项目的基础上,增加了以下文件:
Autogui.cpp/.hSimpleAutoGUI.h
并修复了原项目的bug:
- 模拟键盘输入的时候,无法处理大小写与符号的转换
最终实现了与pyautogui类似的功能。
但是,本项目不支持以下功能:
- 模拟键盘输入只支持
ASCII字符,如果你需要输入中文,或者其他语言的字符,这可能是一个很大的工程量。 更好的解决方案是将内容copy到剪贴板,然后粘贴到目标位置。
同时,本项目裁剪掉了原项目的部分功能:
HooksScreenRecord
主要是因为有着更加完美的上位替代品,例如Screen可用Qt的QScreen替代,并且支持的更加完美。
注意:原项目并没有说明代码的开源协议,因此关于Robot-cpp部分的代码,解释权归属于原作者 developer239。
本项目被我直接使用在Yosuga这个我自己的项目当中。
项目已在以下平台完成测试:
- Windows 10
- kUbuntu 24.04
由于我没有Mac PC, 因此并未在mac上进行测试,不过mac部分都是直接使用Robot-cpp部分的代码,原作者测试没问题,
大概也是可以使用的。如果遇到bug,尽情提issue即可。
How to use?
想使用本项目十分容易,在你的项目CMakeLists.txt中:
add_subdirectory(autogui-cpp)
target_link_libraries(your_target PRIVATE autogui-cpp) # your_target为你项目的构建目标
# 注意:有时候你还需要根据导入本项目的位置,在autogui-cpp的前面增加一些路径信息
之后,在你需要的地方#include "SimpleAutoGUI.h",访问AutoGUI当中已经封装好的函数即可使用。
some examples
#include <iostream>
#include "SimpleAutoGUI.h"
int main() {
Robot::Point screenSize = AutoGUI::size();
std::cout << "屏幕尺寸: " << screenSize.x << "x" << screenSize.y << std::endl;
// 测试1: 移动鼠标
std::cout << "移动鼠标到屏幕中心..." << std::endl;
int centerX = screenSize.x / 2;
int centerY = screenSize.y / 2;
AutoGUI::moveTo(centerX, centerY, 2);
// 测试2: 单击
std::cout << "左键单击..." << std::endl;
AutoGUI::click();
AutoGUI::sleep(0.5);
// 测试3: 右键单击
std::cout << "右键单击..." << std::endl;
AutoGUI::rightSingle();
AutoGUI::sleep(0.5);
// 测试4: 双击
std::cout << "左键双击..." << std::endl;
AutoGUI::leftDouble();
AutoGUI::sleep(0.5);
// 测试5: 拖拽
std::cout << "拖拽测试..." << std::endl;
AutoGUI::dragRel(100, 100, 0.5);
AutoGUI::sleep(0.5);
// 测试6: 输入文本
std::cout << "输入文本测试..." << std::endl;
AutoGUI::type("Hello, AutoGUI!", 0.05); // 每个字符间隔50ms
AutoGUI::sleep(0.5);
// 测试7: 快捷键
std::cout << "快捷键测试 (Ctrl+A)..." << std::endl;
AutoGUI::hotkey({AutoGUI::Keys::CTRL, "a"});
AutoGUI::sleep(0.5);
std::cout << "快捷键测试 (Ctrl+C)..." << std::endl;
AutoGUI::hotkey({AutoGUI::Keys::CTRL, "c"});
AutoGUI::sleep(0.5);
// 测试8: 滚动
std::cout << "向上滚动..." << std::endl;
AutoGUI::scroll(5);
AutoGUI::sleep(0.5);
std::cout << "向下滚动..." << std::endl;
AutoGUI::scroll(-5);
AutoGUI::sleep(0.5);
// 测试9: 获取鼠标位置
Robot::Point pos = AutoGUI::position();
std::cout << "当前鼠标位置: (" << pos.x << ", " << pos.y << ")" << std::endl;
return 0;
}