brent's hut

Activex和ie 浏览器的互动

今天中午看到一个电子签名的软件。一看,惊艳!
activex控件直接读取html元素的值,比如<input type="text"></input>

实在是牛啊!俺一开始以为是用javascript来做的.查看了例子的源代码后发现不是.

那么这个acitvex控件至少应该可以获得ie 浏览器的接口IWebBrowser2,但它是怎么做的呢?

一开始我的思路是:ie浏览器作为一个容器,它是否同时实现了IOleContainer和IWebBrowser2?试验发现不对...经过多方google,找到CSDN中shanhe的专栏http://blog.csdn.net/shanhe/category/15859.aspx?PageNumber=2
找到可行的代码如下:

IOleContainer* pContainer;
HRESULT hr = m_pClientSite->GetContainer(&pContainer);
if (FAILED(hr))
    return hr;

IServiceProvider* pServiceProvider;
hr = pContainer->QueryInterface(IID_IServiceProvider,
                                (void**)&pServiceProvider);
pContainer->Release();
if (FAILED(hr))
    return hr;

IWebBrowser2* pWebBrowser;
hr = pServiceProvider->QueryService(SID_SWebBrowserApp,
                           IID_IWebBrowser2,
                           (void**)&pWebBrowser);
pServiceProvider->Release();
if (FAILED(hr))
    return hr;

可以获取了IWebBrowser2接口,但如何读取html元素的值呢?IWebBrowser2接口似乎没有这个功能?

又是千山万水的google:
vckbase:
http://vckbase.net/document/viewdoc/?id=1446
codeguru:
http://www.codeguru.com/Cpp/COM-Tech/atl/misc/article.php/c3619/

iehtmlelement.jpg 


msdn 2003 :
MSHTML ReferenceHOWTO: Get the WebBrowser Object Model of an HTML Frame
HOWTO: Retrieve the URL of a Web Page from an ActiveX Control

msdn关于MSHTML的参考也够烂,列出一堆接口方法就不管了。究竟结构如何要自己去研究。总之很是不爽。

posted on 2005-12-30 17:51 brent 阅读(468) 评论(0)  编辑 收藏 引用 所属分类: Windows


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理