QT5没有句柄的输入框发送文字信息,模拟鼠标键盘操作外部程序


问题描述:

void sendMsg(QString msg)
{
    for(int i=0;i<msg.size();i++)
    {
        INPUT input[2];
        memset(input, 0, 2 * sizeof(INPUT));
        input[0].type = INPUT_KEYBOARD;
        input[0].ki.wVk = 0;
        input[0].ki.wScan = msg.at(i).unicode();
        input[0].ki.dwFlags = KEYEVENTF_UNICODE;//KEYEVENTF_UNICODE;
        SendInput(1, input, sizeof(INPUT));
        input[1].type = INPUT_KEYBOARD;
        input[1].ki.wVk = 0;
        input[1].ki.wScan = msg.at(i).unicode();
        input[1].ki.dwFlags = KEYEVENTF_KEYUP|KEYEVENTF_UNICODE;//KEYEVENTF_UNICODE;
        SendInput(1, input+1, sizeof(INPUT));
    }

从网上找到的方法,向光标所在的地方发送消息,有些系统会丢失数据,比如Hwdes66s,会显示为Hwdes6s,少了一个数字。不清楚为什么。

 

 

后来用的另一个方式,模拟复制粘贴按键。

QClipboard *clipboard = QApplication::clipboard();  
clipboard->setText("11111");
 keybd_event(VK_CONTROL,0,0,0);
    ::SendMessage((HWND)hwnd,WM_KEYDOWN,0x41,0x001E0001);
    ::SendMessage((HWND)hwnd,WM_KEYUP,0x41,0xC01E0001);
    ::SendMessage((HWND)hwnd,WM_KEYDOWN,0x56,0x002F0001);	
    ::SendMessage((HWND)hwnd,WM_KEYUP,0x56,0xC02F0001);
    keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
clipboard->clear();

中途也遇到过问题,粘贴执行以后,输入框会一直指向剪切板,当剪切板清楚数据以后,输入框也会变成空白。所以换了用sendMessage发送键盘按键。目前是成功了,具体为啥,咱也不懂,不知道问谁。。。。。。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值