IHTMLDocument2问题。

ghiewa 2004-03-22 08:46:51
问题:
打开本地的htm文件取得其中的title,使用纯sdk的方式

可是下面代码通不过
#include <mshtml.h>
#include <Exdisp.h>
#include <COMDEF.H>
#include <iostream>
#include <string>

using std::string;
using std::cout;

void main()
{
string result;//
_variant_t a,b,c,d;
IWebBrowser2Ptr pBsw;
IHTMLElementCollectionPtr allLinks;
IHTMLElementPtr link;
IDispatchPtr linkDisp;
IDispatchPtr pDisp;
long len;
_bstr_t source="e:\\q176792.htm";//include <comdef.h>
BSTR url;
pBsw->Navigate(source.copy(),&a,&b,&c,&d);
//pDoc->open((BSTR)source,a,b,c,&linkDisp);
pBsw->get_Document(&pDisp);
IHTMLDocument2Ptr pDoc(pDisp);
pDoc->get_links(&allLinks); //得到页面上所有链接集合
allLinks->get_length(&len);
for(int i=0;i<len;++i)
{
tagVARIANT v1;
v1.vt = VT_INT;
memcpy(&v1.iVal,&i,sizeof(int));
allLinks->item(v1, v1, &linkDisp);//得到其中一个IDispatch
if(linkDisp!=NULL)
{ //得到这个链接元素link->get_innerHTML(&url);
linkDisp->QueryInterface(__uuidof(IHTMLElement), (void**)&link);
link->toString(&url);

}
}
}
...全文
96 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanfyj 2004-04-03
  • 打赏
  • 举报
回复
94
itmaster 2004-04-03
  • 打赏
  • 举报
回复
http://www.csdn.net/develop/Read_Article.asp?Id=22030
ghiewa 2004-04-03
  • 打赏
  • 举报
回复
看来不学点 com 是解决不了问题了
ghiewa 2004-04-03
  • 打赏
  • 举报
回复
参考 walkall  写了下面:怎么还不行啊
#include <windows.h>
#include <tchar.h>
#include <wininet.h>
#include <urlmon.h>
#include <mshtml.h>
#include <iostream.h>
#include <comdef.h>
#include <assert.h>

#include <servprov.h>

#include <mshtmdid.h>

void PrintBSTR(_bstr_t _bstr)
{
TCHAR szTag[2048];

LPOLESTR wszTag = _bstr;
UINT uLen = _bstr.length();
// CODE REVIEW: Dangerous API. Ensure proper output buff size. OK.
int iBytes = WideCharToMultiByte(CP_ACP, 0, wszTag, uLen,
szTag, 2048, NULL, NULL);

if (iBytes < 2047)
{
szTag[uLen] = '\0';
}
else
{
szTag[2047] = '\0';
}
cout << szTag << endl;
}

int getHTMLTitle(LPTSTR szUrl)
{
HRESULT hr = NOERROR;
IHTMLDocument2* m_pMSHTML;
LPTSTR m_szURL=szUrl;

if (FAILED(hr = CoInitialize(NULL)))
{
return -1;
}

// Create an instance of an dynamic HTML document
if (FAILED(hr = CoCreateInstance( CLSID_HTMLDocument, NULL,
CLSCTX_INPROC_SERVER, IID_IHTMLDocument2,
(LPVOID*)&m_pMSHTML )))
{
goto Error;
}

OLECHAR wszURL[MAX_PATH*sizeof(OLECHAR)];
if (0 == MultiByteToWideChar(CP_ACP, 0, m_szURL, -1, wszURL, MAX_PATH*sizeof(OLECHAR)))
return -1;

LPPERSISTFILE pPF;
// MSHTML supports file persistence for ordinary files.
if ( SUCCEEDED(hr = m_pMSHTML->QueryInterface(IID_IPersistFile, (LPVOID*) &pPF)))
{
TCHAR szBuff[MAX_PATH];
hr = pPF->Load(wszURL, 0);
pPF->Release();
}

//I want to do
BSTR title;
m_pMSHTML->get_title(&title);
PrintBSTR(title);
Error:

CoUninitialize();

if (FAILED(hr))
{
return -1;
}
else
{
return 0;
}
}

int main()
{
LPTSTR szURL="e:\\实现Word97自动化.htm";
getHTMLTitle(szURL);
}

// CODE REVIEW: Dangerous API. Protect for input string not null terminated.
// if (0 == MultiByteToWideChar(CP_ACP, 0, m_szURL, -1, wszURL, MAX_PATH*sizeof(OLECHAR)))
UINT nLen = 0;
if (FAILED(StringCchLength(m_szURL, MAX_PATH, &nLen)))
return E_FAIL;
if (0 == MultiByteToWideChar(CP_ACP, 0, m_szURL, nLen, wszURL, MAX_PATH*sizeof(OLECHAR)))
return E_FAIL;
ghiewa 2004-04-01
  • 打赏
  • 举报
回复
先试试看
chenmu_2002 2004-04-01
  • 打赏
  • 举报
回复
string result;//
_variant_t a,b,c,d;
IWebBrowser2Ptr pBsw;
IHTMLElementCollectionPtr allLinks;
IHTMLElementPtr link;
IDispatchPtr linkDisp;
IDispatchPtr pDisp;
long len;
BSTR url;
pBsw->get_Document(&pDisp);
IHTMLDocument2Ptr pDoc(pDisp);
pDoc->get_links(&allLinks); //得到页面上所有链接集合
allLinks->get_length(&len);
for(int i=0;i<len;++i)
{
tagVARIANT v1;
v1.vt = VT_INT;
memcpy(&v1.iVal,&i,sizeof(int));
allLinks->item(v1, v1, &linkDisp);//得到其中一个IDispatch
if(linkDisp!=NULL)
{ //得到这个链接元素link->get_innerHTML(&url);
linkDisp->QueryInterface(__uuidof(IHTMLElement), (void**)&link);
link->toString(&url);

}
}
}

这些代码不要放在main中,你可以用SetTimer或postmessage之类做点延迟
蒋晟 2004-03-24
  • 打赏
  • 举报
回复
去看walkall示例
http://msdn.microsoft.com/downloads/samples/internet/browser/walkall/default.asp
ghiewa 2004-03-23
  • 打赏
  • 举报
回复
to newkey007(无限天空)

能提提 具体怎么解决 我对html shell编程刚开始学习
天限天空 2004-03-22
  • 打赏
  • 举报
回复
Navigate 是需要时间的

Sink Event

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧