• windows实现自动化按键


    1.选择目标窗口 获取窗口句柄

    void KeyPresser::selectWindow() {
        SetWinEventHook(EVENT_SYSTEM_FOREGROUND, EVENT_SYSTEM_FOREGROUND, NULL, WinEventProc, 0, 0, WINEVENT_OUTOFCONTEXT);
        selectedWindowLabel->setText("请点击目标窗口...");
    }
    
    void CALLBACK KeyPresser::WinEventProc(HWINEVENTHOOK hWinEventHook, DWORD event, HWND hwnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime) {
        if (event == EVENT_SYSTEM_FOREGROUND) {
            wchar_t windowTitle[256];
            GetWindowText(hwnd, windowTitle, 256);
            if (KeyPresser::instance) {
                KeyPresser::instance->targetHwnd = hwnd;
                KeyPresser::instance->selectedWindowLabel->setText(QString::fromWCharArray(windowTitle));
                UnhookWinEvent(hWinEventHook);
            }
        }
    }
    

    2. 向目标窗口发送按键消息

    
    void KeyPresser::pressKeys(int index) {
        if (targetHwnd) {
            int key = keyCombos[index]->currentData().toInt();
    
            DWORD dwVKFkeyData; // lParam 参数值
            WORD dwScanCode = MapVirtualKey(key, MAPVK_VK_TO_VSC); // 获取虚拟按键的键盘扫描码
    
            dwVKFkeyData = 1;
            dwVKFkeyData |= dwScanCode << 16;
            dwVKFkeyData |= 0 << 24;
            dwVKFkeyData |= 1 << 29;
            PostMessage(targetHwnd, WM_KEYDOWN, key, dwVKFkeyData);
    
            // 重置 dwVKFkeyData 以确保 WM_KEYUP 消息正确
            dwVKFkeyData = 1;
            dwVKFkeyData |= dwScanCode << 16;
            dwVKFkeyData |= 0 << 24;
            dwVKFkeyData |= 1 << 29;
            dwVKFkeyData |= 3 << 30;
            PostMessage(targetHwnd, WM_KEYUP, key, dwVKFkeyData);
        }
    }
    

    3. 成品展示

    image.png

    简介

    • KeyPresser 是一款免费的自动化按键工具,它可以与窗口交互,并支持后台运行, 无需保持被控窗口在前台运行。用户可以选择要操作的目标窗口,并通过勾选复选框来控制要发送哪些按键消息。可以从组合框中选择所需的按键,并在编辑框中输入时间间隔以控制按键发送之间的延迟。程序提供“开始”和“停止”按钮来启动和终止按键发送过程。

    成品下载

    https://www.progdomain.com/627/

    完整源代码下载

    https://download.csdn.net/download/wang161019/89547020

  • 相关阅读:
    基于streamlit的成绩展示平台
    计算机网络期末复习——简明扼要介绍考点及相关知识
    视频如何转换成音频?音视频转换,4个方法
    css line-height属性是什么
    jdk11使用反射创建实例对象
    实战Spring Boot集成quartz任务调度框架
    Servlet 实现上传文件
    Android项目---拼图小游戏(上)
    黑客技术-小白自学
    java--拼图游戏
  • 原文地址:https://blog.csdn.net/wang161019/article/details/140465927