【问题标题】:How to send Keys to an application如何将密钥发送到应用程序
【发布时间】:2012-12-12 21:06:27
【问题描述】:

我有一个非常基本的问题,对于一个游戏(Dota 2)我想写一个打开控制台的小宏,写“setinfo name”...... .........."" 进入它然后关闭它,控制台的热键设置为'#'。为此,我编写了一个应用程序,它监听要按下的键“f”,然后发送

1) '#' (open the console)
2) "messag ebla bla b...."
3) '#' (close the console)

一切正常,只是它不会打开控制台(但如果控制台已经打开,它会在我按 f 键时将 #messagej.j....# 写入其中)

我发送密钥的代码。

SendKeys.Send("#");
SendKeys.Send("my message for consol");
SendKeys.Send("#");

有人知道为什么热键不能通过发送键来工作吗?我认为这是对用户按下 F 或 Q 时的模拟。

【问题讨论】:

  • 关于问题标题中的标签存在一些争论。目前我们认为标签不应该是标题的一部分。我编辑了你的标题。

标签: c#


【解决方案1】:

您应该尝试的第一件事是在按键之间添加“软件”延迟。

string MSG = "#yourmessage#";
foreach (object c_loopVariable in MSG) {
    c = c_loopVariable;
    Sendkeys.Send(c);
    sleep(20);

}

要考虑的另一件事 - sendkeys 不会在硬件层模拟按键 - 它位于 Windows API 级别,而 DirectX DirectInput.,大多数游戏用于用户输入处理的方式更进一步。所以你可能不会这么容易做到。

您应该查看更多关于 keybd_event 的内容。我使用它的运气更好——据我所知,它比发送键更深入。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646304(v=vs.85).aspx

无论如何,我希望你不会在一款出色的游戏中使用它来发送垃圾邮件! :)

【讨论】:

  • 添加延迟不会改变任何事情。而keybd_eventSendKeys 的实现方式。或者可能是SendInput,这是等效的。
  • 我尝试使用 autohotkeys sendinput 方法发送输入,它可以工作,但我无法将 autohotkey 嵌入 c#... 有人知道 autohotkey 使用哪种方法进行输入注入吗?
猜你喜欢
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
  • 2020-11-24
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多