2011-03-10 72 views
0

你好发送输入密钥到Webbrowser1

我试过;

PostMessage(embeddedwb1.Handle,VK_RETURN,0,0); 
sendmessage(embeddedwb1,wm_keyup,vk_return,0); 
embeddedwb1.perform(wm_keyup,vk_return,0); 

但我的程序不起作用。 和我试过;

Keybd_Event(VK_RETURN, 1, 0, 0); 

我的程序已经正常工作,但这是所有应用程序发送回车键的代码。我想为我的程序编写代码。 谢谢你帮我

回答

2

在致电Keypd_Event(...)之前,请确保WebBrowser专注于使用SetFocus(embeddedwb1.Handele)

既然您可能想要提交表单,您是否考虑过使用DOM来做这件事?以下是一些填充选定输入字段的代码,然后提交第一个表单。如果您导航到http://www.google.com,但在现实世界中你需要很多更小心这只是正常(搜索输入字段由class和id,检查是否有一个表格等)

procedure TForm23.Button2Click(Sender: TObject); 
begin 
    ((W.Document as IHTMLDocument2).activeElement as IHTMLInputElement).value := 'Search'; 
    ((W.Document as IHTMLDocument2).forms.item(0, '') as IHTMLFormElement).submit; 
end; 
+1

+1 DOM远比伪造输入更好! – 2011-03-10 09:37:26

+0

谢谢,但我必须点击; input type =“submit”id =“submitAction”value =“Cal”> - submitaction button.so我试过了; EmbeddedWb1.OleObject.Document.getElementByID('SubmitAction')。click; - 没有work.and我试图与嵌入式wb1.setfocus之前调用keypd事件 - 不工作:( – 2011-03-10 09:49:54

+1

@卡迪尔,你提交表单,而不是按钮;寻找表单,并调用提交,因为我做了什么!意思是“不工作”?它不提交表单?编译器不喜欢代码? – 2011-03-10 10:02:59

1

如果Javascript用于提交表单,那么Cosmin的答案不起作用,我认为。在这种情况下,您必须知道按钮的JS代码并从您的程序中执行它。例如;在我的页面中,我使用JQuery来提交表单。所以:

procedure TForm1.Button1Click(Sender: TObject); 
var 
    js_code : string; 
    Win : IHTMLWindow2; 
begin 
    Win := (WebBrowser1.Document as IHTMLDocument2).parentWindow; 
    js_code := '$("#formlogin").submit();'; 
    Win.execScript(js_code, 'JavaScript'); 
end; 
+0

您的代码完全一样(使用DOM提交表单)唯一的区别是您使用JQuery搜索DOM,然后调用submit()。当表单使用JavaScript提交时,您将调用一个JavaScript函数,在真正提交表单之前有机会进行验证。如果'js_code'显示一个函数调用,使其更具现实感,我会动起来。 – 2011-03-10 18:44:29

-1

使用此:

PostMessage(EmbeddedWB1.HWND, WM_CHAR, 13, 0); 

该代码发送字符13(回车代码)EmbeddedWB。

+0

解释您的推理。 – 2016-01-02 14:14:15