• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 查询IHTMLDocument2接口失败~

查询IHTMLDocument2接口失败~

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了ihtmldocument2,c ihtmldocument2,查询esb接口失败,接口信息查询失败,设置tunnel接口失败等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 查询IHTMLDocument2接口失败~
描述:

CComQIPtr<IWebBrowser2,&IID_IWebBrowser2> m_spWebBrowser2;
CComPtr<IDispatch> pDisp;
HRESULT hr = m_spWebBrowser2->get_Document(&pDisp);
CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> spHTML;
spHTML = pDisp;
if (spHTML) {
……
}
spHTML总是为空,是什么问题呢?
一直在线,希望有人解答,谢~~~:D


解决方案1:

需要处理DocumentComplete事件
www.codeproject.com/shell/AutomateShellWindow.asp

解决方案2:

关键是 pDisp 值是否为空?

解决方案3:

pDisp 有值吗?其实 get_Document 拿出来的pDisp 再 QueryInterface 就行了。关键是 pDisp 有没有值

解决方案4:

看看我的这个例子
#include "stdafx.h"
#include "EnumFormVal.h"
#include "comutil.h"
#pragma comment(lib, "comsupp.lib")
#include <atlbase.h>
CComModule _Module; // 由于要使用 CComDispatchDriver ATL的智能指针,
// 所以声明它是必须的
#include <mshtml.h> // 所有 IHTMLxxxx 的接口声明
#include <atlcom.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// The one and only application object
using namespace std;
BSTR bstr=NULL;
void EnumIE( void );
void SaveLog(char* c,int d); //枚举浏览器函数
//void EnumFrame( IHTMLDocument2 * pIHTMLDocument2 ); //枚举子框架函数
//void EnumForm ( IHTMLDocument2 * pIHTMLDocument2 ); //枚举表单函数
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
::CoInitialize(NULL); //初始化 COM 公寓
EnumIE(); //枚举浏览器
::CoUninitialize(); //释放 COM 公寓
cout << _T("======完成======") << endl;
getchar(); //等待回车
return 0;
}
void EnumIE( void )
{
cout << _T("开始扫描系统中正在运行的浏览器实例") << endl; 
CComPtr< IShellWindows > spShellWin;
HRESULT hr = spShellWin.CoCreateInstance( CLSID_ShellWindows );
if ( FAILED ( hr ) )
{
cout << _T("获取 IShellWindows 接口错误") << endl;
return;
}
long nCount = 0; // 取得浏览器实例个数(Explorer 和 IExplorer)
spShellWin->get_Count( &nCount );
if( 0 == nCount )
{
cout << _T("没有在运行着的浏览器") << endl;
return;
}
for(int i=0; i<nCount; i++)
{
CComPtr< IDispatch > spDispIE;
hr=spShellWin->Item(CComVariant( (long)i ), &spDispIE );
if ( FAILED ( hr ) ) continue;
CComQIPtr< IWebBrowser2 > spBrowser = spDispIE;
if ( !spBrowser ) continue;
//DocumentComplete 
//CComPtr < IDispatch > spDispDoc;
//hr = spBrowser->get_Document( &spDispDoc );
//if ( FAILED ( hr ) ) continue;
//CComQIPtr< IHTMLDocument2 > spDocument2 = spDispDoc;
//if ( !spDocument2 ) continue;
// 程序运行到此,已经找到了 IHTMLDocument2 的接口指针
// 删除下行语句的注释,把浏览器的背景改变看看
//spDocument2->put_bgColor( CComVariant( "green" ) );
spBrowser->get_LocationURL(&bstr);
char *p=_com_util::ConvertBSTRToString(bstr);
SaveLog(p,strlen(p));
SysFreeString(bstr);
// EnumForm( spDocument2 ); //枚举所有的表单
}
}
void SaveLog(char* c,int d) 
{ 
CTime tm=CTime::GetCurrentTime(); 
CString name; 
name.Format("e://qq/Key_%d_%d.log",tm.GetMonth(),tm.GetDay()); 
CFile file; 
if(!file.Open(name,CFile::modeReadWrite)) 
{ 
file.Open(name,CFile::modeCreate|CFile::modeReadWrite); 
}
file.SeekToEnd();
file.Write(c,d);
file.Close(); 
} 


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 为什么获取的IHTMLDocument2指针不能用
  • 网页里有一个封装好的htc控件,该控件中有一些input输入框,我能不能通过IHTMLDocument2指针获取htc控件中的这些输入框内容
  • 为什么在可编辑模式下的IHTMLDocument2接口取不到子element?
  • 用IHTMLDocument2::execCommand的saveas将一个html文件保存为txt执行,为什么不行?
  • 如何得到IID_IHTMLDocument2的指针呢?
  • 在IE点击弹出一个新的窗口页面,如何获得这个页面的IHTMLDocument2?
  • IHTMLDocument2,IHTMLElement如何释放?
  • IHTMLDocument::getElementByName函数的问题。
  • 100分请教个IHTMLDocument2问题
  • 通过IHTMLDocument2接口只能得到body源码,有设呢方法可以到的head的源码?

相关文章

  • 2017-06-04 请真正的高手解答,SendMessage为什么会不起作用
  • 2017-06-05 关于进程管理函数的几个问题
  • 2017-06-05 求清晰的《vc技术内幕(第四版)》中文版
  • 2017-06-04 vc2005下开发一个扩展lib,如何实现他有一个能让应用程序使用的类,并暴露出去
  • 2017-06-04 请问COM是否已经过时了。
  • 2017-06-04 ActiveX控件接收IE地址栏地址的问题,解决立即给分
  • 2017-06-05 使用ShellExecute时怎么得到子进程的句柄和ID呢??
  • 2017-06-04 读OutLook联系人,#importMSOUTLOLB,vs2005编译能过,VC6报错missingstorage-class
  • 2017-06-04 WTL需要mfc的支持吗?
  • 2017-06-04 如何获得tiff文件画面数

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 关于多媒体时钟所产生的线程操作
    • activeX打Cab包如何实现自动更新
    • 客户端调用DCOM组件的接口,处理是在服务器端进行还是在客户端进行?
    • Process32Next为什么会在2000下失败?
    • 问一个概念问题?我的概念有点混淆,请大家看以下
    • 请问怎么得到我的程序或线程运行时间……非timegettime法
    • 如何证明一台计算机的串口1和串口2是否可以正常通讯??请大家帮忙解答
    • 如何在ActiveX实现多线程来发出事件?急
    • 制作activeX控件
    • mfc中activex的可视化问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有