问题描述:
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发送键盘按键。目前是成功了,具体为啥,咱也不懂,不知道问谁。。。。。。