CComQIPtr CComPtr未定义 ; atlcom.h requires atlbase.h to be included first

CComQIPtr CComPtr未定义 ; atlcom.h requires atlbase.h to be included first,第1张

你的#include<atlcom.h>语句前面加上岩码 #include<atlbase.h>

COM编程一般都包含一粗租哪下几个头文件型早

#include "resource.h"

#include <atlbase.h>

#include <atlcom.h>

#include <atlctl.h>

你要先import语句将dll加载进来。如下,这就可扮缺以将ATL的dll加载进来,它会自动加载其头文件的。

#import "msxml.dll"厅激辩铅谈 raw_interfaces_only

如何从一个窗口句柄获取IWebBrowser2接口

使用完后要调用Release

如果找不到接口,返回NULL

原理:

如果你的系统安装了Microsoft 活动辅助功能(MSAA),则您可以向浏览器窗口

(类名"Internet Explorer_Server")发送WM_HTML_GETOBJECT消息,将消息返回的结果

作为一个参数传递给MSAA函数历世ObjectFromLresult,从而获取IServiceProvider接口。

IServiceProvider是IWebBrowser2, IDocument2等公共的方法,请重视这个接口

必须悄烂盯包含的头文件

#include <mshtml.h>

#include <oleacc.h>

#include <atlbase.h> //需要安装ATL库

****************************************************************************/

#include <mshtml.h>

#include <oleacc.h>

#include <启和atlbase.h> //需要安装ATL库

//测试代码中的_bstr_t 需要使用COMUTIL.H>

#include <COMUTIL.H>

#pragma comment(lib,"comsupp.lib")

IWebBrowser2* GetIWebBrowserInterface(HWND BrowserWnd)

{

CoInitialize(NULL) //这句话要放在类的构造函数中

IWebBrowser2* pWebBrowser2=NULL

HRESULT hr

// Explicitly load MSAA so we know if it's installed

HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") )

if ( hInst )

{

LRESULT lRes

UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") )

::SendMessageTimeout( BrowserWnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes )

LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") )

if ( pfObjectFromLresult )

{

CComPtr<IServiceProvider>spServiceProv

hr = (*pfObjectFromLresult)( lRes, IID_IServiceProvider, 0, (void**)&spServiceProv )

if ( SUCCEEDED(hr) )

{

hr = spServiceProv->QueryService(SID_SWebBrowserApp,

IID_IWebBrowser2,(void**)&pWebBrowser2)

} // else document not ready

} // else Internet Explorer is not running

::FreeLibrary( hInst )

} // else Active Accessibility is not installed

CoUninitialize()//这句话要放在类的析构函数中,否则返回值即使不是空指针也无效

return SUCCEEDED(hr) ? pWebBrowser2 : NULL

}

/****************************************************************************

//调用测试

****************************************************************************/

void CDemoDlg::OnButton2()

{

//获取IE主窗口

HWND ExplorerWnd=::FindWindow(_T("IEFrame"),NULL)

if (!ExplorerWnd)

::MessageBox(m_hWnd,TEXT("没有找打IE窗口"),NULL,MB_OK)

::SetForegroundWindow(ExplorerWnd)

//根据IE主窗口获取浏览器窗口

HWND BrowserWnd=FindWithClassName( ExplorerWnd , _T("Internet Explorer_Server"))

if ( BrowserWnd )

{

IWebBrowser2* pWebBrowser2=GetIWebBrowserInterface(BrowserWnd)

if (pWebBrowser2)

{

//浏览网页

_bstr_t bsSite= "http://www.baidu.com/"

VARIANT vEmpty

VariantInit(&vEmpty)

pWebBrowser2->Navigate(bsSite, &vEmpty, &vEmpty, &vEmpty, &vEmpty)

//获取窗口

HWND wnd

pWebBrowser2->get_HWND((LONG*)(&wnd))

pWebBrowser2->Release()

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12210548.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存