如何在C++中模拟按键

llk*_*llk 20 c++ windows keyboard input

我想知道如何在C++中模拟一个关键的抑郁症.如有代码,当我运行程序时,它按下字母"W"键.我不想在控制台窗口中显示它我只想在每次单击文本字段时显示"W"键.谢谢!

注意:我不是想制作垃圾邮件发送者.

Gre*_*ill 21

看起来你想要使用SendInput()或者keybd_event()(这是做同样事情的旧方式).

  • @Shadowalker:为什么在刚刚讨论过关于`keybd_event()`被弃用(意思是"不应再使用")并被`SendInput`取代之后,为什么你选择使用它? (6认同)
  • 不推荐使用`keybd_event`,`SendInput`是*方式. (2认同)
  • @CodyGray `keybd_event()` 通常被认为比 `SendInput()` 更容易使用。它永远不应该用于专业质量的代码,但我可以理解为什么初学者仍然会在业余项目中使用它。 (2认同)

小智 7

首先 - 找到有关如何在 C++ 中使用 sendinput 函数的答案。

看代码部分:

// ...
    INPUT ip;
// ...
    // Set up a generic keyboard event.
    ip.type = INPUT_KEYBOARD;
    ip.ki.wScan = 0; // hardware scan code for key
    ip.ki.time = 0;
    ip.ki.dwExtraInfo = 0;

    // Press the "A" key
    ip.ki.wVk = 0x41; // virtual-key code for the "a" key
    ip.ki.dwFlags = 0; // 0 for key press
    SendInput(1, &ip, sizeof(INPUT));
// ...
Run Code Online (Sandbox Code Playgroud)

我不明白这个神奇数字0x41是从哪里来的。

转到SendInput 文档页面。还是不明白哪来的0x41

转到INPUT文档,然后从那里转到KEYBDINPUT文档。仍然没有魔法0x41

最后去Virtual-Key Codes页面,了解到微软已经给了 Ctrl (VK_CONTROL), Alt (VK_MENU), F1-F24 (VK_F1 - VK_F24, where are 13-24 is a secret) 的名字,但是忘了命名字符. 实际字符有代码 ( 0x41-0x5A),但没有VK_A - VK_Z我在winuser.h标题中寻找的名称。