C++ 将字符串传递到SendInput()(C+;+;)

C++ 将字符串传递到SendInput()(C+;+;),c++,windows,C++,Windows,由于不便,我已搬到C#进行此项目,无需进一步评论 我在C++开发过程中遇到了一个问题,它基于用户输入发送按键。 在尝试发送实际的击键时,我遇到了一个错误 <error-type> message 看看这个: 您不能只将整个字符串传递给它。请检查以下内容: 您不能只将整个字符串传递给它。请查看文档以了解详细信息 您必须设置INPUT结构,然后传递INPUT数组 #include <iostream> #include <string> #include <

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

<>我在C++开发过程中遇到了一个问题,它基于用户输入发送按键。 在尝试发送实际的击键时,我遇到了一个错误

<error-type> message
看看这个:

您不能只将整个字符串传递给它。

请检查以下内容:


您不能只将整个字符串传递给它。

请查看文档以了解详细信息

您必须设置
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;
}
#包括
#包括
#包括
#包括
int main()
{
std::wstring msg=L“ψΦΩ,ελη,ABC,ABC,123”;
//或std::string msg=“ABCD-ABCD-1234”;
std::vec;
用于(自动频道:msg)
{
输入={0};
input.type=输入\键盘;
input.ki.dwFlags=KEYEVENTF_UNICODE;
input.ki.wScan=ch;
向量推回(输入);
input.ki.dwFlags |=KEYEVENTF_KEYUP;
向量推回(输入);
}
//查找记事本窗口或其他发送窗口
HWND HWND=FindWindow(“记事本”,0);
如果(hwnd)
setforegroundindow(hwnd);
其他的

std::cout查看相关文档

您必须设置
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;
}
#包括
#包括
#包括
#包括
int main()
{
std::wstring msg=L“ψΦΩ,ελη,ABC,ABC,123”;
//或std::string msg=“ABCD-ABCD-1234”;
std::vec;
用于(自动频道:msg)
{
输入={0};
input.type=输入\键盘;
input.ki.dwFlags=KEYEVENTF_UNICODE;
input.ki.wScan=ch;
向量推回(输入);
input.ki.dwFlags |=KEYEVENTF_KEYUP;
向量推回(输入);
}
//查找记事本窗口或其他发送窗口
HWND HWND=FindWindow(“记事本”,0);
如果(hwnd)
setforegroundindow(hwnd);
其他的

std::cout@FredLarson谢谢你的回答,但我得到了另一个错误作为回报。在这种情况下,“函数调用中的参数太少”你需要阅读。恐怕不是那么简单。错误字面上是“message”?@immibis确实如此。与经典的“第42行的语法错误”相比更上一层楼@Fredrarson感谢您的回答,但我得到了另一个错误作为回报。在这种情况下,“函数调用中的参数太少”您需要阅读。恐怕不是那么简单。错误字面上是“message”?@immibis。与经典的“第42行语法错误”一样这是正确的,但是示例一次发送一个
INPUT
,它应该发送一个数组。这是正确的,但是示例一次发送一个
INPUT
,它应该发送一个数组。请注意
KEYEVENTF\u UNICODE
需要UTF-16输入,并为UTF-16代理项对分离
INPUT
下/上对。如果若要发送非ASCII字符串,您需要将其转换为此格式。@RemyLebeau我再次混淆了ASCII和ANSI。我认为答案现在已更正。感谢您的回答。但是,我现在收到以下错误:“'input'未在此范围内声明”,并且'ch'未命名类型”@Koi您使用的是C++11还是更高版本?如果不是,请将转换为正常的
for
循环:
for(size_t i=0;i
请注意,
KEYEVENTF\u UNICODE
需要UTF-16输入,并为UTF-16代理项对分离
input
down/up对。如果您需要发送非ASCII字符串,则需要将其转换为此格式。@RemyLebeau我再次混淆了ASCII和ANSI。我认为答案现在已经更正。谢谢您的回答。但是,我不知道现在获取以下错误:“'input'未在此范围内声明”并且'ch'未命名类型“@Koi您正在使用C++11或更高版本吗?如果没有,请将更改为正常的
for
循环:
for(size_t i=0;i