zoukankan      html  css  js  c++  java
  • qt 向窗口发送消息,键盘输入事件

    #include <windows.h>
    #include <QtDebug>
    #include <locale>
    #include <tchar.h>
    #include <string>
    
        HWND hwnd = (HWND)0x000A069C;
    
        // https://docs.microsoft.com/zh-cn/windows/win32/winmsg/about-messages-and-message-queues
        // 这里使用W,发送的是unicode,而不是用的A
        QString str = "Ajanuw 中文";
        for(QChar c: str){
            // int v_latin = c.toLatin1(); // 不能转中文
            int v_latin = c.unicode(); // 对应的code码
            qDebug() << v_latin;
            SendMessageW(hwnd,WM_IME_CHAR,(WPARAM)v_latin,(LPARAM)v_latin);
        }
    

    发送组合键

    keybd_event

    // ctrl+tap的组合键,然后抬起tab, ctrl
    keybd_event(VK_CONTROL, 0, 0, 0);
    keybd_event(VK_TAB, 0, 0, 0);
    
    keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0);
    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
    

    SendInput

            BringWindowToTop(hwnd);
    
            INPUT ip;
            ip.type = INPUT_KEYBOARD; // 输入事件的类型
            ip.ki.wScan = 0;
            ip.ki.time = 0;
            ip.ki.dwExtraInfo = 0;
    
            ip.ki.wVk = 0x41; // 按键 "A"
            ip.ki.dwFlags = 0;
            SendInput(1, &ip, sizeof(INPUT));
    
            // 抬起按键
            Sleep(30);
            ip.ki.dwFlags = KEYEVENTF_KEYUP;
            SendInput(1, &ip, sizeof(INPUT));
    

    SendInput 组合键,下面的程序先按下ctrl+tab的组合键,然后依次松开了tap和ctrl键后,在按下A键,再松开A键

            BringWindowToTop(hwnd);
    
            INPUT ip;
            ip.type = INPUT_KEYBOARD; // 输入事件的类型
            ip.ki.wScan = 0;
            ip.ki.time = 0;
            ip.ki.dwExtraInfo = 0;
    
            // 按下ctrl
            ip.ki.wVk = VK_CONTROL;
            SendInput(1, &ip, sizeof(INPUT));
    
            // 按下 tab
            ip.ki.wVk = VK_TAB;
            SendInput(1, &ip, sizeof(INPUT));
    
            // 抬起tab
            Sleep(30);
            ip.ki.wVk = VK_TAB;
            ip.ki.dwFlags = KEYEVENTF_KEYUP;
            SendInput(INPUT_KEYBOARD, &ip, sizeof(INPUT));
    
            // 抬起ctrl
            Sleep(30);
            ip.ki.wVk = VK_CONTROL;
            ip.ki.dwFlags = KEYEVENTF_KEYUP;
            SendInput(INPUT_KEYBOARD, &ip, sizeof(INPUT));
    
            Sleep(30);
            // 按下A
            ip.ki.wVk = 0x41;
            ip.ki.dwFlags = 0;
            SendInput(1, &ip, sizeof(INPUT));
    
            //  抬起A
            Sleep(30);
            ip.ki.dwFlags = KEYEVENTF_KEYUP;
            SendInput(1, &ip, sizeof(INPUT));
    
  • 相关阅读:
    .NET Framework 1.13.5 版本安装包下载链接
    可遇不可求的Question之MYSQL获取自增ID的四种方法篇
    20110917 晴
    北海道 7天6夜 自助游
    想你了
    猫忘带电话了
    [转载经验] 探亲签证申请
    帮忙打印
    打印机
    20110910 晴
  • 原文地址:https://www.cnblogs.com/ajanuw/p/12841382.html
Copyright © 2011-2022 走看看