首先,先把这些头文件包进去
#include<Textstor.h> #include<string> #include<locale> #include<codecvt> #include<tchar.h> #include<iostream> #include<cstring> using namespace std;
然后使用下面的代码,就可以在系统任意窗口中的光标闪烁处设置文本了
//在系统光标处设置文本 HWND hwnd = ::GetForegroundWindow(); string text="中文测试代码"; std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter; wstring tst=converter.from_bytes(text); const wchar_t *final_text=tst.data(); for(int i=0;final_text[i]!='\0';i++) { SendMessage(hwnd, WM_CHAR,final_text[i], 0); }
上面代码中,这三行
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter; wstring tst=converter.from_bytes(text); const wchar_t *final_text=tst.data();
是将string转为wchar_t*,这样输出的中文不会是乱码,如果不需要输出中文,可以直接使用下面的方式
const string final_text="This is a English text"; for(auto i:final_text) SendMessage(hwnd, WM_CHAR,i, 0);
因为SendInput与SendMessage比较类似,在这里放出模拟按键的代码:
模拟单个按键
INPUT inputs[2] = {}; //1个按键对应2大小,这里模拟按下'd' ZeroMemory(inputs, sizeof(inputs)); inputs[0].type = INPUT_KEYBOARD; //声明为按键事件,也可以声明为鼠标事件模拟鼠标左右键 inputs[0].ki.wVk = 'D'; inputs[1].type = INPUT_KEYBOARD; inputs[1].ki.wVk = 'D'; inputs[1].ki.dwFlags = KEYEVENTF_KEYUP;//不是很明白这句话的意思,照官方例子抄的,应该是设置触发方式 UINT uSent = SendInput(ARRAYSIZE(inputs), inputs, sizeof(INPUT)); if (uSent != ARRAYSIZE(inputs)) { //这里是处理异常的地方,也可以不需要 // OutputString(L"SendInput failed: 0x%x\n", HRESULT_FROM_WIN32(GetLastError())); }
模拟按下组合键ctrl+s
INPUT inputs[4] = {}; ZeroMemory(inputs, sizeof(inputs)); inputs[0].type = INPUT_KEYBOARD; inputs[0].ki.wVk = VK_CONTROL;//所有按键对应的宏可以进入声明处查看 inputs[1].type = INPUT_KEYBOARD; inputs[1].ki.wVk = 'S'; inputs[2].type = INPUT_KEYBOARD; inputs[2].ki.wVk = VK_CONTROL; inputs[2].ki.dwFlags = KEYEVENTF_KEYUP; inputs[3].type = INPUT_KEYBOARD; inputs[3].ki.wVk = 'S'; inputs[3].ki.dwFlags = KEYEVENTF_KEYUP; UINT uSent = SendInput(ARRAYSIZE(inputs), inputs, sizeof(INPUT)); if (uSent != ARRAYSIZE(inputs)) { // OutputString(L"SendInput failed: 0x%x\n", HRESULT_FROM_WIN32(GetLastError())); }
如果本文对你有帮助,可以资助一下作者。
-----------------------------------------------------------------微信------------------------------------------------------------------
-----------------------------------------------------------------支付宝---------------------------------------------------------------