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));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM