如何为Firefox的活动进程生成键盘文本

时间:2017-06-20 10:39:07

标签: c# firefox process

我可以使用以下命令将我的C#WinForm应用程序中的文本发送到记事本等其他应用程序:

SendKeys.SendWait("Hello");

但我需要将文本发送到Firefox中的html输入元素。有几种方法可以选择目标应用程序。 This SO Question使用以下代码:

Process p = Process.GetProcessesByName("notepad").FirstOrDefault();
IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);

将所需的应用程序设置为前景,以便它接收文本。但这不适用于名为" firefox"的应用程序,可能是因为它根据任务管理器使用的不是1个而是4个进程。

我尝试了另一种方法:在调用SendKeys.SendWait之前,只需像Alt-Tab一样切换回上一个活动应用程序,使用适用于记事本的this SO Question代码和适用于Chrome的代码浏览器,但不适用于Firefox。

这样做的目的是从连接到RS232端口的重量测量设备(比例尺)获取数据到浏览器中的html输入元素。模拟键盘的相同原理通常与USB条形码扫描仪一起使用。

知道如何使用Firefox进行此操作吗?

我可能在错误的轨道上,是否有很多不同的方法可以在键盘上输入文字?

1 个答案:

答案 0 :(得分:0)

你不能使用WinForms WebBrowser吗?另请考虑使用可通过Selenium WebDriver获得的Nuget。我认为它完全符合你的需要。

这是文档的一个例子:

using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;

// Requires reference to WebDriver.Support.dll
using OpenQA.Selenium.Support.UI;

class GoogleSuggest
{
    static void Main(string[] args)
    {
        // Create a new instance of the Firefox driver.
        // Note that it is wrapped in a using clause so that the browser is closed 
        // and the webdriver is disposed (even in the face of exceptions).

        // Also note that the remainder of the code relies on the interface, 
        // not the implementation.

        // Further note that other drivers (InternetExplorerDriver,
        // ChromeDriver, etc.) will require further configuration 
        // before this example will work. See the wiki pages for the
        // individual drivers at http://code.google.com/p/selenium/wiki
        // for further information.
        using (IWebDriver driver = new FirefoxDriver())
        {
            //Notice navigation is slightly different than the Java version
            //This is because 'get' is a keyword in C#
            driver.Navigate().GoToUrl("http://www.google.com/");

            // Find the text input element by its name
            IWebElement query = driver.FindElement(By.Name("q"));

            // Enter something to search for
            query.SendKeys("Cheese");

            // Now submit the form. WebDriver will find the form for us from the element
            query.Submit();

            // Google's search is rendered dynamically with JavaScript.
            // Wait for the page to load, timeout after 10 seconds
            var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
            wait.Until(d => d.Title.StartsWith("cheese", StringComparison.OrdinalIgnoreCase));

            // Should see: "Cheese - Google Search" (for an English locale)
            Console.WriteLine("Page title is: " + driver.Title);
        }
    }
}