簡體   English   中英

INPUT / vector數組不適用於SendInput

[英]Array of INPUT / vector doesn't work with SendInput

所以我正在嘗試使用SendInput來同時發送多個按鍵/按鍵釋放。 數組和向量具有正確的信息,但由於某種原因,它只是沒有按任何東西。 為什么?

我嘗試從數組和向量中選擇一個元素,並使用SendInput按下/釋放鍵,它工作正常。

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

class movement
{
public:
    std::vector<INPUT> inputs;

    void Key(std::vector<INPUT> INPUTkeys)
    {
        INPUT * inputs = new INPUT[INPUTkeys.size()];

        for (int i = 0; i < INPUTkeys.size(); i++)
            inputs[i] = INPUTkeys.at(i);

        SendInput(INPUTkeys.size(), inputs, sizeof(inputs));

        delete[] inputs;
    }

    void prepareInput(INPUT &input, int key, bool down)
    {
        input.type = INPUT_KEYBOARD;
        input.ki.dwExtraInfo = NULL;
        input.ki.time = NULL;
        input.ki.wScan = NULL;
        input.ki.wVk = key;

        if (down)
            input.ki.dwFlags = 0;
        else
            input.ki.dwFlags = KEYEVENTF_KEYUP;
    }
};

movement oMovement;

void main()
{
    while (!GetAsyncKeyState(VK_SPACE))
        Sleep(1);

    std::vector<INPUT> inputs;

    INPUT input;

    oMovement.prepareInput(input, 'U', true);
    inputs.push_back(input);
    oMovement.prepareInput(input, 'S', true);
    inputs.push_back(input);
    oMovement.prepareInput(input, 'X', true);
    inputs.push_back(input);

    oMovement.Key(inputs);
    inputs.clear();

    oMovement.prepareInput(input, 'U', false);
    inputs.push_back(input);
    oMovement.prepareInput(input, 'S', false);
    inputs.push_back(input);
    oMovement.prepareInput(input, 'X', false);
    inputs.push_back(input);

    oMovement.Key(inputs);
    inputs.clear();

    system("pause");
}

您將指針的大小作為第三個參數傳遞給SendInput而它應該是INPUT結構的大小。 您還應檢查結果(至少在調試模式下):

void Key(std::vector<INPUT> & INPUTkeys) // pass by reference to prevent copying
{
   ::UINT const sent_events_count
   {
       SendInput
       (
           static_cast<::UINT>(INPUTkeys.size())
       ,   INPUTkeys.data()
       ,   sizeof ::INTPUT
       )
   };
   assert(INPUTkeys.size() == sent_events_count);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM