- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想知道使用 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/
menu Home Events Technical Schedule
我试图阻止触发默认 anchor 链接和 onclick 事件。 这是 HTML 代码: Google 我正在尝试使用以下 jQuery 代码阻止任何重定向的发生: $("#mylink").cli
我想在单击父 div 上的任意位置时切换我的 div,除非单击 anchor 元素。因此,例如,如果我单击示例中的第一个文本,我希望它切换,但在我的示例中的第二个文本上,我不希望它切换。 JSFidd
我在通过 jQuery 伪造 anchor 点击时遇到问题:为什么我的thickbox在我第一次点击输入按钮时出现,但第二次或第三次却没有出现? 这是我的代码: Link 当我直接点击链接时,它总是
我已经从 Mootools 切换到 jQuery,因为我认为它有更好的支持。我有这样的 HTML: Opcje Opcje Opcje Opcje Opcje Opcje Opcje JS
我是一名优秀的程序员,十分优秀!