将C#WinForms应用程序中的文本插入web浏览器文本框

将C#WinForms应用程序中的文本插入web浏览器文本框,c#,.net,winforms,C#,.net,Winforms,我目前正在开发一个WinForms应用程序,希望它能让用户在键盘记录程序看不到密码的情况下将存储的密码输入到web浏览器中。我已经完成了存储部分,但我不知道如何在不使用剪贴板或.NET的SendKeys类的情况下将密码插入浏览器,这两个类都可以被大多数键盘记录者看到 我研究过使用Windows消息来实现这一点,但据我所知,您需要知道控件的hWnd才能向其发送Windows消息。不幸的是,web浏览器似乎不将HWND用于单个文本框控件 我知道一定有办法做到这一点。例如,在Notepad++中,您可

我目前正在开发一个WinForms应用程序,希望它能让用户在键盘记录程序看不到密码的情况下将存储的密码输入到web浏览器中。我已经完成了存储部分,但我不知道如何在不使用剪贴板或.NET的SendKeys类的情况下将密码插入浏览器,这两个类都可以被大多数键盘记录者看到

我研究过使用Windows消息来实现这一点,但据我所知,您需要知道控件的hWnd才能向其发送Windows消息。不幸的是,web浏览器似乎不将HWND用于单个文本框控件


我知道一定有办法做到这一点。例如,在Notepad++中,您可以将文本拖动到web浏览器文本框中,而文本不会显示在键盘记录器中。尼欧的保险箱钥匙也是如此。有人对这样做的一般方法有什么想法吗?非常感谢。

您需要的是一个WebDriver库。不幸的是.net没有很多好的。您可以查看
WatiN
selenium

据我所知,watin不再受支持,并且不兼容多浏览器

下面是一个使用硒的示例

using (var driver = new ChromeDriver())
{
    driver.Navigate().GoToUrl("http://testing-ground.scraping.pro/login");
    var userNameField = driver.FindElementById("usr");
    var userPasswordField = driver.FindElementById("pwd");
    var loginButton = driver.FindElementByXPath("//input[@value='Login']");

    userNameField.SendKeys("admin");
    userPasswordField.SendKeys("12345");
    loginButton.Click();
}
您可以将驱动程序链接到现有打开的浏览器

如果您能够在计算机上运行ruby,我建议您使用
Watir

运行ruby脚本,使用c#进程执行web操作

拖放记事本文本时会发生的情况是临时复制/粘贴(就像ctrl+c/ctrl+v一样),与您尝试执行的操作无关。我指的是将文本从记事本++拖动到浏览器中的文本框。它不会被添加到剪贴板中,或者,如果它被添加到剪贴板中,它会以某种方式阻止我测试过的键盘记录器检测到它。是的,这是windows功能,而不是notepad++。在其他应用程序中也可以这样做。它确实使用了复制粘贴机制。您可以通过编程方式使用此机制,但不能告诉它粘贴到浏览器的密码字段中,因为windows不知道此字段在哪里。这就是为什么您需要webdriver库。希望这有助于理解!这看起来很有希望!非常感谢你。我会调查的。