保存网页文件而不显示对话框 - [编程]

'转自“都市夜猫 dtfdkf”

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://dkfdtf.blogbus.com/logs/20284731.html

通常我们使用 IE 或 WebBrowse 对象来保存当前网页到本地文件的代码如下:

m.cSrc = 'http://www.163.com'
m.cTag = 'c:/163.htm'
 
m.oe = CreateObject
( 'InternetExplorer.Application' )
m.oe.Navigate( m.cSrc )
m.oe.
Visible
= .T.
WAIT WINDOW TIMEOUT 2
m.oe.ExecWB( 4, 1, m.cTag )
 
但这里有一个问题,执行 ExecWB 时会弹出一个用户确认对话框,MSDN  指出第二个参数可用的取值为:
typedef enum 
{
    OLECMDEXECOPT_DODEFAULT             = 0,
    OLECMDEXECOPT_PROMPTUSER           = 1,
    OLECMDEXECOPT_DONTPROMPTUSER   = 2,
    OLECMDEXECOPT_SHOWHELP              = 3
} OLECMDEXECOPT;
然而无论如何取值都无法取消这个对话框,按照 ms 的解释(http://support.microsoft.com/kb/244757/en-us),这个对话框是无法取消的,只能用 URLDownloadToFile 看来替代。但是,URLDownloadToFile API 只能将网页保存为 html 格式的文件,而无法用 MHTML Document 格式来保存。

今天看到一种使用 CDO.Message 对象来保存为 mht 格式的方法:

#define aveCreateNotExist     1
#
define adSaveCreateOverWrite 2

m.cSrc = 'http://www.microsoft.com'
m.cFile = 'c:/'

m.cdo =
CreateObject( 'CDO.Message' )
m.cdo.CreateMHTMLBody( m.cSrc, 0, '', '' )
  && 0 - CdoMHTMLFlags
m.ado = m.cdo.GetStream()
m.cTitle = m.ado.ReadText()
m.cTitle =
STREXTRACT( m.cTitle, '<title>', '</title>', 1, 3 )
m.ado.SaveToFile( m.cFile + m.cTitle + '.mht', adSaveCreateOverWrite )

STORE NULL TO m.ado, m.cdo

这是其中的关键代码,要正确处理所有情况,可能需要先清除网页缓存,判断 title 是否合法,设置保存的字符集等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值