簡體   English   中英

如何模擬按鍵事件?

[英]How to simulate key press event?

我需要在 Web 瀏覽器控件內的textbox輸入一些內容。 簡單地設置該值不起作用,因為這不會運行 javascript。

所以:

  1. InvokeMember:我想我可以為此使用 invokemember(因為有InvokeMember("Click") )。 但谷歌對鍵盤事件保持沉默。

  2. 聚焦元素,然后將鍵發送到控件。 它有效( Sendkeys.Send ),但前提是控件被激活。 如果我切換到另一個 window,它將完全發送密鑰,但不是我想要的。

  3. Javaspript:當我更改文本框的值時,有沒有辦法找出運行哪個 javascript? 我不太了解 javascript。 元素屬性沒有 OnClick/OnKeyUp 等。

所以...萬一有人感興趣。

  1. InvokeMember 沒有任何按鍵功能。
  2. 將密鑰發送到控件是不可能的。
  3. 有一種使用 iQuery 來“發送密鑰”的方法……這是假的且設計不佳。 在我的情況下它沒有幫助。 當它“發送密鑰”時,“InvokeMember(“OnKeyUp”)”也可以工作。

什么是可能的? 可以將密鑰發送到 window...理論上可以將密鑰發送到非活動窗口(使用 SendMessage() 和 PostMessage()),但實際上自從 WinXP 和 x32 次以來沒有人成功完成此操作...

我自己沒有嘗試過,但是有些人能夠使用“SendInput”發送密鑰。 但這無論如何都沒用,因為 function 只能將密鑰發送到活動的 window。

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

解決方案

我為我的網絡瀏覽器控件創建了一個表單(窗口)。 我初始化它,但不使用“顯示”。 然后我只是在“SendKeys.Send”之前使這個表單處於活動狀態(不要忘記同時關注元素(控件內部)和控件(表單內部))。 由於沒有要顯示的表格,因此用戶不會注意到任何內容並將 go 鍵在右側 window 上。 如果需要,可以保存之前激活的 window 的句柄,並在發送后再次激活(這樣焦點不會丟失)。

概括

雖然我對這個解決方案很好,我會使用它,但它遠非完美......如果有人找到更好的東西,請告訴我(即使在遙遠的將來)。

您可以為每個角色設置它並調用一個事件。 在這個例子中,我調用了按鍵事件。 為您鍵入的最后一個字符調用事件。

he.setAttibtute("value", "a");
KeyEventArgs kea = new KeyEventArgs(Keys.A);
he.InvokeMember("onkeypress", kea);

他在哪里 HtmlElement

關於這個:'Javaspript。 當我更改文本框的值時,有沒有辦法找出 javascript 運行的內容? 我不太了解 java。 元素的屬性沒有 OnClick/OnKeyUp 等。

要查看所有 javascript,您可以使用 firefox 的 firebug 插件。 它有相應的選項卡。

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

您可以設置一個斷點並查看您想要的所有 javascript 變量。

如果有人遇到這種情況,正在尋找一種與框架無關的方式來觸發任何 HTML 和鼠標事件,請看這里: 如何使用 JavaScript 模擬鼠標點擊?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM