C# 如何向应用程序发送密钥

C# 如何向应用程序发送密钥,c#,C#,我有一个非常基本的问题,对于一个游戏(Dota 2),我想写一个小宏,打开控制台,在其中写入“setinfo name…”,然后关闭它,控制台的热键设置为“#”。为此,我编写了一个应用程序,它监听按下“f”键,然后发送 1) '#' (open the console) 2) "messag ebla bla b...." 3) '#' (close the console) 一切正常,只是它不会打开控制台(但如果控制台已经打开,当我按f键时,它会将#messagej.j…#写入其中) 我发送

我有一个非常基本的问题,对于一个游戏(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键。

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

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

}

另一个要考虑的事情——SeNEdKEY不模仿硬件层的按键——它是在Windows API级别上的,DirectX DirectPosix。大多数游戏用于用户输入处理的程度更高。所以有可能你不能这么容易做到

您应该检查更多的keybd_事件。我用它运气更好——据我所知,它比sendkeys更深一层


不管怎么说,我希望你不要在一个伟大的游戏中用这个来发垃圾邮件

关于问题标题中的标签有一些争论。目前我们觉得标签不应该是标题的一部分。我编辑了你的标题。添加延迟不会改变任何事情。而
keybd\u事件
是如何实现
SendKeys
的。或者可能是
SendInput
,这是等效的。我尝试使用自动热键SendInput方法发送输入,它可以工作,但我无法将自动热键嵌入c#。。。有人知道autohotkey使用哪种方法进行输入注入吗?