Files
Yosuga/src/Handle/DataObjectHandle/Src/AutoAgentHandle.cpp
T
Misaki 46da4870c9 1. 实现单次对话功能,支持语音录制和数据传输
2. 优化静音检测算法,改进RMS平滑处理
3. 添加自动化代理处理,支持点击、拖拽、输入等操作
4. 修复多屏幕环境下鼠标定位问题
2026-02-03 01:29:41 +08:00

81 lines
3.1 KiB
C++

//
// Created by misaki on 2026/1/30.
//
#include "AutoAgentHandle.h"
#include "NetWorkDO.h"
#include <SimpleAutoGUI.h> // 引入 AutoGUI 头文件
// 初始化静态成员
QScopedPointer<AutoAgentHandle> AutoAgentHandle::m_instance;
QMutex AutoAgentHandle::m_mutex;
// 单例实现 (QScopedPointer + Mutex)
AutoAgentHandle* AutoAgentHandle::getInstance()
{
if (m_instance.isNull()) {
QMutexLocker locker(&m_mutex);
if (m_instance.isNull()) {
// 使用 reset 创建实例,因为构造函数是私有的
m_instance.reset(new AutoAgentHandle());
}
}
return m_instance.data();
}
void AutoAgentHandle::destroy()
{
QMutexLocker locker(&m_mutex);
if (!m_instance.isNull()) {
m_instance.reset(); // 这会触发析构函数
}
}
AutoAgentHandle::AutoAgentHandle(QObject *parent) : QObject(parent)
{
connect(NetworkDO::getInstance(), &NetworkDO::autoAgentPacketReceived, this, &AutoAgentHandle::onAutoAgentPacketReceived);
}
AutoAgentHandle::~AutoAgentHandle()
{
qDebug() << "AutoAgentHandle destroyed";
}
void AutoAgentHandle::onAutoAgentPacketReceived(const AutoAgentDataObject &packet) {
qDebug() << "Received AutoAgent packet: " << packet.getAction();
if (packet.getAction() == "click") { // 单击
qDebug() << "Click: " << packet.getX1() << ", " << packet.getY1();
AutoGUI::moveToOnCurrentScreen(packet.getX1(), packet.getY1(), 0.6);
AutoGUI::click(packet.getX1(), packet.getY1());
}
if (packet.getAction() == "left_double") { // 双击
qDebug() << "Double click: " << packet.getX1() << ", " << packet.getY1();
AutoGUI::moveToOnCurrentScreen(packet.getX1(), packet.getY1(), 0.6);
AutoGUI::leftDouble(packet.getX1(), packet.getY1());
}
if (packet.getAction() == "right_single") { // 右键单击
qDebug() << "Right click: " << packet.getX1() << ", " << packet.getY1();
AutoGUI::moveToOnCurrentScreen(packet.getX1(), packet.getY1(), 0.6);
AutoGUI::rightSingle(packet.getX1(), packet.getY1());
}
if (packet.getAction() == "drag") { // 拖拽
qDebug() << "Drag: " << packet.getX1() << ", " << packet.getY1() << " to " << packet.getX2() << ", " << packet.getY2();
AutoGUI::drag(packet.getX1(), packet.getY1(), packet.getX2(), packet.getY2(), 1.2);
}
// TODO: 快捷键,输入文本,滚动待实现
if (packet.getAction() == "type") { // 输入文本
qDebug() << "Type: " << packet.getContent();
AutoGUI::type(packet.getContent().toStdString(), 0.08);
}
if (packet.getAction() == "scroll") { // 滚动
qDebug() << "Scroll: " << packet.getX1() << ", " << packet.getY1() << packet.getDirection();
if (packet.getDirection() == "up") {
AutoGUI::moveToOnCurrentScreen(packet.getX1(), packet.getY1(), 0.1);
AutoGUI::scroll(40, 1);
}
if (packet.getDirection() == "down") {
AutoGUI::moveToOnCurrentScreen(packet.getX1(), packet.getY1(), 0.1);
AutoGUI::scroll(40, -1);
}
}
}