<pre> 问题的标题是:我想替换某个应用程序Edit的文本,我该...(100分)<br>问题的分类是:Windows API , 分坛主: houyg, 分坛主: cAkk 来自:愚夫 时间:00-1-11 21:57:46 ID:174557 <br>我想在一个Button的Click中,替换(或输入)IE等浏览器竹叶中Edit的文字,<br>使用SendMessage发送EM_REPLACESEL时,需要知道浏览器应用程序的Handle,<br>还是焦点Edit的Handle?如何获得?<br> <br>来自:huizhang 时间:00-3-22 23:22:59 ID:204106 <br>IE 浏览器本身是一个COM服务程序, 可以用SHDocVw.dll中定义的IWebBrowser2得到<br>他的指针, 或者用CoInternerExplorer.Create来新建一个. 要对浏览器进行完全控<br>制, 可以Import MSHTML.DLL, 里面有所有的浏览器的各个元素的COM定义. 通过<br>MSHTML中的IHTMLDocument, 可以得到一个网页里面所有的详细内容.<br><br>Uses ComObj, MSDocW_TLB, MSHTML_TLB;<br><br>var<br> IE: IWebBrowser2;<br> IDOC: IHTMLDocument2;<br> Title: string;<br>procedure StartIE;<br>var Address, p1, p2, p3, p4: OleVariant;<br>begin<br> IE := CoInternetExplorer.Create; //启动IE浏览器<br> IE.Visible := true; //显示浏览器<br> Address := 'www.microsoft.com'; //浏览地址<br> IE.Navigate(Address,p1,p2,p3,p4);//浏览<br> ......<br> IDOC := IE.Document; //获得Document<br> Title:= IDOC.Title; //取得网页的Title<br> ......<br>end;<br><br>procedure CloseIE;<br>begin<br> IE.Quit;<br>end;<br><br>要完全控制浏览器的内容, 不要忘记Implement浏览器DWebBrowserEvents2中的事件<br>DocumentComplete.<br> <br><br>--------------------------------------------------------------------------------<br>来自:huizhang 时间:00-3-23 07:47:09 ID:204221 <br>to cAkk:<br><br>哈哈, 你真令俺老人家生气, 告诉你们用IHTMLDocument就足够了. 这里给你们一个<br>简单的例子, 从IShellWindows(同样在SHDocVw.DLL中)提取IE, 以及其标题, URL.<br>至于想替换HTML中的Form, 甚至Script语言, 都可以在IHTMLDocument下做文章得<br>到.<br><br>想用Windows的API函数得到IE的窗口是根本不可能的, 因为IE的HTML窗口以及其中<br>的控件根本没有注册到Windows的ROT(running object table). 所有的信息都在<br>IHTMLDocument之中, 多花点时间研究一下吧.<br><br><br>Uses<br> SHDocVw, MSHTML;<br><br>procedure TForm1.Button3Click(Sender: TObject);<br>var<br> ShellWindow: IShellWindows;<br> nCount: integer;<br> spDisp: IDispatch;<br> i: integer;<br> vi: OleVariant;<br> IE1: IWebBrowser2;<br> IDoc1: IHTMLDocument2;<br>begin<br> ShellWindow := CoShellWindows.Create;<br> nCount := ShellWindow.Count;<br><br> for i := 0 to nCount - 1 do<br> begin<br> vi := i;<br> spDisp := ShellWindow.Item(vi);<br> spDisp.QueryInterface( iWebBrowser2, IE1 );<br> //或者用: IE1 := spDisp as IWebBrowser2;<br> if IE1 &lt;&gt; nil then<br> begin<br> memo1.Lines.Add( 'Location: '+ie1.LocationName );<br><br> //IDoc1 := IE1.Document as IHTMLDocument2;<br> IE1.Document.QueryInterface(IHTMLDocument2,iDoc1);<br> if iDoc1 &lt;&gt; nil then<br> begin<br> memo1.Lines.add( 'Title: ' + IDOC1.Title );<br> memo1.Lines.add( 'Url: ' + IDOC1.url);<br> end;<br> end;<br> end;<br>end;<br><br>//注释(By DreamTiger)<br>//用IDoc1 := IE1.Document as IHTMLDocument2;会在运行中出错,<br>//系统如果装了ie5,那么,浏览文件夹的时候,<br>//spDisp.QueryInterface( iWebBrowser2, IE1 );可以得到IE1,但是<br>//ie1中并没有ihtmldocument2接口,用as会导致出现exception。<br>//用QueryInterface比较安全。<br><br> </pre><br>