【问题标题】:Simulate Keyboard Button Press for arrow keys模拟键盘按钮按下箭头键
【发布时间】:2018-11-14 21:03:17
【问题描述】:

我设置了 2 个函数来模拟键盘按钮按下

void KeyboardButtonDown(DWORD a)
{
    INPUT Input = { 0 };
    // Set up a generic keyboard event.
    Input.type    = INPUT_KEYBOARD;
    Input.ki.wVk  = a; 
    SendInput(1, &Input, sizeof(INPUT));
}

void KeyboardButtonUp(DWORD a)
{
    INPUT Input = { 0 };
    Input.type        = INPUT_KEYBOARD;
    Input.ki.dwFlags  = KEYEVENTF_KEYUP;
    Input.ki.wVk      = a;
    SendInput(1, &Input, sizeof(INPUT));
}

它在大多数情况下都有效,但是在模拟箭头键时在某些应用程序中失败,作为一个简单的示例

KeyboardButtonDown(VK_LEFT);
Sleep(50);
KeyboardButtonUp(VK_LEFT);
Sleep(50);

它可以在记事本中使用,但在玩游戏时它什么也不做。我已经将游戏中的控件映射为使用其他键,然后它就可以正常工作了。

我在这里做错了什么?

【问题讨论】:

  • 这个问题每周都会被问很多次。尝试搜索所有其他被询问的时间。
  • 游戏有一个简单的方法来保护自己免受多人作弊,他们使用原始输入。欺骗他们的唯一方法是在驱动程序级别注入键盘输入,这不是默认键盘驱动程序所采用的技术。更换它并不经常完成。

标签: c++ winapi sendinput


【解决方案1】:

如果接收应用程序使用直接输入,您必须发送扫描码而不是虚拟键码。

【讨论】:

  • 在这种情况下,查看MapVirtualKey/Ex() 以从虚拟键获取扫描码
猜你喜欢
  • 2016-10-07
  • 1970-01-01
  • 2013-03-07
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
相关资源
最近更新 更多