c++ - SendInput (C++) 不起作用

标签 c++ windows winapi

返回值为 4,并且我在管理模式下运行 Visual Studio,因此权限应该没问题。但我没有看到任何输入的内容。有什么帮助吗?我使用的是 Windows 7 x64。

INPUT input[4];

input[0].type = INPUT_KEYBOARD;
input[0].ki.wVk = 0;
input[0].ki.wScan = 'a';
input[0].ki.dwFlags = KEYEVENTF_SCANCODE;
input[0].ki.time = 0;
input[0].ki.dwExtraInfo = 0;

input[1].type = INPUT_KEYBOARD;
input[1].ki.wVk = 0;
input[1].ki.wScan = 'a';
input[1].ki.dwFlags = KEYEVENTF_KEYUP | KEYEVENTF_SCANCODE;
input[1].ki.time = 0;
input[1].ki.dwExtraInfo = 0;

input[2].type = INPUT_KEYBOARD;
input[2].ki.wVk = 0;
input[2].ki.wScan = 'a';
input[2].ki.dwFlags = KEYEVENTF_SCANCODE;
input[2].ki.time = 0;
input[2].ki.dwExtraInfo = 0;

input[3].type = INPUT_KEYBOARD;
input[3].ki.wVk = 0;
input[3].ki.wScan = 'a';
input[3].ki.dwFlags = KEYEVENTF_KEYUP | KEYEVENTF_SCANCODE;
input[3].ki.time = 0;
input[3].ki.dwExtraInfo = 0;

int retval = SendInput(4, input, sizeof(INPUT));
if(retval > 0)
{
  wxLogDebug("SendInput sent %i", retval);
}
else
{
  wxLogError("Unable to send input commands. Error is: %i", GetLastError());
}

最佳答案

您需要为每个键发送 KeyDown 和 KeyUp 事件。
要发送 KeyUp 事件,请将 dwFlags 设置为 KEYEVENTF_KEYUP

此外,您需要使用 wVk 而不是 wScan。 (wScan 仅与 KEYEVENTF_UNICODE 一起使用)

关于c++ - SendInput (C++) 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2367521/

相关文章:

C++帮助类继承

windows - 如何从 Visual Studio 2010 安装程序运行 schtasks.exe?

c++ - 从 DevC++ 转向命令行编译

c++ - C++中退出进程的不同方式

c++ - 为什么 Qt 的 qHash() 没有 std::shared_ptr 的重载?

C++按值获取数组元素的索引

C++ Windows API - 如何检索字体缩放百分比

windows - GetProcAddress 不返回 LoadLibraryA 的真实地址

c++ - 如何捕获父进程中的Term操作信号?

linux - 使用 makefile.in 将 linux 源代码编译为 windows 7