lengshizai 2024-03-10 15:32 采纳率: 31.7%
浏览 111
已结题

C++多开自动化脚本后台键鼠模拟

问题如下:
想弄一个自动化脚本替我干活 前台的键鼠模拟我会
但是来回切屏切程序太过繁琐
收集一个 同时操纵多个记事本的模拟键鼠操作 能绑定程序的思路
最好附代码
想实现的目的是:

例如 同时操作多个记事本程序
记事本A 书写 123456
记事本B书写 abcdef
两个记事本程序之间互不干扰且同时进行

附代码并讲解

  • 写回答

19条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-10 15:32
    关注

    引自免费微信小程序:皆我百晓生

    为了实现您的需求,我们可以使用C++和Windows API来创建一个后台键鼠模拟脚本。下面是一个简化的示例代码框架,展示如何同时对两个记事本窗口进行独立的键鼠操作。由于实际编写完整的、功能完善的自动化脚本会比较复杂,并且涉及到查找窗口句柄、发送消息等多个步骤,以下仅为简化版的概念性代码片段:

    #include <windows.h>
    #include <iostream>
    
    // 定义窗口标题以找到对应的记事本窗口
    const wchar_t* NOTEBOOK_A_TITLE = L"记事本A";
    const wchar_t* NOTEBOOK_B_TITLE = L"记事本B";
    
    // 获取窗口句柄函数(根据窗口标题)
    HWND GetWindowHandle(const wchar_t* title) {
        HWND hWnd = FindWindow(NULL, title);
        if (hWnd == NULL) {
            std::cerr << "无法找到标题为\"" << title << "\"的窗口" << std::endl;
        }
        return hWnd;
    }
    
    // 发送键盘消息到指定窗口
    void SendKeys(HWND hWnd, const wchar_t* keys) {
        for (size_t i = 0; keys[i]; ++i) {
            // 转换字符到虚拟键码并发送
            WPARAM wParam = VkKeyScan(keys[i]);
            PostMessage(hWnd, WM_KEYDOWN, wParam & 0xFF, 0);
            PostMessage(hWnd, WM_KEYUP, wParam & 0xFF, 0);
            // 模拟按键间隔
            Sleep(50); 
        }
    }
    
    int main() {
        // 获取记事本窗口句柄
        HWND notebookA = GetWindowHandle(NOTEBOOK_A_TITLE);
        HWND notebookB = GetWindowHandle(NOTEBOOK_B_TITLE);
    
        // 确保窗口句柄有效
        if (notebookA && notebookB) {
            // 分别在两个记事本中写入内容
            SendKeys(notebookA, L"123456");
            SendKeys(notebookB, L"abcdef");
    
            // 添加必要的同步机制,确保同时进行(这里使用了Sleep,实际情况可能需要更复杂的同步)
            Sleep(1000);
    
            // 可选:发送回车键完成输入
            PostMessage(notebookA, WM_KEYDOWN, VK_RETURN, 0);
            PostMessage(notebookA, WM_KEYUP, VK_RETURN, 0);
            PostMessage(notebookB, WM_KEYDOWN, VK_RETURN, 0);
            PostMessage(notebookB, WM_KEYUP, VK_RETURN, 0);
        }
    
        return 0;
    }
    
    

    这段代码首先通过FindWindow函数获取到标题分别为“记事本A”和“记事本B”的两个记事本窗口的句柄。然后,我们定义了一个SendKeys函数向特定窗口发送键盘消息。最后,在main函数中分别向两个记事本窗口发送键入消息。

    请注意,这个示例没有包含精确的鼠标操作模拟以及窗口焦点切换逻辑,您需要进一步完善这些部分以满足实际需求。此外,模拟键鼠操作时需谨慎,以免对其他程序造成干扰或被误判为恶意行为。如果需要更复杂的交互,可以考虑使用如AutoIt等成熟的自动化工具。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月13日
  • 创建了问题 3月10日

悬赏问题

  • ¥15 软件工程用例图的建立(相关搜索:软件工程用例图|画图)
  • ¥15 如何在arcgis中导出拓扑关系表
  • ¥15 处理数据集文本挖掘代码
  • ¥15 matlab2017
  • ¥15 在vxWorks下TCP/IP编程,总是connect()报错,连接服务器失败: errno = 0x41
  • ¥15 AnolisOs7.9如何安装 Qt_5.14.2的运行库
  • ¥20 求:怎么实现qt与pcie通信
  • ¥50 前后端数据顺序不一致问题,如何解决?(相关搜索:数据结构)
  • ¥15 基于蒙特卡罗法的中介效应点估计代码
  • ¥15 罗技G293和UE5.3