Windows 10中的C#SendKeys极慢(延迟)

时间:2018-04-03 11:25:12

标签: c# visual-studio sendkeys windows-10-desktop

我正在使用" native" C#SendKeys以及AutoItX库,在C#(VS 2015)中手动将登录凭据输入到Windows 10计算机上的登录窗口中。

很长一段时间,这一直在顺利完成。然后,显然突然间 - 我没有做任何改变 - 延迟超过1分钟是我所有代码样本的主导。也就是说,SendKeys.SendWait()和AutoItX的Send()方法都有效,但将密钥发送到活动窗口需要一分多钟。

这是我的代码:

我使用Selenium WebDriver打开Chrome浏览器窗口,SendKeys.SendWait()AutoItX.Send()将用户名和密码以及TAB和ENTER发送到登录窗口。

 public void OpenAndLoginSelenium (string username, string password) {
        // Create the Selenium instance and navigate to the page:
        var driverService = ChromeDriverService.CreateDefaultService();
        driverService.HideCommandPromptWindow = true;
        Instance = new ChromeDriver(driverService);
        Instance.Navigate().GoToUrl("http://my-lab-drop2.telecomputing.com");

        // Alternative 1 - using AutoItX:
        AutoItX.WinActivate("Authentication required", "");
        AutoItX.Send(username);
        AutoItX.Send("{TAB}");
        AutoItX.Send(password);
        AutoItX.Send("{TAB}");
        AutoItX.Send("{ENTER}");

        // Alternative 2 - using SendKeys():
        SendKeys.SendWait(username);
        SendKeys.SendWait("{TAB}");
        SendKeys.SendWait(password);
        SendKeys.SendWait("{ENTER}");
}

两种选择都有效,但在执行第一次发送之前需要1分3秒(此延迟似乎非常稳定)。在此时间过去之前没有任何事情发生。但是,发送之间没有延迟;只要将用户名字符串(在此示例中)输入到用户名字段中,其余部分(TAB - 输入密码 - ENTER)就会快速执行。在做任何事情之前,Windows只需等待一分三秒。

登录框是Chrome进入需要身份验证的网页时创建的标准系统登录框。我无法发布指向该页面的链接,因为它是内部链接,但请相信我。 (直接进行身份验证,使用http://login:pass@url不是一个选项,因为输入用户名/密码后的过程涉及比标准htauth更复杂的过程,使用som标记等等。)

在一个下午正常工作之间系统没有任何可见的变化,并且在重新启动系统后第二天早上突然出现这种延迟。我甚至无法找到有关任何Windows更新或任何其他更改的任何日志条目。但事情显然已经发生了 - 我只是无法找出什么,以及为什么这种极端和持续的延迟已经生效。

更新: 这里的主要问题是:为什么SendKeys()和AutoItX.Send()不再工作。接下来的问题是:如果没有解决方案,那么最简单的选择是什么?我需要做的是在浏览器的登录提示中键入用户名和密码(由Selenium WebDriver打开并进一步控制)并登录到网站。并输入文本并单击文件上传对话框等按钮。

0 个答案:

没有答案