Qt获取IE地址栏内容

版权声明

本文为原创作品,请尊重作者的劳动成果。转载必须保持文章完整性,并以超链接形式注明原始作者“ tingsking18 ”和 主站点 地址,方便其他朋友提问和指正。

 

论坛上有人问到要用Qt获取IE地址栏内容。个人觉得有两种方法,一种是通过Hook来获取,这种办法不是正路子,也比较难搞,IE的有接口可以获取当前页面的URL。

一下代码示例了如何用Qt来获取IE地址栏内容。

下面代码在VS下很容易编译通过。如果是用mingw,需要安装w32api,另外头文件的包含可能会出现问题。要仔细检查一下。

 


下面是代码,Qt获取IE地址栏内容:

 

#include #include #include #include #include #include #include #include #import // Internet Explorer 5 #import #include #import #include #include #include #include class MainWindow:public QDialog { Q_OBJECT public slots: void OnClicked(); public: MainWindow(QWidget *parent=0); QPushButton *btn; QLineEdit *edt; }; MainWindow::MainWindow(QWidget *parent) { btn = new QPushButton(); btn->setText("click"); edt = new QLineEdit(); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(btn); layout->addWidget(edt); this->setLayout(layout); connect(btn,SIGNAL(clicked()),this,SLOT(OnClicked())); } void MainWindow::OnClicked() { CoInitialize(0); SHDocVw::IShellWindowsPtr m_spSHWinds; m_spSHWinds = NULL; if (m_spSHWinds == NULL) { if (m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) != S_OK) { CoUninitialize(); } } int n = m_spSHWinds->GetCount(); for (int i = 0; i < n; i++) { _variant_t v = (long)i; IDispatchPtr spDisp = m_spSHWinds->Item(v); IWebBrowser2 *webBrowser = 0; spDisp.QueryInterface(IID_IWebBrowser2, &webBrowser); if (webBrowser) { IHTMLDocument2Ptr pDoc2=0; if (SUCCEEDED(webBrowser->get_Document( &spDisp))) pDoc2 = spDisp; //QAxWidget if(pDoc2!=NULL) { QString str; CComBSTR LocationURL; webBrowser->get_LocationURL(&LocationURL); char *buf = _com_util::ConvertBSTRToString(LocationURL.m_str); str = buf; edt->setText(str); } } } } #include "test.moc" int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow mw; mw.setMinimumWidth(500); mw.show(); return a.exec(); }

你可能感兴趣的:(QT)