今天中午看到一个电子签名的软件。一看,惊艳!
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/
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的参考也够烂,列出一堆接口方法就不管了。究竟结构如何要自己去研究。总之很是不爽。