【问题标题】:Send keypressed to an app将按键发送到应用程序
【发布时间】:2014-04-06 13:50:10
【问题描述】:

我正在尝试将虚拟按钮按下发送到应用程序。我尝试使用SendKeys.Send("{6}");,但应用程序像字符串或类似的东西一样接收它,因为它不起作用。我要发送密钥的应用程序是 VisualBoy Advance。我的代码只允许我使用 GUI 远程播放,所以当我在 GUI 上按左键时,VBA 应该会收到击键。

部分代码:

case "derecha":
    SendKeys.SendWait("{4}");
    break;

【问题讨论】:

    标签: c# sendkeys


    【解决方案1】:

    {} 字符是特殊的转义字符。我不认为 6 是一个转义值。查看http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.send(v=vs.110).aspx 以了解已知的转义。例如,SendKeys.SendWait("{Right}"); 会发送一个右箭头键。

    然而,

    许多游戏和模拟器将使用低级键盘挂钩来读取键盘状态。很难找到使用 Windows 事件模型进行键盘阅读的游戏。 SendKeys 只发送到 Windows 消息系统。您可能需要一种更底层的方式来发送事件。

    如果目标应用使用 DirectInput,您或许可以使用来自 user32.dllSendInput 函数:

    还有Interception库,不过我自己没用过:

    【讨论】:

    • 是的!我目前将我的代码更改为: case "derecha": keybd_event(0x33, 0, 0x0001, 0); keybd_event(0x33, 0, 0x0002, 0);休息;但是还是不行,可能在按下和向上按钮之间有一点时间?
    • 是的,我会在里面放一个Thread.Sleep(34) -- 这应该是大约 2 帧的按键时间。
    • 感谢您的回复,我已经完成了我的代码,按键的最终脚本是这样的:keybd_event(0x35, 0, 0, 0);线程.睡眠(15); keybd_event(0x35, 0, 0x0002, 0);它运行良好并与任何程序交互:D
    猜你喜欢
    • 2011-07-19
    • 2012-08-22
    • 2013-06-20
    • 2014-11-02
    • 2011-10-02
    • 2022-10-19
    • 2011-01-07
    • 1970-01-01
    相关资源
    最近更新 更多