好的,所以我在WatiN中运行测试,并且正在使用SendKeys方法。根据MSDN网站,我可以输入:

System.Windows.Forms.SendKeys.SendWait("{LEFT 2}");


这将向左输入两次。但是,我认为这不起作用,因为该应用程序在每次按键之间都需要时间。我要做我需要做的程序,我在每个按键之间使用Thread.Sleep来确保它们被读取。有没有更有效的方法?这是我当前的方法代码:

System.Windows.Forms.SendKeys.SendWait("{LEFT}");
Thread.Sleep(500);
System.Windows.Forms.SendKeys.SendWait("{LEFT}");
Thread.Sleep(500);
System.Windows.Forms.SendKeys.SendWait("{ENTER}");

最佳答案

不幸的是,我不相信那里。根据MSDN的说法,SendKeys存在计时问题:


  SendKeys类易受时序问题的影响,有些
  开发人员不得不变通。更新的实现是
  仍然容易受到时序问题的影响,但速度稍快一些,可能
  需要更改解决方法。
  
  SendKeys类尝试使用
  首先使用先前的实现,如果失败,则使用新的
  实施。
  
  结果,SendKeys类的行为可能有所不同
  在不同的操作系统上。此外,当SendKeys类
  使用新的实现,SendWait方法将不会等待
  将消息发送到另一个进程时要处理的消息。如果
  您的应用程序依赖一致的行为,无论
  操作系统,您可以强制SendKeys类使用新的
  通过将以下应用程序设置添加到您的实施中
  app.config文件。


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



  若要强制SendKeys类使用以前的实现,请改用值“ JournalHook”。


您可以尝试在实现之间进行更改,以查看结果是否有所变化。

或者,根据此post,在您的输入应该起作用之后,只需使用Thread.Sleep(0);。这不是最优雅的解决方案,但如果可行,它将比500ms暂停更快。

关于c# - 发送多个按键WatiN,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8577427/

10-12 15:27