gpt4 book ai didi

c# - 发送击键 C# 的最快方法

转载 作者:太空狗 更新时间:2023-10-29 18:06:51 25 4
gpt4 key购买 nike

我想知道使用 C# 发送击键的最快方法是什么。目前我正在使用 SendKeys.Send()SendKeys.SendWait() 以及 SendKeys.Flush()

我使用下面的代码来计算他们两个工作需要多长时间:

Stopwatch sw1 = new Stopwatch();
sw1.Start();
for (int a = 1; a <= 1000; a++)
{
SendKeys.Send("a");
SendKeys.Send("{ENTER}");
}
sw1.Stop();

和:

Stopwatch sw2 = new Stopwatch();
sw2.Start();
for (int b = 1; b <= 1000; b++)
{
SendKeys.SendWait("b");
SendKeys.SendWait("{ENTER}");
SendKeys.Flush();
}
sw2.Stop();

2的结果是:

Result 1: 40119 milliseconds
Result 2: 41882 milliseconds

现在,如果我们将 SendKeys.Flush() 放在第二个测试中,我们将在循环之外得到:

Result 3: 46278 milliseconds

我想知道为什么代码中的这些更改会使速度大不相同。

我还想知道是否有一种更快的发送许多击键的方法,因为我的应用程序经常这样做。 (这些测试是在一个非常慢的上网本上完成的)

谢谢!

最佳答案

SendWait() 较慢,因为它等待消息已被目标应用程序处理。 Send() 函数不等待并尽快返回。如果应用程序以某种方式繁忙,则差异可能会更加明显。

如果您调用 Flush(),您的应用程序将停止处理在消息队列中排队的与键盘相关的所有事件。如果您使用 SendWait() 发送它们并没有多大意义,并且您会大大降低应用程序的速度,因为它在循环中(想象一下 Flush()作为选择性 DoEvents() - 是的,但它有所有缺点 - 它也由 SendWait() 本身调用。

如果您对其性能感兴趣(但它们总是受限于您的应用程序处理消息的速度),请阅读 this on MSDN .总之,您可以更改 SendKeys 类以使用 SendInput 函数,而不是日志 Hook 。作为快速引用,只需将此设置添加到您的 app.config 文件中:

<appSettings>
<add key="SendKeys" value="SendInput"/>
</appSettings>

无论如何,新实现的目标不是速度,而是跨不同版本的 Windows 和选项的一致行为(我猜提高的性能是一种副作用)。

关于c# - 发送击键 C# 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10480314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com