【问题标题】:Simulating keypresses in Visual C++在 Visual C++ 中模拟按键
【发布时间】:2011-03-23 21:58:29
【问题描述】:

好的,所以我可能在这里完全找错了树,因为我在 Windows 编程方面不是最新的,但这里是。

我正在尝试在 Visual Studio 2010 的 C++ 项目中启动模拟按键。

基本上当程序从另一个应用程序接收到特定的代码字符串时(这一切都是通过许多 if 语句来工作的,虽然很乱但可以工作)

我需要它来执行与按键盘上的 control 和 s 相同的功能。

现在我找到的一些代码是这样的。

keybd_event(VK_LCONTROL,0,0,0); 
  keybd_event(bKey, 0, 0, 0);


   keybd_event(bKey, 0, KEYEVENTF_KEYUP, 0);
  keybd_event(VK_LCONTROL,0,KEYEVENTF_KEYUP,0); 

其中 bKey 是 S 的适当 ASCII 代码,它让我无法理解,但仍然与这篇文章无关。

按照我的理解应该是这样的

Push Control down
Push S down
Release S
Release Control.

但它似乎没有这样做,它似乎只是按下并释放 S,从而根据当时是否有文本输入来适当地打印 S。

我在这里是完全找错树了吗?我知道如何在 Xcode 中的 Objective C 中执行此操作,但两者似乎完全不同,我知道它们是不同的系统,但仍然。

任何人都可以提出解决方案吗?基本上是一种让程序同时按下 Control + S 的方法(不是一个接一个,一起)。

非常感谢任何帮助。那里似乎有很多相互矛盾的信息。

【问题讨论】:

    标签: visual-c++ keypress simulate keyevent


    【解决方案1】:

    试试这个:

    keybd_event(VK_LCONTROL,MapVirtualKey(VK_LCONTROL,0),0,0); 
    keybd_event(bKey, MapVirtualKey(bKey,0), 0, 0);
    
    
    keybd_event(bKey, MapVirtualKey(bKey,0), KEYEVENTF_KEYUP, 0);
    keybd_event(VK_LCONTROL,MapVirtualKey(VK_LCONTROL,0),KEYEVENTF_KEYUP,0); 
    

    【讨论】:

    • 会试一试。在我的脑袋爆炸之前稍作休息。你能向我解释一下新代码的不同之处吗?不需要严格的细节,因为我很少使用该语言工作,只需要一些想法。
    • 据我所知,keybd_event 需要实际的扫描码。你为它提供了一个 0,而我给它的是真正的扫描码。
    • 好的,我已经尝试过了,它有效 - 有点,问题是这个。为了这个测试,我用 Shift 替换了 Control,用 062(数字键 2)替换了 bKey 如果我把它放到记事本中,我得到“(这是程序的预期行为),如果我在另一个有不是文本输入选项,它只是响应为 2,例如,如果我在一个游戏中必须按 Shift + 2(例如 RTS),那么它只会响应为 2。还有什么想法吗?
    • 这可能是因为游戏通过 DirectInput 而不是普通的 windows 消息队列访问键盘。不过,我无法想到如何解决这个问题..
    • 嗯,我也是这么想的,但是我只是在记事本中尝试了控制 S(保存),但也没有正常工作。
    猜你喜欢
    • 2021-03-07
    • 2020-04-29
    • 2011-03-04
    • 2011-11-10
    • 2011-08-02
    • 2018-03-08
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多