如何模拟按键事件?
我需要在网页浏览器控件中输入textbox
中的内容。只需设置值不起作用,因为这不会运行JavaScript。如何模拟按键事件?
所以:
InvokeMember:我想我可以用invokemember这个(因为有
InvokeMember("Click")
)。但谷歌对键盘事件保持沉默。集中元素,然后将键发送到控件。它可以工作(
Sendkeys.Send
),但只有在控件被激活时才有效。如果我切换到另一个窗口,它将完全发送密钥,但不是我想要的位置。- Javaspript:有没有办法找出当我更改文本框的值时运行哪个JavaScript?我不太了解JavaScript。元素属性没有像OnClick/OnKeyUp等。
所以......如果有人问津。
- InvokeMember对按键没有任何作用。
- 它不可能向控件发送密钥。
- 有一种使用iQuery“发送密钥”的方法,这是......假的,设计不佳的。它对我的情况没有帮助。当它发送“发送密钥”时,“InvokeMember(”OnKeyUp“)”也起作用。
什么是可能的?它可能发送密钥到一个窗口... Teoretically它可能发送密钥到无效窗口(使用SendMessage()和PostMessage()),但几乎没有人成功完成此操作,因为WinXP & x 32倍...
我没有尝试自己,但也有人能够使用“SendInput”发送密钥。但反正这个没用,导致函数只能发送键到活动窗口。
所以... SendKeys.Send(我猜,它是SendInput的包装)仍然是最好的方法。
解决方案
我创建了一个表格(窗口)我的WebBrowser控件。我初始化它,但不使用“显示”。然后我简单地在“SendKeys.Send”之前激活这个表单(不要忘记关注元素(在控件内部)和控件(在表单内部)。由于没有任何表单可以显示,用户不会注意到任何内容,并且按键会进入正确的窗口。如果需要,可以保存之前激活的窗口句柄,并在发送后再次激活它(所以焦点不会丢失)。
摘要
虽然IM确定这个解决方案,我会使用它,它远非完美......如果有人发现更好的东西,请让我知道(甚至在遥远的未来)。
对于Java(而不是Javascript),您无法模拟通过DOM的按键点击。您需要模拟读取窗口点击(请参阅宏记录工具,如Autohotkey)
关于此问题: 'Javaspript。有没有办法找出当我更改文本框的值时运行的JavaScript?我不太了解java。元素的属性没有像OnClick/OnKeyUp等'
要查看所有的JavaScript,你可以使用firebug插件的Firefox。它有相应的选项卡。
更多信息:http://getfirebug.com/whatisfirebug/
您可以设置一个破发点,并查看你想要所有的JavaScript变量。
您可以为每个caracter设置它并调用一个事件。在这个例子中我调用了keypress事件。为您输入的最后一个caracter调用事件。
he.setAttibtute("value", "a");
KeyEventArgs kea = new KeyEventArgs(Keys.A);
he.InvokeMember("onkeypress", kea);
在那里他是元素
“he.setAttibtute”这是一个错字? – 2018-03-07 16:32:33
不知道我理解你的问题完全,但这里有几个环节#2现有的问题。 1. [通过编程方式改变文本框的值来调用javascript onchange事件](http://*.com/questions/735462/call-javascript-onchange-event-by-programatically-changing-textbox-value)2. [我如何使用jquery绑定onchange事件的文本框](http://*.com/questions/805963/how-do-i-bind-onchange-event-of-a-textbox-using-jquery) – Juba 2011-05-26 13:28:05