今天中午看到一個電子簽名的軟件。一看,驚艷!
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的參考也夠爛,列出一堆接口方法就不管了。究竟結構如何要自己去研究。總之很是不爽。