From c33c86c5a7c76df08086c2f75045692b1b5cc22e Mon Sep 17 00:00:00 2001 From: MistEO Date: Fri, 10 Sep 2021 22:37:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=AF=B9WinMacro=E5=8F=8A?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E8=B0=83=E7=94=A8=E7=9A=84=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MeoAssistance/AbstractTask.cpp | 18 +- MeoAssistance/AbstractTask.h | 10 +- MeoAssistance/Assistance.cpp | 19 +- MeoAssistance/Assistance.h | 7 +- MeoAssistance/AsstCaller.cpp | 10 +- MeoAssistance/AsstDef.h | 29 +- MeoAssistance/Configer.cpp | 49 +--- MeoAssistance/IdentifyOperTask.cpp | 7 +- MeoAssistance/InfrastAbstractTask.cpp | 16 +- MeoAssistance/InfrastAbstractTask.h | 2 +- MeoAssistance/InfrastDormTask.cpp | 28 +- MeoAssistance/InfrastStationTask.cpp | 15 +- MeoAssistance/OcrAbstractTask.cpp | 2 +- MeoAssistance/OpenRecruitTask.cpp | 4 +- MeoAssistance/ProcessTask.cpp | 12 +- MeoAssistance/WinMacro.cpp | 374 +++++++------------------- MeoAssistance/WinMacro.h | 35 +-- Tools/TestCaller/main.cpp | 5 - include/AsstCaller.h | 2 - resource/config.json | 96 ++----- 20 files changed, 199 insertions(+), 541 deletions(-) diff --git a/MeoAssistance/AbstractTask.cpp b/MeoAssistance/AbstractTask.cpp index 3a61bda158..42716e3478 100644 --- a/MeoAssistance/AbstractTask.cpp +++ b/MeoAssistance/AbstractTask.cpp @@ -21,14 +21,10 @@ AbstractTask::AbstractTask(AsstCallback callback, void* callback_arg) } void AbstractTask::set_ptr( - std::shared_ptr window_ptr, - std::shared_ptr view_ptr, - std::shared_ptr control_ptr, + std::shared_ptr controller_ptr, std::shared_ptr identify_ptr) { - m_window_ptr = window_ptr; - m_view_ptr = view_ptr; - m_control_ptr = control_ptr; + m_controller_ptr = controller_ptr; m_identify_ptr = identify_ptr; } @@ -39,16 +35,12 @@ void AbstractTask::set_exit_flag(bool* exit_flag) cv::Mat AbstractTask::get_format_image(bool raw) { - cv::Mat raw_image = m_view_ptr->getAdbImage(); + cv::Mat raw_image = m_controller_ptr->getImage(); if (raw_image.empty()) { m_callback(AsstMsg::ImageIsEmpty, json::value(), m_callback_arg); return raw_image; } - //if (raw_image.rows < 100) { - // m_callback(AsstMsg::WindowMinimized, json::value(), m_callback_arg); - // return raw_image; - //} if (raw) { set_control_scale(1.0); @@ -80,7 +72,7 @@ cv::Mat AbstractTask::get_format_image(bool raw) bool asst::AbstractTask::set_control_scale(double scale) { - m_control_ptr->setControlScale(scale); + m_controller_ptr->setControlScale(scale); return true; } @@ -89,7 +81,7 @@ bool asst::AbstractTask::set_control_scale(double scale) // double scale_width = static_cast(cur_width) / Configer::WindowWidthDefault; // double scale_height = static_cast(cur_height) / Configer::WindowHeightDefault; // double scale = (std::max)(scale_width, scale_height); -// m_control_ptr->setControlScale(scale); +// m_controller_ptr->setControlScale(scale); // return true; //} diff --git a/MeoAssistance/AbstractTask.h b/MeoAssistance/AbstractTask.h index 04cf3842f5..880ca19efa 100644 --- a/MeoAssistance/AbstractTask.h +++ b/MeoAssistance/AbstractTask.h @@ -21,11 +21,7 @@ namespace asst { AbstractTask(const AbstractTask&) = default; AbstractTask(AbstractTask&&) = default; - virtual void set_ptr( - std::shared_ptr window_ptr, - std::shared_ptr view_ptr, - std::shared_ptr control_ptr, - std::shared_ptr identify_ptr); + virtual void set_ptr(std::shared_ptr controller_ptr, std::shared_ptr identify_ptr); virtual bool run() = 0; virtual void set_exit_flag(bool* exit_flag); @@ -40,9 +36,7 @@ namespace asst { virtual bool print_window(const std::string& dir); virtual bool need_exit() const noexcept; - std::shared_ptr m_window_ptr = nullptr; - std::shared_ptr m_view_ptr = nullptr; - std::shared_ptr m_control_ptr = nullptr; + std::shared_ptr m_controller_ptr = nullptr; std::shared_ptr m_identify_ptr = nullptr; AsstCallback m_callback; diff --git a/MeoAssistance/Assistance.cpp b/MeoAssistance/Assistance.cpp index 7fc73eb3a7..4980f373aa 100644 --- a/MeoAssistance/Assistance.cpp +++ b/MeoAssistance/Assistance.cpp @@ -103,8 +103,8 @@ Assistance::~Assistance() { DebugTraceFunction; - //if (m_window_ptr != nullptr) { - // m_window_ptr->showWindow(); + //if (m_controller_ptr != nullptr) { + // m_controller_ptr->showWindow(); //} m_thread_exit = true; @@ -130,10 +130,8 @@ std::optional Assistance::catch_emulator(const std::string& emulato auto create_handles = [&](const EmulatorInfo& info) -> bool { - m_window_ptr = std::make_shared(info, HandleType::Window); - m_view_ptr = std::make_shared(info, HandleType::View); - m_control_ptr = std::make_shared(info, HandleType::Control); - return m_window_ptr->captured() && m_view_ptr->captured() && m_control_ptr->captured(); + m_controller_ptr = std::make_shared(info); + return m_controller_ptr->captured(); }; bool ret = false; @@ -388,11 +386,6 @@ bool Assistance::set_param(const std::string& type, const std::string& param, co return Configer::get_instance().set_param(type, param, value); } -bool asst::Assistance::swipe(const Point& p1, const Point& p2) -{ - return m_control_ptr->swipe(p1, p2); -} - void Assistance::working_proc(Assistance* p_this) { DebugTraceFunction; @@ -409,7 +402,7 @@ void Assistance::working_proc(Assistance* p_this) // 先pop出来,如果执行失败再还原回去 p_this->m_tasks_deque.pop_front(); - task_ptr->set_ptr(p_this->m_window_ptr, p_this->m_view_ptr, p_this->m_control_ptr, p_this->m_identify_ptr); + task_ptr->set_ptr(p_this->m_controller_ptr, p_this->m_identify_ptr); task_ptr->set_exit_flag(&p_this->m_thread_idle); bool ret = task_ptr->run(); if (ret) @@ -491,7 +484,7 @@ void Assistance::task_callback(AsstMsg msg, const json::value& detail, void* cus p_this->stop(false); break; case AsstMsg::WindowMinimized: - p_this->m_window_ptr->showWindow(); + p_this->m_controller_ptr->showWindow(); break; case AsstMsg::AppendProcessTask: more_detail["type"] = "ProcessTask"; diff --git a/MeoAssistance/Assistance.h b/MeoAssistance/Assistance.h index 80baaf9473..678af099a6 100644 --- a/MeoAssistance/Assistance.h +++ b/MeoAssistance/Assistance.h @@ -51,9 +51,6 @@ namespace asst { bool set_param(const std::string& type, const std::string& param, const std::string& value); - // 滑动操作,调试用 - bool swipe(const Point& p1, const Point& p2); - static constexpr int ProcessTaskRetryTimesDefault = 20; static constexpr int OpenRecruitTaskRetyrTimesDefault = 5; @@ -70,9 +67,7 @@ namespace asst { static std::optional> get_opers_idtf_result(); // 读取干员识别结果 - std::shared_ptr m_window_ptr = nullptr; - std::shared_ptr m_view_ptr = nullptr; - std::shared_ptr m_control_ptr = nullptr; + std::shared_ptr m_controller_ptr = nullptr; std::shared_ptr m_identify_ptr = nullptr; bool m_inited = false; diff --git a/MeoAssistance/AsstCaller.cpp b/MeoAssistance/AsstCaller.cpp index b349745abe..accfc0ae44 100644 --- a/MeoAssistance/AsstCaller.cpp +++ b/MeoAssistance/AsstCaller.cpp @@ -154,12 +154,4 @@ bool CheckVersionUpdate(char* tag_buffer, int tag_bufsize, char* html_url_buffer strcpy_s(html_url_buffer, html_bufsize, info.html_url.c_str()); strcpy_s(body_buffer, body_bufsize, info.body.c_str()); return true; -} - -bool AsstTestSwipe(asst::Assistance* p_asst, int x1, int y1, int x2, int y2) -{ - if (p_asst == NULL) { - return false; - } - return p_asst->swipe({ x1, y1 }, { x2, y2 }); -} +} \ No newline at end of file diff --git a/MeoAssistance/AsstDef.h b/MeoAssistance/AsstDef.h index 69df845aea..1be4609eae 100644 --- a/MeoAssistance/AsstDef.h +++ b/MeoAssistance/AsstDef.h @@ -13,22 +13,6 @@ namespace json } namespace asst { - enum class HandleType - { - Window = 1, - View = 2, - Control = 4 - }; - - static std::ostream& operator<<(std::ostream& os, const HandleType& type) - { - static std::unordered_map _type_name = { - {HandleType::Window, "Window"}, - {HandleType::View, "View"}, - {HandleType::Control, "Control"} - }; - return os << _type_name.at(type); - } enum class ProcessTaskAction { Invalid = 0, @@ -130,17 +114,8 @@ namespace asst { struct EmulatorInfo { std::string name; - std::vector window; - std::vector view; - std::vector control; - bool is_adb = false; AdbCmd adb; - int width = 0; - int height = 0; - int x_offset = 0; - int y_offset = 0; - int right_offset = 0; - int bottom_offset = 0; + HandleInfo handle; }; // 任务信息 @@ -187,14 +162,12 @@ namespace asst { int control_delay_upper = 0; // 点击随机延时上限:每次点击操作会进行随机延时 bool print_window = false; // 截图功能:开启后每次结算界面会截图到screenshot目录下 int print_window_delay = 0; // 截图延时:每次到结算界面,掉落物品不是一次性出来的,有个动画,所以需要等一会再截图 - int print_window_crop_offset = 0; // 截图额外裁剪:再额外把边框裁减掉一圈,不然企鹅物流有可能识别不出来 int ocr_gpu_index = -1; // OcrLite使用GPU编号,-1(使用CPU)/0(使用GPU0)/1(使用GPU1)/... int ocr_thread_number = 0; // OcrLite线程数量 }; struct InfrastOptions { // 基建的选项 double dorm_threshold = 0; // 宿舍心情百分比阈值,心情百分比小于该值的干员会被放进宿舍 - }; // 干员信息,公开招募相关 diff --git a/MeoAssistance/Configer.cpp b/MeoAssistance/Configer.cpp index 3afe1a74ef..cbcccafaad 100644 --- a/MeoAssistance/Configer.cpp +++ b/MeoAssistance/Configer.cpp @@ -63,8 +63,6 @@ bool asst::Configer::parse(json::value&& json) m_options.control_delay_upper = options_json["controlDelayRange"][1].as_integer(); m_options.print_window = options_json["printWindow"].as_boolean(); m_options.print_window_delay = options_json["printWindowDelay"].as_integer(); - m_options.print_window_crop_offset = options_json["printWindowCropOffset"].as_integer(); - m_options.ocr_gpu_index = options_json["ocrGpuIndex"].as_integer(); m_options.ocr_thread_number = options_json["ocrThreadNumber"].as_integer(); } DebugTrace("Options", Utf8ToGbk(options_json.to_string())); @@ -193,46 +191,21 @@ bool asst::Configer::parse(json::value&& json) m_all_tasks_info.emplace(name, task_info_ptr); } - for (auto&& [name, emulator_json] : root["handle"].as_object()) { + for (auto&& [name, emulator_json] : root["emulator"].as_object()) { EmulatorInfo emulator_info; emulator_info.name = name; - for (json::value& info : emulator_json["window"].as_array()) { - HandleInfo handle_info; - handle_info.class_name = info["class"].as_string(); - handle_info.window_name = info["window"].as_string(); - emulator_info.window.emplace_back(std::move(handle_info)); - } - for (json::value& info : emulator_json["view"].as_array()) { - HandleInfo handle_info; - handle_info.class_name = info["class"].as_string(); - handle_info.window_name = info["window"].as_string(); - emulator_info.view.emplace_back(std::move(handle_info)); - } - for (json::value& info : emulator_json["control"].as_array()) { - HandleInfo handle_info; - handle_info.class_name = info["class"].as_string(); - handle_info.window_name = info["window"].as_string(); - emulator_info.control.emplace_back(std::move(handle_info)); - } - if (emulator_json.exist("adb")) { - emulator_info.is_adb = true; - emulator_info.adb.path = emulator_json["adb"]["path"].as_string(); - emulator_info.adb.connect = emulator_json["adb"]["connect"].as_string(); - emulator_info.adb.click = emulator_json["adb"]["click"].as_string(); - emulator_info.adb.swipe = emulator_json["adb"]["swipe"].as_string(); - emulator_info.adb.display = emulator_json["adb"]["display"].as_string(); - emulator_info.adb.display_regex = emulator_json["adb"]["displayRegex"].as_string(); - emulator_info.adb.screencap = emulator_json["adb"]["screencap"].as_string(); - emulator_info.adb.pullscreen = emulator_json["adb"]["pullscreen"].as_string(); - } - emulator_info.x_offset = emulator_json.get("xOffset", 0); - emulator_info.y_offset = emulator_json.get("yOffset", 0); - emulator_info.right_offset = emulator_json.get("rightOffset", 0); - emulator_info.bottom_offset = emulator_json.get("bottomOffset", 0); + emulator_info.handle.class_name = emulator_json["handle"]["class"].as_string(); + emulator_info.handle.window_name = emulator_json["handle"]["window"].as_string(); - emulator_info.width = WindowWidthDefault + emulator_info.x_offset + emulator_info.right_offset; - emulator_info.height = WindowHeightDefault + emulator_info.y_offset + emulator_info.bottom_offset; + emulator_info.adb.path = emulator_json["adb"]["path"].as_string(); + emulator_info.adb.connect = emulator_json["adb"]["connect"].as_string(); + emulator_info.adb.click = emulator_json["adb"]["click"].as_string(); + emulator_info.adb.swipe = emulator_json["adb"]["swipe"].as_string(); + emulator_info.adb.display = emulator_json["adb"]["display"].as_string(); + emulator_info.adb.display_regex = emulator_json["adb"]["displayRegex"].as_string(); + emulator_info.adb.screencap = emulator_json["adb"]["screencap"].as_string(); + emulator_info.adb.pullscreen = emulator_json["adb"]["pullscreen"].as_string(); m_handles.emplace(name, std::move(emulator_info)); } diff --git a/MeoAssistance/IdentifyOperTask.cpp b/MeoAssistance/IdentifyOperTask.cpp index 2c841a3105..2808422a8e 100644 --- a/MeoAssistance/IdentifyOperTask.cpp +++ b/MeoAssistance/IdentifyOperTask.cpp @@ -28,15 +28,14 @@ asst::IdentifyOperTask::IdentifyOperTask(AsstCallback callback, void* callback_a bool asst::IdentifyOperTask::run() { - if (m_view_ptr == nullptr - || m_identify_ptr == nullptr - || m_control_ptr == nullptr) + if (m_controller_ptr == nullptr + || m_identify_ptr == nullptr) { m_callback(AsstMsg::PtrIsNull, json::value(), m_callback_arg); return false; } - auto&& [width, height] = m_view_ptr->getAdbDisplaySize(); + auto&& [width, height] = m_controller_ptr->getDisplaySize(); m_swipe_begin = Rect(width * 0.9, height * 0.5, 0, 0); m_swipe_end = Rect(width * 0.1, height * 0.5, 0, 0); diff --git a/MeoAssistance/InfrastAbstractTask.cpp b/MeoAssistance/InfrastAbstractTask.cpp index 5f52352d98..91057ac080 100644 --- a/MeoAssistance/InfrastAbstractTask.cpp +++ b/MeoAssistance/InfrastAbstractTask.cpp @@ -9,11 +9,17 @@ using namespace asst; +asst::InfrastAbstractTask::InfrastAbstractTask(AsstCallback callback, void* callback_arg) + : OcrAbstractTask(callback, callback_arg), + m_swipe_begin(Configer::WindowWidthDefault * 0.9, Configer::WindowHeightDefault * 0.5, 0, 0), + m_swipe_end(Configer::WindowWidthDefault * 0.5, Configer::WindowHeightDefault * 0.5, 0, 0) +{ +} + bool asst::InfrastAbstractTask::swipe_to_the_left() { constexpr int SwipeTimes = 5; - set_control_scale(1.0); m_swipe_duration = 100; m_swipe_extra_delay = 0; // 往左使劲滑几下 @@ -33,13 +39,13 @@ bool asst::InfrastAbstractTask::swipe_to_the_left() bool asst::InfrastAbstractTask::click_clear_button() { const static Rect ClearButtonRect(430, 655, 150, 40); - return m_control_ptr->click(ClearButtonRect); + return m_controller_ptr->click(ClearButtonRect); } bool asst::InfrastAbstractTask::click_confirm_button() { const static Rect ConfirmButtonRect(1105, 655, 150, 40); - return m_control_ptr->click(ConfirmButtonRect); + return m_controller_ptr->click(ConfirmButtonRect); } bool asst::InfrastAbstractTask::swipe(bool reverse) @@ -47,11 +53,11 @@ bool asst::InfrastAbstractTask::swipe(bool reverse) //#ifndef LOG_TRACE bool ret = true; if (!reverse) { - ret &= m_control_ptr->swipe(m_swipe_begin, m_swipe_end, m_swipe_duration); + ret &= m_controller_ptr->swipe(m_swipe_begin, m_swipe_end, m_swipe_duration); ++m_swipe_times; } else { - ret &= m_control_ptr->swipe(m_swipe_end, m_swipe_begin, m_swipe_duration); + ret &= m_controller_ptr->swipe(m_swipe_end, m_swipe_begin, m_swipe_duration); --m_swipe_times; } ret &= sleep(m_swipe_extra_delay); diff --git a/MeoAssistance/InfrastAbstractTask.h b/MeoAssistance/InfrastAbstractTask.h index acabd3b54a..4fbed9d35a 100644 --- a/MeoAssistance/InfrastAbstractTask.h +++ b/MeoAssistance/InfrastAbstractTask.h @@ -7,7 +7,7 @@ namespace asst { class InfrastAbstractTask : public OcrAbstractTask { public: - using OcrAbstractTask::OcrAbstractTask; + InfrastAbstractTask(AsstCallback callback, void* callback_arg); virtual ~InfrastAbstractTask() = default; virtual bool run() = 0; protected: diff --git a/MeoAssistance/InfrastDormTask.cpp b/MeoAssistance/InfrastDormTask.cpp index 05e956f6e5..aab6d18c12 100644 --- a/MeoAssistance/InfrastDormTask.cpp +++ b/MeoAssistance/InfrastDormTask.cpp @@ -13,9 +13,8 @@ using namespace asst; bool asst::InfrastDormTask::run() { - if (m_view_ptr == nullptr - || m_identify_ptr == nullptr - || m_control_ptr == nullptr) + if (m_controller_ptr == nullptr + || m_identify_ptr == nullptr) { m_callback(AsstMsg::PtrIsNull, json::value(), m_callback_arg); return false; @@ -68,7 +67,7 @@ bool asst::InfrastDormTask::enter_dorm(int index) return lhs.rect.y < rhs.rect.y; }); - m_control_ptr->click(cur_dorm_result.at(index).rect); + m_controller_ptr->click(cur_dorm_result.at(index).rect); sleep(1000); return false; @@ -93,10 +92,10 @@ bool asst::InfrastDormTask::enter_next_dorm() // 所以这里先检查一下,如果进驻信息被选中了,就先把它关了,再进行滑动 auto find_result = m_identify_ptr->find_image(get_format_image(), "StationInfoSelected"); if (find_result.score >= 0.75) { - m_control_ptr->click(find_result.rect); + m_controller_ptr->click(find_result.rect); } - m_control_ptr->swipe(swipe_down_begin, swipe_down_end, swipe_dwon_duration); + m_controller_ptr->swipe(swipe_down_begin, swipe_down_end, swipe_dwon_duration); static const Rect double_click_rect( Configer::WindowWidthDefault * 0.4, @@ -106,8 +105,8 @@ bool asst::InfrastDormTask::enter_next_dorm() ); // 游戏中的宿舍里,双击可以让当前设施回到正确的位置 - m_control_ptr->click(double_click_rect); - m_control_ptr->click(double_click_rect); + m_controller_ptr->click(double_click_rect); + m_controller_ptr->click(double_click_rect); return true; } @@ -138,7 +137,7 @@ bool asst::InfrastDormTask::enter_operator_selection() [](const TextArea& textarea) -> bool { return textarea.text == station_info; }); - m_control_ptr->click(station_info_iter->rect); + m_controller_ptr->click(station_info_iter->rect); sleep(1000); ocr_result = ocr_detect(); } @@ -160,7 +159,7 @@ bool asst::InfrastDormTask::enter_operator_selection() // TODO 报错 return false; } - m_control_ptr->click(button_iter->rect); + m_controller_ptr->click(button_iter->rect); sleep(3000); return true; @@ -196,7 +195,7 @@ int asst::InfrastDormTask::select_operators(bool need_to_the_left) int count = 0; // 把“休息中”的干员,都再次选上 for (const auto& resting : resting_result) { - m_control_ptr->click(resting.rect); + m_controller_ptr->click(resting.rect); ++count; } // 选择“注意力涣散”的干员 @@ -204,22 +203,23 @@ int asst::InfrastDormTask::select_operators(bool need_to_the_left) if (count++ >= MaxOperNumInDorm) { break; } - m_control_ptr->click(listless.rect); + m_controller_ptr->click(listless.rect); } // 选择心情较低的干员 for (const auto& mood_status : work_mood_result) { if (count++ >= MaxOperNumInDorm) { break; } - m_control_ptr->click(mood_status.rect); + m_controller_ptr->click(mood_status.rect); } click_confirm_button(); + sleep(300); // 点完确定后,如果把工作中的干员撤下来了,会再弹出来一个确认的界面,如果没扯下来则不会弹出。先识别一下再决定要不要点击 auto&& [algorithm, score, second_confirm_rect] = m_identify_ptr->find_image(get_format_image(), "DormConfirm"); if (score >= Configer::TemplThresholdDefault) { - m_control_ptr->click(second_confirm_rect); + m_controller_ptr->click(second_confirm_rect); } sleep(2000); diff --git a/MeoAssistance/InfrastStationTask.cpp b/MeoAssistance/InfrastStationTask.cpp index 0efa4abfe3..8e36af7322 100644 --- a/MeoAssistance/InfrastStationTask.cpp +++ b/MeoAssistance/InfrastStationTask.cpp @@ -18,9 +18,8 @@ using namespace asst; bool asst::InfrastStationTask::run() { - if (m_view_ptr == nullptr - || m_identify_ptr == nullptr - || m_control_ptr == nullptr) + if (m_controller_ptr == nullptr + || m_identify_ptr == nullptr) { m_callback(AsstMsg::PtrIsNull, json::value(), m_callback_arg); return false; @@ -44,7 +43,7 @@ bool asst::InfrastStationTask::run() for (size_t i = 0; i != facility_number_rect.size(); ++i) { if (i != 0) { // 点到这个基建 - m_control_ptr->click(facility_number_rect[i]); + m_controller_ptr->click(facility_number_rect[i]); sleep(300); image = get_format_image(); } @@ -65,13 +64,13 @@ bool asst::InfrastStationTask::run() } //点击添加干员的那个按钮 Rect add_rect = score1 >= score2 ? std::move(add_rect1) : std::move(add_rect2); - m_control_ptr->click(add_rect); + m_controller_ptr->click(add_rect); sleep(2000); click_clear_button(); sleep(300); - auto&& [width, height] = m_view_ptr->getAdbDisplaySize(); + auto&& [width, height] = m_controller_ptr->getDisplaySize(); m_swipe_begin = Rect(width * 0.9, height * 0.5, 0, 0); m_swipe_end = Rect(width * 0.5, height * 0.5, 0, 0); @@ -237,7 +236,7 @@ bool asst::InfrastStationTask::swipe_and_select(std::list& name_com // 点过了就不会再点了,直接从最优解vector里面删了 auto iter = std::find(name_comb.begin(), name_comb.end(), text_area.text); if (iter != name_comb.end()) { - m_control_ptr->click(text_area.rect); + m_controller_ptr->click(text_area.rect); sleep(200); name_comb.erase(iter); } @@ -252,7 +251,7 @@ bool asst::InfrastStationTask::swipe_and_select(std::list& name_com } // 点击“确定”按钮,确定完要联网加载的,比较慢,多sleep一会 get_format_image(); // 这里get image没什么用,单纯就是为了触发下设置缩放,TODO 优化下 - m_control_ptr->click(Rect(1105, 655, 150, 40)); + m_controller_ptr->click(Rect(1105, 655, 150, 40)); sleep(2000); return true; } \ No newline at end of file diff --git a/MeoAssistance/OcrAbstractTask.cpp b/MeoAssistance/OcrAbstractTask.cpp index becf6b2ff6..99cf2a60d3 100644 --- a/MeoAssistance/OcrAbstractTask.cpp +++ b/MeoAssistance/OcrAbstractTask.cpp @@ -35,7 +35,7 @@ bool asst::OcrAbstractTask::click_text(const cv::Mat& image, const std::string& { for (const TextArea& textarea : ocr_detect(image)) { if (textarea.text == text) { - m_control_ptr->click(textarea.rect); + m_controller_ptr->click(textarea.rect); return true; } } diff --git a/MeoAssistance/OpenRecruitTask.cpp b/MeoAssistance/OpenRecruitTask.cpp index d6b6a4c781..8dc4752f4a 100644 --- a/MeoAssistance/OpenRecruitTask.cpp +++ b/MeoAssistance/OpenRecruitTask.cpp @@ -13,7 +13,7 @@ using namespace asst; bool OpenRecruitTask::run() { - if (m_view_ptr == NULL + if (m_controller_ptr == NULL || m_identify_ptr == NULL) { m_callback(AsstMsg::PtrIsNull, json::value(), m_callback_arg); @@ -202,7 +202,7 @@ bool OpenRecruitTask::run() task_json["type"] = "ClickTask"; for (const TextArea& text_area : all_tags) { if (std::find(final_tags_name.cbegin(), final_tags_name.cend(), text_area.text) != final_tags_name.cend()) { - m_control_ptr->click(text_area.rect); + m_controller_ptr->click(text_area.rect); } } } diff --git a/MeoAssistance/ProcessTask.cpp b/MeoAssistance/ProcessTask.cpp index c84fe900b0..1eeff543d4 100644 --- a/MeoAssistance/ProcessTask.cpp +++ b/MeoAssistance/ProcessTask.cpp @@ -14,10 +14,8 @@ using namespace asst; bool ProcessTask::run() { - if (m_view_ptr == NULL - || m_control_ptr == NULL - || m_identify_ptr == NULL - || m_control_ptr == NULL) + if (m_controller_ptr == NULL + || m_identify_ptr == NULL) { m_callback(AsstMsg::PtrIsNull, json::value(), m_callback_arg); return false; @@ -251,7 +249,7 @@ void ProcessTask::exec_click_task(const Rect& matched_rect) return; } - m_control_ptr->click(matched_rect); + m_controller_ptr->click(matched_rect); } void asst::ProcessTask::exec_swipe_task(ProcessTaskAction action) @@ -272,10 +270,10 @@ void asst::ProcessTask::exec_swipe_task(ProcessTaskAction action) switch (action) { case asst::ProcessTaskAction::SwipeToTheLeft: - m_control_ptr->swipe(left_rect, right_rect); + m_controller_ptr->swipe(left_rect, right_rect); break; case asst::ProcessTaskAction::SwipeToTheRight: - m_control_ptr->swipe(right_rect, left_rect); + m_controller_ptr->swipe(right_rect, left_rect); break; default: // 走不到这里,TODO 报个错 break; diff --git a/MeoAssistance/WinMacro.cpp b/MeoAssistance/WinMacro.cpp index a5bc5dbcff..1d4b6878fa 100644 --- a/MeoAssistance/WinMacro.cpp +++ b/MeoAssistance/WinMacro.cpp @@ -16,13 +16,10 @@ using namespace asst; -bool WinMacro::m_is_adb_connect = false; - -WinMacro::WinMacro(const EmulatorInfo& info, HandleType type) +WinMacro::WinMacro(const EmulatorInfo& info) : m_emulator_info(info), - m_handle_type(type), m_rand_engine(std::chrono::system_clock::now().time_since_epoch().count()), - m_adb_screen_filename(GetCurrentDir() + "adb_screen.png") + m_screen_filename(GetCurrentDir() + "adb_screen.png") { findHandle(); } @@ -34,115 +31,82 @@ bool WinMacro::captured() const noexcept bool WinMacro::findHandle() { - std::vector handle_vec; - m_is_adb = m_emulator_info.is_adb; - switch (m_handle_type) { - case HandleType::Window: - m_width = m_emulator_info.width; - m_height = m_emulator_info.height; - handle_vec = m_emulator_info.window; - break; - case HandleType::View: - handle_vec = m_emulator_info.view; - break; - case HandleType::Control: - m_is_adb = m_emulator_info.is_adb; - //m_x_offset = m_emulator_info.x_offset; - //m_y_offset = m_emulator_info.y_offset; - handle_vec = m_emulator_info.control; - break; - default: - DebugTraceError("Handle type error!", m_handle_type); + const HandleInfo& handle_info = m_emulator_info.handle; + + wchar_t* class_wbuff = NULL; + if (!handle_info.class_name.empty()) { + size_t class_len = (handle_info.class_name.size() + 1) * 2; + class_wbuff = new wchar_t[class_len]; + ::MultiByteToWideChar(CP_UTF8, 0, handle_info.class_name.c_str(), -1, class_wbuff, class_len); + } + wchar_t* window_wbuff = NULL; + if (!handle_info.window_name.empty()) { + size_t window_len = (handle_info.window_name.size() + 1) * 2; + window_wbuff = new wchar_t[window_len]; + memset(window_wbuff, 0, window_len); + ::MultiByteToWideChar(CP_UTF8, 0, handle_info.window_name.c_str(), -1, window_wbuff, window_len); + } + + m_handle = ::FindWindowExW(m_handle, NULL, class_wbuff, window_wbuff); + + if (class_wbuff != NULL) { + delete[] class_wbuff; + class_wbuff = NULL; + } + if (window_wbuff != NULL) { + delete[] window_wbuff; + window_wbuff = NULL; + } + + if (m_handle == NULL) { + return false; + } + DWORD pid = 0; + ::GetWindowThreadProcessId(m_handle, &pid); + HANDLE handle = ::OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid); + LPSTR path_buff = new CHAR[MAX_PATH]; + memset(path_buff, 0, MAX_PATH); + DWORD buff_size = MAX_PATH; + QueryFullProcessImageNameA(handle, 0, path_buff, &buff_size); + std::string adb_dir = path_buff; + if (path_buff != NULL) { + delete[] path_buff; + path_buff = NULL; + } + size_t pos = adb_dir.find_last_of('\\') + 1; + adb_dir = adb_dir.substr(0, pos); + adb_dir = '"' + StringReplaceAll(m_emulator_info.adb.path, "[EmulatorPath]", adb_dir) + '"'; + + // TODO,检查连接是否成功 + std::string connect_cmd = StringReplaceAll(m_emulator_info.adb.connect, "[Adb]", adb_dir); + if (!callCmd(connect_cmd)) { + DebugTraceError("Connect Adb Error", connect_cmd); return false; } - m_handle = NULL; - for (const HandleInfo& handle_info : handle_vec) - { - wchar_t* class_wbuff = NULL; - if (!handle_info.class_name.empty()) { - size_t class_len = (handle_info.class_name.size() + 1) * 2; - class_wbuff = new wchar_t[class_len]; - ::MultiByteToWideChar(CP_UTF8, 0, handle_info.class_name.c_str(), -1, class_wbuff, class_len); - } - wchar_t* window_wbuff = NULL; - if (!handle_info.window_name.empty()) { - size_t window_len = (handle_info.window_name.size() + 1) * 2; - window_wbuff = new wchar_t[window_len]; - memset(window_wbuff, 0, window_len); - ::MultiByteToWideChar(CP_UTF8, 0, handle_info.window_name.c_str(), -1, window_wbuff, window_len); - } - - m_handle = ::FindWindowExW(m_handle, NULL, class_wbuff, window_wbuff); - - if (class_wbuff != NULL) { - delete[] class_wbuff; - class_wbuff = NULL; - } - if (window_wbuff != NULL) { - delete[] window_wbuff; - window_wbuff = NULL; - } - } - if (m_is_adb && m_handle != NULL) { - DWORD pid = 0; - ::GetWindowThreadProcessId(m_handle, &pid); - HANDLE handle = ::OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid); - LPSTR path_buff = new CHAR[MAX_PATH]; - memset(path_buff, 0, MAX_PATH); - DWORD buff_size = MAX_PATH; - QueryFullProcessImageNameA(handle, 0, path_buff, &buff_size); - std::string adb_dir = path_buff; - if (path_buff != NULL) { - delete[] path_buff; - path_buff = NULL; - } - size_t pos = adb_dir.find_last_of('\\') + 1; - adb_dir = adb_dir.substr(0, pos); - adb_dir = '"' + StringReplaceAll(m_emulator_info.adb.path, "[EmulatorPath]", adb_dir) + '"'; - - if (!m_is_adb_connect) { - std::string connect_cmd = StringReplaceAll(m_emulator_info.adb.connect, "[Adb]", adb_dir); - if (!callCmd(connect_cmd)) { - DebugTraceError("Connect Adb Error", connect_cmd); - return false; - } - m_is_adb_connect = true; - } - - if (m_handle_type == HandleType::Control) - { - m_click_cmd = StringReplaceAll(m_emulator_info.adb.click, "[Adb]", adb_dir); - m_swipe_cmd = StringReplaceAll(m_emulator_info.adb.swipe, "[Adb]", adb_dir); - } - else if (m_handle_type == HandleType::View) - { - m_screencap_cmd = StringReplaceAll( - StringReplaceAll(m_emulator_info.adb.screencap, "[Adb]", adb_dir), - "[Filename]", m_adb_screen_filename); - m_pullscreen_cmd = StringReplaceAll( - StringReplaceAll(m_emulator_info.adb.pullscreen, "[Adb]", adb_dir), - "[Filename]", m_adb_screen_filename); - } - auto&& display_ret = callCmd(StringReplaceAll(m_emulator_info.adb.display, "[Adb]", adb_dir)); - if (display_ret) { - std::string pipe_str = display_ret.value(); - sscanf_s(pipe_str.c_str(), m_emulator_info.adb.display_regex.c_str(), - &m_emulator_info.adb.display_width, &m_emulator_info.adb.display_height); - } - else { - DebugTraceError("Get Display Error"); - return false; - } - } - DebugTrace("Handle:", m_handle, "Name:", m_emulator_info.name, "Type:", m_handle_type); - - if (m_handle != NULL) { - return true; + auto&& display_ret = callCmd(StringReplaceAll(m_emulator_info.adb.display, "[Adb]", adb_dir)); + if (display_ret) { + std::string pipe_str = display_ret.value(); + sscanf_s(pipe_str.c_str(), m_emulator_info.adb.display_regex.c_str(), + &m_emulator_info.adb.display_width, &m_emulator_info.adb.display_height); } else { + DebugTraceError("Get Display Error"); return false; } + + m_emulator_info.adb.click = StringReplaceAll(m_emulator_info.adb.click, "[Adb]", adb_dir); + m_emulator_info.adb.swipe = StringReplaceAll(m_emulator_info.adb.swipe, "[Adb]", adb_dir); + + m_emulator_info.adb.screencap = StringReplaceAll( + StringReplaceAll(m_emulator_info.adb.screencap, "[Adb]", adb_dir), + "[Filename]", m_screen_filename); + m_emulator_info.adb.pullscreen = StringReplaceAll( + StringReplaceAll(m_emulator_info.adb.pullscreen, "[Adb]", adb_dir), + "[Filename]", m_screen_filename); + + DebugTrace("Handle:", m_handle, "Name:", m_emulator_info.name); + return true; } std::optional asst::WinMacro::callCmd(const std::string& cmd, bool use_pipe) @@ -235,178 +199,65 @@ Point asst::WinMacro::randPointInRect(const Rect& rect) return Point(x, y); } -bool WinMacro::resizeWindow(int width, int height) -{ - if (m_handle_type != HandleType::Window || !::IsWindow(m_handle)) { - return false; - } - - RECT rect; - bool ret = ::GetWindowRect(m_handle, &rect); - - return ret && ::MoveWindow(m_handle, rect.left, rect.top, width / getScreenScale(), height / getScreenScale(), true); -} - -bool WinMacro::resizeWindow() -{ - return resizeWindow(m_width, m_height); -} - bool WinMacro::showWindow() { - if (m_handle_type != HandleType::Window || !::IsWindow(m_handle)) { - return false; - } - - bool ret = ::ShowWindow(m_handle, SW_RESTORE); - return ret; + return ::ShowWindow(m_handle, SW_RESTORE); } bool WinMacro::hideWindow() { - if (m_handle_type != HandleType::Window || !::IsWindow(m_handle)) { - return false; - } - return ::ShowWindow(m_handle, SW_HIDE); } -double WinMacro::getScreenScale() -{ - static double scale = 0; - if (scale == 0) { - // 获取窗口当前显示的监视器 - // 使用桌面的句柄. - HWND hWnd = ::GetDesktopWindow(); - HMONITOR hMonitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST); - - // 获取监视器逻辑宽度与高度 - MONITORINFOEX miex; - miex.cbSize = sizeof(miex); - GetMonitorInfo(hMonitor, &miex); - int cxLogical = (miex.rcMonitor.right - miex.rcMonitor.left); - int cyLogical = (miex.rcMonitor.bottom - miex.rcMonitor.top); - - // 获取监视器物理宽度与高度 - DEVMODE dm; - dm.dmSize = sizeof(dm); - dm.dmDriverExtra = 0; - EnumDisplaySettings(miex.szDevice, ENUM_CURRENT_SETTINGS, &dm); - int cxPhysical = dm.dmPelsWidth; - int cyPhysical = dm.dmPelsHeight; - - // 考虑状态栏大小,逻辑尺寸会比实际小 - double horzScale = ((double)cxPhysical / (double)cxLogical); - double vertScale = ((double)cyPhysical / (double)cyLogical); - - // 考虑状态栏大小,选择里面大的那个 - scale = std::max(horzScale, vertScale); - } - return scale; -} - bool WinMacro::click(const Point& p) { - if (m_handle_type != HandleType::Control || !::IsWindow(m_handle)) { - return false; - } - int x = p.x * m_control_scale; int y = p.y * m_control_scale; DebugTrace("Click, raw:", p.x, p.y, "corr:", x, y); - if (m_is_adb) { - std::string cur_cmd = StringReplaceAll(m_click_cmd, "[x]", std::to_string(x)); - cur_cmd = StringReplaceAll(cur_cmd, "[y]", std::to_string(y)); - return callCmd(cur_cmd, false).has_value(); - } - else { - LPARAM lparam = MAKELPARAM(x, y); - ::SendMessage(m_handle, WM_LBUTTONDOWN, MK_LBUTTON, lparam); - ::SendMessage(m_handle, WM_LBUTTONUP, 0, lparam); - return true; - } + std::string cur_cmd = StringReplaceAll(m_emulator_info.adb.click, "[x]", std::to_string(x)); + cur_cmd = StringReplaceAll(cur_cmd, "[y]", std::to_string(y)); + return callCmd(cur_cmd, false).has_value(); } bool WinMacro::click(const Rect& rect) { - if (m_handle_type != HandleType::Control || !::IsWindow(m_handle)) { - return false; - } - return click(randPointInRect(rect)); } bool asst::WinMacro::swipe(const Point& p1, const Point& p2, int duration) { - if (m_handle_type != HandleType::Control || !::IsWindow(m_handle)) { - return false; - } - int x1 = p1.x * m_control_scale; int y1 = p1.y * m_control_scale; int x2 = p2.x * m_control_scale; int y2 = p2.y * m_control_scale; DebugTrace("Swipe, raw:", p1.x, p1.y, p2.x, p2.y, "corr:", x1, y1, x2, y2); - if (m_is_adb) { - std::string cur_cmd = StringReplaceAll(m_swipe_cmd, "[x1]", std::to_string(x1)); - cur_cmd = StringReplaceAll(cur_cmd, "[y1]", std::to_string(y1)); - cur_cmd = StringReplaceAll(cur_cmd, "[x2]", std::to_string(x2)); - cur_cmd = StringReplaceAll(cur_cmd, "[y2]", std::to_string(y2)); - if (duration <= 0) { - cur_cmd = StringReplaceAll(cur_cmd, "[duration]", ""); - } - else { - cur_cmd = StringReplaceAll(cur_cmd, "[duration]", std::to_string(duration)); - } + std::string cur_cmd = StringReplaceAll(m_emulator_info.adb.swipe, "[x1]", std::to_string(x1)); + cur_cmd = StringReplaceAll(cur_cmd, "[y1]", std::to_string(y1)); + cur_cmd = StringReplaceAll(cur_cmd, "[x2]", std::to_string(x2)); + cur_cmd = StringReplaceAll(cur_cmd, "[y2]", std::to_string(y2)); + if (duration <= 0) { + cur_cmd = StringReplaceAll(cur_cmd, "[duration]", ""); + } + else { + cur_cmd = StringReplaceAll(cur_cmd, "[duration]", std::to_string(duration)); + } - return callCmd(cur_cmd, false).has_value(); - } - else { // TODO - return false; - } + return callCmd(cur_cmd, false).has_value(); } bool asst::WinMacro::swipe(const Rect& r1, const Rect& r2, int duration) { - if (m_handle_type != HandleType::Control || !::IsWindow(m_handle)) { - return false; - } - return swipe(randPointInRect(r1), randPointInRect(r2), duration); } -void asst::WinMacro::setControlScale(double scale) +void asst::WinMacro::setControlScale(double scale) noexcept { m_control_scale = scale; - - //else { - // if (m_is_adb) { - // m_control_scale = scale * scale * m_emulator_info.adb.display_width / Configer::WindowWidthDefault; - // } - // else { - // m_control_scale = scale / getScreenScale(); - // } - //} } - -Rect WinMacro::getWindowRect() -{ - if (!::IsWindow(m_handle)) { - return Rect(); - } - RECT rect; - bool ret = ::GetWindowRect(m_handle, &rect); - if (!ret) { - return Rect(); - } - return Rect{ rect.left, rect.top, - static_cast((rect.right - rect.left) * getScreenScale()), - static_cast((rect.bottom - rect.top) * getScreenScale()) }; -} -std::pair asst::WinMacro::getAdbDisplaySize() +std::pair asst::WinMacro::getDisplaySize() { static std::pair size = std::make_pair(m_emulator_info.adb.display_width, m_emulator_info.adb.display_height); return size; @@ -414,53 +265,12 @@ std::pair asst::WinMacro::getAdbDisplaySize() //return std::make_pair(m_emulator_info.adb.display_width, m_emulator_info.adb.display_height); } -cv::Mat WinMacro::getImage(const Rect& rect) +cv::Mat asst::WinMacro::getImage() { - if (m_handle_type != HandleType::View || !::IsWindow(m_handle)) { - return cv::Mat(); + if (callCmd(m_emulator_info.adb.screencap, false).has_value() + && callCmd(m_emulator_info.adb.pullscreen, false).has_value()) { + return cv::imread(m_screen_filename); } - HDC pDC;// 源DC - pDC = ::GetDC(m_handle);//获取屏幕DC(0为全屏,句柄则为窗口) - int BitPerPixel = ::GetDeviceCaps(pDC, BITSPIXEL);//获得颜色模式 - HDC memDC;//内存DC - memDC = ::CreateCompatibleDC(pDC); - HBITMAP memBitmap, oldmemBitmap;//建立和屏幕兼容的bitmap - memBitmap = ::CreateCompatibleBitmap(pDC, rect.width, rect.height); - oldmemBitmap = (HBITMAP)::SelectObject(memDC, memBitmap);//将memBitmap选入内存DC - ::PrintWindow(m_handle, memDC, PW_CLIENTONLY); - - BITMAP bmp; - GetObject(memBitmap, sizeof(BITMAP), &bmp); - int nChannels = bmp.bmBitsPixel == 1 ? 1 : bmp.bmBitsPixel / 8; - cv::Mat dst_mat; - dst_mat.create(cv::Size(bmp.bmWidth, bmp.bmHeight), CV_MAKETYPE(CV_8U, nChannels)); - GetBitmapBits(memBitmap, bmp.bmHeight * bmp.bmWidth * nChannels, dst_mat.data); - - DeleteObject(memBitmap); - DeleteDC(memDC); - ReleaseDC(m_handle, pDC); - - /* - #ifdef LOG_TRACE - std::string filename = GetCurrentDir() + "\\print.bmp"; - cv::imwrite(filename, dst_mat); - #endif - */ - - return dst_mat; -} - -cv::Mat asst::WinMacro::getAdbImage() -{ - if (m_handle_type != HandleType::View || !::IsWindow(m_handle)) { - return cv::Mat(); - } - - if (m_is_adb) { - if (callCmd(m_screencap_cmd, false).has_value() && callCmd(m_pullscreen_cmd, false).has_value()) { - return cv::imread(m_adb_screen_filename); - } - } return cv::Mat(); } \ No newline at end of file diff --git a/MeoAssistance/WinMacro.h b/MeoAssistance/WinMacro.h index 9de6e9f233..924313cdc4 100644 --- a/MeoAssistance/WinMacro.h +++ b/MeoAssistance/WinMacro.h @@ -16,47 +16,28 @@ namespace asst { class WinMacro { public: - WinMacro(const EmulatorInfo& info, HandleType type); + WinMacro(const EmulatorInfo& info); ~WinMacro() = default; bool captured() const noexcept; - bool resizeWindow(int Width, int Height); - bool resizeWindow(); // by configer bool showWindow(); bool hideWindow(); bool click(const Point& p); bool click(const Rect& rect); bool swipe(const Point& p1, const Point& p2, int duration = 0); bool swipe(const Rect& r1, const Rect& r2, int duration = 0); - void setControlScale(double scale); - [[ deprecated ]] cv::Mat getImage(const Rect& rect); // 通过Win32 Api对窗口截图 - cv::Mat getAdbImage(); // 通过Adb截图,会高清一点,但是比较慢(通过adb pull出来,有io操作) - Rect getWindowRect(); - std::pair getAdbDisplaySize(); - const EmulatorInfo& getEmulatorInfo() const noexcept { return m_emulator_info; } - const HandleType& getHandleType() const noexcept { return m_handle_type; } - - static double getScreenScale(); + void setControlScale(double scale) noexcept; + cv::Mat getImage(); // 通过Adb截图,会高清一点,但是比较慢(通过adb pull出来,有io操作) + std::pair getDisplaySize(); private: bool findHandle(); std::optional callCmd(const std::string& cmd, bool use_pipe = true); Point randPointInRect(const Rect& rect); - const EmulatorInfo m_emulator_info; - const HandleType m_handle_type; - HWND m_handle = NULL; - bool m_is_adb = false; - static bool m_is_adb_connect; - std::string m_click_cmd; // adb点击命令,不是adb的句柄用不到这个 - std::string m_swipe_cmd; // adb滑动命令,不是adb的句柄用不到这个 - std::string m_screencap_cmd; // adb截图命令,不是adb的句柄用不到这个 - std::string m_pullscreen_cmd; // adb拉取截图命令,不是adb的句柄用不到这个 - const std::string m_adb_screen_filename; + EmulatorInfo m_emulator_info; + HWND m_handle = nullptr; std::minstd_rand m_rand_engine; - int m_width = 0; - int m_height = 0; - //int m_x_offset = 0; - //int m_y_offset = 0; - double m_control_scale = 1; + double m_control_scale = 1.0; + const std::string m_screen_filename; }; } diff --git a/Tools/TestCaller/main.cpp b/Tools/TestCaller/main.cpp index c23b8cb9de..cad3909d9b 100644 --- a/Tools/TestCaller/main.cpp +++ b/Tools/TestCaller/main.cpp @@ -36,11 +36,6 @@ int main(int argc, char** argv) return 0; } -void test_swipe(Assistance* ptr) -{ - AsstTestSwipe(ptr, 2500, 300, 100, 300); -} - void debug_task(Assistance* ptr) { AsstDebugTask(ptr); diff --git a/include/AsstCaller.h b/include/AsstCaller.h index 897fff7e09..0c44f15799 100644 --- a/include/AsstCaller.h +++ b/include/AsstCaller.h @@ -23,8 +23,6 @@ extern "C" { MEOAPI_PORT bool AsstDebugTask(asst::Assistance* p_asst); MEOAPI_PORT bool CheckVersionUpdate(char* tag_buffer, int tag_bufsize, char* html_url_buffer, int html_bufsize, char* body_buffer, int body_bufsize); - - MEOAPI_PORT bool AsstTestSwipe(asst::Assistance* p_asst, int x1, int y1, int x2, int y2); #ifdef __cplusplus } #endif \ No newline at end of file diff --git a/resource/config.json b/resource/config.json index 0dbd7c09e2..133f419ca2 100644 --- a/resource/config.json +++ b/resource/config.json @@ -8,16 +8,12 @@ "printWindow": true, "printWindow_Doc": "鎴浘鍔熻兘锛氬紑鍚悗姣忔缁撶畻鐣岄潰浼氭埅鍥惧埌screenshot鐩綍涓嬨倀rue-寮鍚紝false-鍏抽棴锛岄粯璁rue", "printWindowDelay": 3000, - "printWindowDelay_Doc": "鎴浘寤舵椂锛氭瘡娆″埌缁撶畻鐣岄潰锛屾帀钀界墿鍝佷笉鏄竴娆℃у嚭鏉ョ殑锛屾湁涓姩鐢伙紝鎵浠ラ渶瑕佺瓑涓浼氬啀鎴浘銆傚崟浣嶆绉掞紝榛樿3000", - "printWindowCropOffset": 5, "printWindowCropOffset_Doc": "鎴浘棰濆瑁佸壀锛氬啀棰濆鎶婅竟妗嗚鍑忔帀涓鍦堬紝涓嶇劧浼侀箙鐗╂祦鏈夊彲鑳借瘑鍒笉鍑烘潵銆傚崟浣嶅儚绱狅紝榛樿5", "controlDelayRange": [ 0, 0 ], "controlDelayRange_Doc": "鐐瑰嚮闅忔満寤舵椂锛氭瘡娆$偣鍑绘搷浣滀細杩涜闅忔満寤舵椂锛岄檷浣庡皝鍙烽闄╋紙濂藉儚涔熸病鍚杩囪皝琚皝鍙风殑锛夈傛牸寮忎负 [ 鏈灏忓欢鏃, 鏈澶у欢鏃 ]锛屽崟浣嶄负姣銆備緥濡傛兂璁剧疆3~5绉掑欢鏃讹紝鍗充慨鏀逛负[ 3000, 5000 ]锛岄粯璁0~0", - "ocrGpuIndex": -1, - "ocrGpuIndex_Doc": "OcrLite浣跨敤GPU缂栧彿锛-1(浣跨敤CPU)/0(浣跨敤GPU0)/1(浣跨敤GPU1)/...锛孏PU閫夋嫨澶辫触鏃讹紝鍒欎娇鐢–PU杩涜璁$畻銆傞粯璁-1", "ocrThreadNumber": 4, "ocrThreadNumber_Doc": "OcrLite绾跨▼鏁伴噺銆傞粯璁4" }, @@ -25,42 +21,13 @@ "dormThreshold": 0.3, "dormThreshold_Doc": "瀹胯垗蹇冩儏鐧惧垎姣旈槇鍊硷紝蹇冩儏鐧惧垎姣斿皬浜庤鍊肩殑骞插憳浼氳鏀捐繘瀹胯垗銆傚彇鍊艰寖鍥(0, 1.0)锛岄粯璁0.5" }, - "recruitOcrReplace": [ - [ "娌嚮", "鐙欏嚮" ], - [ "娉嚮", "鐙欏嚮" ], - [ "閮藉嚭", "杈撳嚭" ], - [ "閮戒换", "杈撳嚭" ] - ], - "infrastOcrReplace": [ - [ "铔囧眳绠", "铔囧睜绠" ], - [ "鍙背", "鍙ょ背" ], - [ "鑺傝崏", "鑻囪崏" ], - [ "绮瑰叞", "姊撳叞" ], - [ "鑹句笣鑿滃皵", "鑹句笣榛涘皵" ], - [ "鑹句笣鑾卞皵", "鑹句笣榛涘皵" ], - [ "锛屾枒鐐", "鏂戠偣" ] - ], - "handle_Doc": "涓嬮潰鐨勫拰妯℃嫙鍣ㄧ獥鍙f崟鑾烽昏緫鏈夊叧锛屼笉闇瑕佷慨鏀", - "handle": { + "emulator_Doc": "涓嬮潰鐨勫拰妯℃嫙鍣ㄧ獥鍙f崟鑾烽昏緫鏈夊叧锛屼笉闇瑕佷慨鏀", + "emulator": { "BlueStacks": { - "window": [ - { - "class": "BS2CHINAUI", - "window": "BlueStacks App Player" - } - ], - "view": [ - { - "class": "BS2CHINAUI", - "window": "BlueStacks App Player" - } - ], - "control": [ - { - "class": "BS2CHINAUI", - "window": "BlueStacks App Player" - } - ], + "handle": { + "class": "BS2CHINAUI", + "window": "BlueStacks App Player" + }, "adb": { "path": "[EmulatorPath]Engine\\ProgramFiles\\HD-Adb.exe", "connect": "[Adb] connect 127.0.0.1:5555", @@ -70,31 +37,13 @@ "displayRegex": "cur=%dx%d", "screencap": "[Adb] -s 127.0.0.1:5555 shell screencap /sdcard/meo_screen.png", "pullscreen": "[Adb] -s 127.0.0.1:5555 pull /sdcard/meo_screen.png [Filename]" - }, - "xOffset": 11, - "yOffset": 46, - "rightOffset": 11, - "bottomOffset": 10 + } }, "MuMuEmulator": { - "window": [ - { - "class": "Qt5QWindowIcon", - "window": "鏄庢棩鏂硅垷 - MuMu妯℃嫙鍣" - } - ], - "view": [ - { - "class": "Qt5QWindowIcon", - "window": "鏄庢棩鏂硅垷 - MuMu妯℃嫙鍣" - } - ], - "control": [ - { - "class": "Qt5QWindowIcon", - "window": "鏄庢棩鏂硅垷 - MuMu妯℃嫙鍣" - } - ], + "handle": { + "class": "Qt5QWindowIcon", + "window": "鏄庢棩鏂硅垷 - MuMu妯℃嫙鍣" + }, "adb": { "path": "[EmulatorPath]..\\vmonitor\\bin\\adb_server.exe", "connect": "[Adb] connect 127.0.0.1:7555", @@ -104,11 +53,7 @@ "displayRegex": "cur=%dx%d", "screencap": "[Adb] -s 127.0.0.1:7555 shell screencap /sdcard/meo_screen.png", "pullscreen": "[Adb] -s 127.0.0.1:7555 pull /sdcard/meo_screen.png [Filename]" - }, - "xOffset": 0, - "yOffset": 36, - "rightOffset": 0, - "bottomOffset": 0 + } } }, "tasks_Doc": "涓嬮潰鐨勫拰浠诲姟闃熷垪鎵ц閫昏緫鏈夊叧锛屼笉闇瑕佷慨鏀", @@ -655,5 +600,20 @@ "next": [ ] } - } + }, + "recruitOcrReplace": [ + [ "娌嚮", "鐙欏嚮" ], + [ "娉嚮", "鐙欏嚮" ], + [ "閮藉嚭", "杈撳嚭" ], + [ "閮戒换", "杈撳嚭" ] + ], + "infrastOcrReplace": [ + [ "铔囧眳绠", "铔囧睜绠" ], + [ "鍙背", "鍙ょ背" ], + [ "鑺傝崏", "鑻囪崏" ], + [ "绮瑰叞", "姊撳叞" ], + [ "鑹句笣鑿滃皵", "鑹句笣榛涘皵" ], + [ "鑹句笣鑾卞皵", "鑹句笣榛涘皵" ], + [ "锛屾枒鐐", "鏂戠偣" ] + ] }