如何读出HTML文件 用VS2005做一个pocket pc上的ie,如何读出HTML文件啊,谁有没有现成的例子啊,急需,在线等 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 HTML文件就当成普通文件读进内存,再进行解析吧然后根据解析的结果进行显示 不会吧,这么复杂啊,我看了一下,MFC里面有个类叫做Chtmlview的吧,好像有些函数,什么navigate2什么的,好像把路径名给出就可以读出来的,不知道有没有这样的SDK能不能实现啊 首先找到IHTMLDocument2 接口,然后依次枚举文档的左右节点,利用接点的get_innerHTML获得代码.这里是我以前写的一个程序里面的判断,只是取出了body的html代码//根据webbrowser的窗口句柄获得IHTMLDocument2接口BOOL GetIHtmlDocPtr(HWND hwndWeb,IHTMLDocument2**ppHtmlDoc){ UINT nMsg = ::RegisterWindowMessage(_T("WM_HTML_GETOBJECT")); LRESULT lRes; ::SendMessageTimeout( hwndWeb, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*) &lRes ); HRESULT hr = ObjectFromLresult ( lRes, IID_IHTMLDocument2, 0 , (LPVOID *)ppHtmlDoc); return SUCCEEDED(hr);}//根据接口获得hTML代码 CComPtr<IHTMLElement> pElement; pIHtmlDoc->get_body(&pElement); CComBSTR strHtml; pElement->get_innerHTML(&strHtml); 你是想要做什么功能,Chtmlview,webbrowser都可以显示,如果不显示的话你就直接用wininit方法好了 #include "winsock2.h"#include "stdio.h"#include "Wininet.h" #pragma comment (lib,"Wininet.lib")void main(){ FILE *fw; fw=fopen("log.log","w"); int i,k;HINTERNET hNet = ::InternetOpen("Google page", //当HTTP协议使用时,这个参数随意赋值 PRE_CONFIG_INTERNET_ACCESS, //访问类型指示Win32网络函数使用登记信息去发现一个服务器。 NULL, INTERNET_INVALID_PORT_NUMBER, //使用INTERNET_INVALID_PORT_NUMBER相当于提供却省的端口数。 0 //标志去指示使用返回句句柄的将来的Internet函数将"不"为回调函数发送状态信息 ) ;HINTERNET hUrlFile = ::InternetOpenUrl(hNet, //从InternetOpen返回的句柄 "http://", //需要打开的URL NULL, //用来向服务器传送额外的信息,一般为NULL 0, //用来向服务器传送额外的信息,一般为 0 INTERNET_FLAG_RELOAD, //InternetOpenUrl行为的标志 0) ; //信息将不会被送到状态回调函数char buffer[1024] ;char temp_buffer[100];char ip[16];int ip_len;DWORD dwBytesRead = 0;BOOL bRead = ::InternetReadFile(hUrlFile, //InternetOpenUrl返回的句柄 buffer, //保留数据的缓冲区 sizeof(buffer), &dwBytesRead); //指向包含读入缓冲区字节数的变量的指针; //如果返回值是TRUE,而且这里指向0,则文件已经读到了文件的末尾。::InternetCloseHandle(hUrlFile) ;::InternetCloseHandle(hNet) ;fprintf(fw,"%s",buffer);memset(ip,0,16);memset(temp_buffer,0,100); for(i=0;i<100;i++) { temp_buffer[i]=buffer[i+5]; if((buffer[i+5]==' ')&&(buffer[i+6]=='-')&&(buffer[i+7]=='-')&&(buffer[i+8]=='>')) break; } k=i; printf("%s\n",temp_buffer); char* pszSrc = new char[k + 1]; int len_src = Base64Decode(pszSrc, temp_buffer); printf("%s",pszSrc); printf("\n"); for(i=0;i<k;i++) { if(pszSrc[i]!=':') ip[i]=pszSrc[i]; else break; } ip_len=i; printf("%s\n",ip); fclose(fw);} 四个API,求解释~ 请教VC问题? sql server 2005的TOP问题 中国队赢了 发个帖庆祝一下【太穷了 实在无分儿可散了】 请解:关于LOG4CXX使用问题 关于vActiveX中vEdit框中的光标不能移动的问题 问下关于模板类头文件的使用问题,分用完了,各位大大见谅 来这里混混! 能不能不用界面直接生成WebBrowser std::streambuf怎么用? 求助,如何实现子窗口弹出后,父窗口关闭? 用drectx sdk 如何编写对于视频文件的处理程序
然后根据解析的结果进行显示
BOOL GetIHtmlDocPtr(HWND hwndWeb,IHTMLDocument2**ppHtmlDoc)
{
UINT nMsg = ::RegisterWindowMessage(_T("WM_HTML_GETOBJECT"));
LRESULT lRes;
::SendMessageTimeout( hwndWeb, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*) &lRes );
HRESULT hr = ObjectFromLresult ( lRes, IID_IHTMLDocument2, 0 , (LPVOID *)ppHtmlDoc);
return SUCCEEDED(hr);
}//根据接口获得hTML代码
CComPtr<IHTMLElement> pElement;
pIHtmlDoc->get_body(&pElement);
CComBSTR strHtml;
pElement->get_innerHTML(&strHtml);
#include "stdio.h"
#include "Wininet.h"
#pragma comment (lib,"Wininet.lib")void main()
{
FILE *fw;
fw=fopen("log.log","w"); int i,k;HINTERNET hNet = ::InternetOpen("Google page", //当HTTP协议使用时,这个参数随意赋值
PRE_CONFIG_INTERNET_ACCESS, //访问类型指示Win32网络函数使用登记信息去发现一个服务器。
NULL,
INTERNET_INVALID_PORT_NUMBER, //使用INTERNET_INVALID_PORT_NUMBER相当于提供却省的端口数。
0 //标志去指示使用返回句句柄的将来的Internet函数将"不"为回调函数发送状态信息
) ;HINTERNET hUrlFile = ::InternetOpenUrl(hNet, //从InternetOpen返回的句柄
"http://", //需要打开的URL
NULL, //用来向服务器传送额外的信息,一般为NULL
0, //用来向服务器传送额外的信息,一般为 0
INTERNET_FLAG_RELOAD, //InternetOpenUrl行为的标志
0) ; //信息将不会被送到状态回调函数char buffer[1024] ;
char temp_buffer[100];
char ip[16];int ip_len;
DWORD dwBytesRead = 0;
BOOL bRead = ::InternetReadFile(hUrlFile, //InternetOpenUrl返回的句柄
buffer, //保留数据的缓冲区
sizeof(buffer),
&dwBytesRead); //指向包含读入缓冲区字节数的变量的指针;
//如果返回值是TRUE,而且这里指向0,则文件已经读到了文件的末尾。::InternetCloseHandle(hUrlFile) ;
::InternetCloseHandle(hNet) ;fprintf(fw,"%s",buffer);memset(ip,0,16);
memset(temp_buffer,0,100); for(i=0;i<100;i++)
{
temp_buffer[i]=buffer[i+5];
if((buffer[i+5]==' ')&&(buffer[i+6]=='-')&&(buffer[i+7]=='-')&&(buffer[i+8]=='>'))
break;
} k=i;
printf("%s\n",temp_buffer); char* pszSrc = new char[k + 1];
int len_src = Base64Decode(pszSrc, temp_buffer);
printf("%s",pszSrc);
printf("\n"); for(i=0;i<k;i++)
{
if(pszSrc[i]!=':')
ip[i]=pszSrc[i];
else
break;
}
ip_len=i; printf("%s\n",ip); fclose(fw);}