SendKey进入浏览器控件WinForm .Net

时间:2012-02-03 10:20:59

标签: javascript .net browser sendkeys geckofx

我需要使用GeckoFX Web Control在网页中发送Enter键按事件。

我无法使用SendKeys.Send({ENTER})

有没有办法通过网页中的Javascript发送回车?

2 个答案:

答案 0 :(得分:1)

由于您使用geckofx,您可以使用nsIDOMWindowUtils接口发送按键。

    var GeckoWebBrowser browser = ...;
    nsIDOMWindowUtils utils = Xpcom.QueryInterface<nsIDOMWindowUtils>(browser.Window.DomWindow);
    using (nsAString type = new nsAString("keypress"))
    {
      utils.SendKeyEvent(type, 0, 13, 0, false);
    }

注意一个人通常不能使用普通javascript的nsIDOMWindowUtils接口,因为它需要UniversalXPConnect特权。

答案 1 :(得分:1)

这是伏都教魔法:

C#COM版本,将Enter键发送到GeckoWebBrowser中的GeckoNode。 不幸的是我没有在GeckoFX 18中找到合适的包装器,因此所有工作都是通过xpcom完成的。

13是输入的代码,如果需要发送字符,请将其设置为0并使用charcode作为InitKeyEvent的最后一个参数

这里e是您按下按键的对象。

 nsIDOMKeyEvent Event = Xpcom.QueryInterface<nsIDOMKeyEvent>(Browser.Window.DomWindow.GetDocumentAttribute().CreateEvent(new nsAString("KeyEvents")));
 Event.InitKeyEvent(new nsAString("keypress"), true, true, Browser.Window.DomWindow, false, false, false, false, (uint)13, (uint)0);
 Xpcom.QueryInterface<nsIDOMEventTarget>(e.DomObject).DispatchEvent(Event);

JavaScript版本,如果你可以注入javascript,这将在javascript环境中做同样的事情

 var Event = document.createEvent("KeyEvents");
 Event.initKeyEvent('keypress', true, true, window, false, false, false, false, 13, 0);
 e.dispatchEvent(Event);