• 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 > 用mfc开发的ACTIVEX控件获取网页内容,帮帮忙了。

用mfc开发的ACTIVEX控件获取网页内容,帮帮忙了。

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

佚名通过本文主要向大家介绍了mfc activex控件开发,mfc activex控件,mfc调用activex控件,mfc中activex控件,mfc添加activex控件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 用mfc开发的ACTIVEX控件获取网页内容,帮帮忙了。
描述:

用MFC开发了一个ACTIVEX控件,嵌入到网页中,想得到网页内容
IHTMLDocument2 * mFrameDoc;
mFrameDoc = (IHTMLDocument2 *)pBrowser->GetDocument();
IHTMLElement * pBody=NULL;
mFrameDoc->get_body(&pBody);
使用以上代码想获得IHTMLDocument2 接口,可是不知道这里的pBrowser指的是什么。在我的程序里应该如何写,而且提示我IHTMLDocument2 类型找不到。。请问这是缺少什么???


解决方案1:

////////////////////////////////////////////////////////////////////////
我这段程序是将一些信息填入HTML网页中的input项的,当然你也可以将put改为get获取网页的信息
看看对你有没有帮助
////////////////////////////////////////////////////////////////////////
void SetFile(IHTMLDocument2 *pDoc2,TCHAR* text)
{
//分离text中的LoginId和RealPassword
CString sRet,LoginID,LoginPW;
sRet = text;
int nn = sRet.Find(" ");
LoginID = sRet.Mid(0,nn);
LoginPW = sRet.Mid(nn+1);
//-------------------------------------
if(pDoc2==NULL)
return;
//声明一个IHTMLElement接口指针
CComPtr<IHTMLElement> pElement;
CComPtr<IHTMLElementCollection> pElementCollection;
IDispatch * Idisp;
IHTMLInputTextElement *  input;
CComBSTR type;
HRESULT hr=pDoc2->get_all(&pElementCollection);
long n;
pElementCollection->get_length(&n);
for(long i=0;i<n;i++)
{
_variant_t d = i;
hr = pElementCollection->item(d,d,&Idisp);
if(SUCCEEDED(hr))
{
hr = Idisp->QueryInterface(IID_IHTMLInputTextElement,(void**)&input);
if(SUCCEEDED(hr))
{
hr = input->get_type(&type);
if(SUCCEEDED(hr))
{
if(type==_T("password"))
{
CComBSTR pwd = LoginPW;
input->put_value(pwd);
}
if(type==_T("text"))
{
CComBSTR idd = LoginID;
input->put_value(idd);
}
}
}
}
}
pDoc2->Release();
}

解决方案2:

your control inherits from COleControl.
1. call IOleClientSite* pClientSite = GetClientSite();
2.  IWebBrowser2* browser;
IServiceProvider* isp;
HRESULT hr = m_spClientSite->QueryInterface(IID_IServiceProvider, reinterpret_cast<void **>(&isp));
if(FAILED(hr)) return 0;
hr = isp->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2, reinterpret_cast<void **>(&browser));
IDispatch **ppDispDoc;
          browser->get_Document(ppDispDoc);
ppDispDoc->QueryInterface(IID_IHTMLDocument2

解决方案3:

pBrowser IWebBrowser2指针
HOWTO: Retrieve the Top-Level IWebBrowser2 Interface from an ActiveX Control 
Q257717
To retrieve the top-level IWebBrowser2 reference, get IServiceProvider from the client site and perform a QueryService for IID_IServiceProvider under the service SID_STopLevelBrowser (defined in Shlguid.h). From this second IServiceProvider, perform a QueryService for IID_IWebBrowser2 in the SID_SwebBrowserApp service.
The best place to perform this work is in the SetClientSite() method of IOleObject: 
#include <SHLGUID.h>
#define COMRELEASE(ptr)\ 
if (ptr != NULL) {\ 
ptr->Release();\ 
ptr = NULL;\
}
IWebBrowser2 *browser = NULL;
STDMETHODIMP SetClientSite(IOleClientSite *pClientSite) 
{
HRESULT hr = S_OK;
IServiceProvider *isp, *isp2 = NULL;
if (!pClientSite)
{
COMRELEASE(browser);
}  
else
{
hr = pClientSite->QueryInterface(IID_IServiceProvider, reinterpret_cast<void **>(&isp));
if (FAILED(hr)) 
{
hr = S_OK;
goto cleanup;
}
hr = isp->QueryService(SID_STopLevelBrowser, IID_IServiceProvider, reinterpret_cast<void **>(&isp2));
if (FAILED(hr))
{
hr = S_OK;
goto cleanup;
}
hr = isp2->QueryService(SID_SwebBrowserApp, IID_IWebBrowser2, reinterpret_cast<void **>(&browser));
if (FAILED(hr)) 
{
hr = S_OK;
goto cleanup;
}
cleanup:
// Free resources.
COMRELEASE(isp);
COMRELEASE(isp2);
return hr;
}
} 


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

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

  • MFC做的ActiveX控件不能插入到VC中的问题。
  • 开发activeX控件一个小问题(100分)
  • mfc写的程序activex控件怎么ie看不到?
  • mfc开发的activex控件+第三方dll打包成cab的问题
  • importMFCActiveX,为什么无法调用函数?
  • MFC写ActiveX,怎么支持多个接口?
  • 我用mfc生成的Activex为什么不能嵌入到网页中,谁能帮我解决给500分
  • MFC开发ActiveX问题
  • SOS!如何快速的把MFC的exe文件转化为ActiveX控件!有没有这样的工具
  • 用MFC制作activex,怎样加一个参数啊?

相关文章

  • 2017-06-04 如何跳转IE左侧垂直浏览器栏
  • 2017-06-04 哪位高手知道如何实现类似“matlab”,“VB”,“VC”中拖拉控件,实现编程的效果?
  • 2017-06-05 在线急等!!偶要做一个开辟n个线程的程序,让他们大量的向某个服务程序发udp包,请问这些线程怎么动态创建和控制!!
  • 2017-06-05 在线程中发送自定义消息为什么不响应
  • 2017-06-05 Aexe调用Bdll,Bdll再调用Cdll,那么Aexe能传一个内存地址给Cdll吗?
  • 2017-06-05 请问如何用一个程序向另外一个程序发送消息使得该程序中的按扭可用?
  • 2017-06-04 当前窗口不重绘问题
  • 2017-06-04 关于接口名称与接口方法的关系??
  • 2017-06-05 安装钩子成功,UnhookWindowsHookEx失败返回错误1404
  • 2017-06-05 ocx创建一个对话框//怎么在调用的资源工具箱里添加之后,拖到对话框上个黑圈?

文章分类

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

最近更新的内容

    • “某某程序遇到问题需要重启,表示歉意,请填写问题描述,发送”,这个是怎么做的?
    • 多短信任务分配
    • DLL中到底能不能使用线程,有待讨论!我是没有成功过,一创建就出错。
    • MFC读取xml中的数据到一个数组
    • VC2008操作WEBSERVICE错哪了,简单的例子请高手帮看下
    • 请教钩子函数
    • 大家帮忙看看这段代码有什么问题吗?高分!!!
    • 怎么控制另一个程序中的按钮,或者其它控件
    • 关于ActiveX的问题?
    • 关于COM的内存问题!诚请edyang及vcmfc等高手一起讨论!

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

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