如何模拟按键事件?

时间:2011-05-26 11:58:32

标签: c# javascript browser

我需要在网络浏览器控件中的textbox中输入内容。简单地设置值不起作用,因为这不会运行javascript。

所以:

  1. InvokeMember:我认为我可以使用invokemember(因为有InvokeMember("Click"))。但谷歌对键盘事件保持沉默。

  2. 聚焦元素,然后将键发送到控件。它工作(Sendkeys.Send),但仅在控件被激活时才有效。如果我切换到另一个窗口,它将完全发送密钥,但不是我想要的地方。

  3. Javaspript:当我更改文本框的值时,有没有办法找出哪些javascript运行?我对javascript了解不多。元素属性没有OnClick / OnKeyUp等。

5 个答案:

答案 0 :(得分:1)

所以...如果有人感兴趣的话。

  1. InvokeMember没有按键的任何内容。
  2. 无法将密钥发送给控件。
  3. 有一种方法可以使用iQuery“发送密钥”......这是伪造的,设计不佳。它对我的情况没有帮助。当它发送“发送密钥”时,“InvokeMember(”OnKeyUp“)”也可以。
  4. 什么是可能的?可以将密钥发送到窗口......从某种程度上说,可以将密钥发送到非活动窗口(使用SendMessage()和PostMessage()),但几乎没有人成功自WinXP& x32次......

    我没有尝试过自己,但是有些人能够使用“SendInput”发送密钥。但无论如何这都没用,导致该功能只能将密钥发送到活动窗口。

    所以... SendKeys.Send(我猜,它是SendInput的包装器)仍然是最好的方法。

    <强>解决方案

    我为webbrowser控件创建了一个表单(窗口)。我初始化它,但不要使用“显示”。然后我只是在“SendKeys.Send”之前使这个表单处于活动状态(别忘了关注元素(控件内部)和控件(表单内部))。由于没有要显示的表单,用户不会注意到任何内容,并且键会转到右侧窗口。如果需要,可以保存之前处于活动状态的窗口句柄,并在发送后再次激活(因此焦点不会丢失)。

    <强>摘要

    虽然我可以使用这个解决方案并且我会使用它,但它远非完美......如果有人发现更好的东西,请告诉我(即使在遥远的未来)。

答案 1 :(得分:0)

对于Java(不是Javascript),您无法通过DOM模拟键盘。您需要模拟读取窗口点击(请参阅Autohotkey等宏录制器工具)

答案 2 :(得分:0)

关于这个: “Javaspript。当我更改文本框的值时,有没有办法找出javascript运行的内容?我对java不太了解。 Element的属性没有OnClick / OnKeyUp等。

要查看所有javascript,您可以使用firefox的firebug插件。它有相应的标签。

更多信息:http://getfirebug.com/whatisfirebug/

您可以设置断点并查看所需的所有javascript变量。

答案 3 :(得分:0)

如果有人碰到这个寻找框架不可知方式来解雇任何HTML和鼠标事件,请查看此处:How to simulate a mouse click using JavaScript?

答案 4 :(得分:0)

您可以为每个角色设置并调用一个事件。在这个例子中,我调用了按键事件。为您输入的最后一个字符调用该事件。

rsi

他是HtmlElement