[英]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.