枚举当前环境中打开的所有IE
IE程序是屬于Shell的一個應用程序,要枚舉當前打開的所有IE程序窗口,可以通過ShellWindows集合來打開屬于Shell的當前的窗口的集合.
首先添加程序需要的頭文件和tlb庫
//
#import?<shdocvw.dll>?
#import?<mshtml.tlb>
#include?<mshtml.h>
//
//定義IE程序處理函數指針
typedef??void??(*ProcessWebBrowser)(?const?SHDocVw::IWebBrowser2Ptr?pBrowser?);
/*
*?枚舉當前打開的IE窗口,并輸出網頁的標題
*/
BOOL??EnumInternetExplorer(?ProcessWebBrowser?pHander?)
{
????//IE屬于shell的一個應用程序,再次需要枚舉ShellWindows集合
????SHDocVw::IShellWindowsPtr??spSHWinds;
????if(?FAILED(?spSHWinds.CreateInstance(?__uuidof(?SHDocVw::ShellWindows?)?)?)?)
????????return?FALSE;
????//獲取ShellWindows集合的數目
????long?nCount??=?spSHWinds->GetCount();
????for?(?long?lIndex?=?0;?lIndex?<?nCount;?lIndex++?)
????{
????????//枚舉每個項
????????IDispatchPtr??spDisp;
????????_variant_t??var(?lIndex,?VT_I4?);
????????spDisp??=??spSHWinds->Item(?var?);
????????if?(?spDisp?!=?NULL?)
????????{
????????????//Query網頁接口
????????????SHDocVw::IWebBrowser2Ptr??spBrowser(?spDisp?);
????????????if(?(?spBrowser?!=?NULL?)?&&?(?pHander?!=?NULL?)?)
????????????{
????????????????//調用處理函數
????????????????pHander(?spBrowser?);
????????????}
????????}
????}
????return?TRUE;
}
void??ShowIETitle(?const??SHDocVw::IWebBrowser2Ptr??pBrowser?)
{
????//獲取網頁的文檔接口
????MSHTML::IHTMLDocument2Ptr??spDoc(?pBrowser->GetDocument()?);
????if(?spDoc?!=?NULL?)
????{
????????CComBSTR??bstr;
????????//獲取標題
????????spDoc->get_title(?&bstr?);
????????//bstr即為網頁標題
????????_bstr_t???bstr_adapt??=??bstr;
????????TCHAR*?szTitle?=?bstr_adapt;
????????AtlMessageBox(?NULL,?szTitle?);
????}
}
調用:
EnumInternetExplorer( ShowIETitle );
轉載于:https://blog.51cto.com/12883930/1923313
總結
以上是生活随笔為你收集整理的枚举当前环境中打开的所有IE的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自己动手写CPU之第七阶段(5)——流水
- 下一篇: primeNG DataTable中Te