将字符串传递给SendInput()(C ++)

时间:2018-03-27 01:54:51

标签: c++ windows

由于不方便,我已为此项目转到C#,无需进一步评论

我在开发C ++花絮期间遇到了一个问题,它会根据用户输入发送击键。

在尝试发送实际的击键时,我遇到了一个错误。

<error-type> message

我已在下方发布了一个代码段。非常感谢任何帮助。

/*Code snippet from program that handles actual keypresses*/
string message;
getline(cin, message);

SendInput(message);

2 个答案:

答案 0 :(得分:3)

查看SendInput

的文档

您必须设置INPUT结构,然后传递INPUT数组。

#include <iostream>
#include <string>
#include <vector>
#include <Windows.h>

int main()
{
    std::wstring msg = L"ΨΦΩ, ελη, ABC, abc, 123";
    //or std::string msg = "ABCD - abcd - 1234";

    std::vector<INPUT> vec;
    for(auto ch : msg)
    {
        INPUT input = { 0 };
        input.type = INPUT_KEYBOARD;
        input.ki.dwFlags = KEYEVENTF_UNICODE;
        input.ki.wScan = ch;
        vec.push_back(input);

        input.ki.dwFlags |= KEYEVENTF_KEYUP;
        vec.push_back(input);
    }

    //Find a notepad window or another window for send
    HWND hwnd = FindWindow("Notepad", 0);
    if (hwnd)
        SetForegroundWindow(hwnd);
    else
        std::cout << "no window!\n";

    SendInput(vec.size(), vec.data(), sizeof(INPUT));
    return 0;
}

请注意,在Windows中不推荐使用ANSI。此代码std::string仅适用于ASCII字符。对于UNICODE兼容性,请使用std::wstring

答案 1 :(得分:0)

检查出来:SendInput() Keyboard letters C/C++

你真的只能将整个字符串传递给它。