下载文件的问题? ( 积分: 200 )

  • 主题发起人 主题发起人 luqiao
  • 开始时间 开始时间
L

luqiao

Unregistered / Unconfirmed
GUEST, unregistred user!
函数如下(大富翁里借用的):
function tfxz.UrlGetFile(URL, AFile: string; v: boolean): integer;
var
hFile, HInet: HINTERNET;
Buffer: array[0..511] of Char;
BufRead: Cardinal;
BufSize: Cardinal;
fs: tfilestream;
begin
Result := 0;
HInet := InternetOpen('Agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(HInet) then
try
hFile := InternetOpenUrl(HInet, PChar(URL), nil, 0, INTERNET_FLAG_RELOAD + INTERNET_FLAG_KEEP_CONNECTION, 0);
if Assigned(hFile) then
try
BufSize := SizeOf(Buffer);
fs := TFileStream.Create(AFile, fmCreate);
with fs do
try
while (not downbool) and (InternetReadFile(hFile, @Buffer, BufSize, BufRead)) and (BufRead > 0) do
begin
Write(Buffer, BufRead);
if v then
begin
application.ProcessMessages;
fxz.ProgressBar1.Position := fs.Size * 100 div sjsize;
fxz.label3.caption := inttostr(fs.size);
end;
end;
Result := fs.Size;
finally
Free;
end;
finally
InternetCloseHandle(hFile);
end;
finally
InternetCloseHandle(hinet);
end;
end;

主FORM create就开始做:
if urlgetfile('http://game.d3xvet.com/web/zc.txt', 'zc.txt', false) = 0 then
begin
msgbox1('网络', '服务器忙' + #13 + '请重新登录', 1,suiinformation);
application.Terminate;
exit;
end;
如果下载不成功就直接提示并退出,问题怪在如果我刚开机器就直接运行这个程序,一定是下载不到文件的,必须开一下IE浏览器以后(以后可以关掉IE)才能下载到,为什么要调用IE来做个初始化呢?不调IE的话怎么在程序里解决?

盼急救!
 
函数如下(大富翁里借用的):
function tfxz.UrlGetFile(URL, AFile: string; v: boolean): integer;
var
hFile, HInet: HINTERNET;
Buffer: array[0..511] of Char;
BufRead: Cardinal;
BufSize: Cardinal;
fs: tfilestream;
begin
Result := 0;
HInet := InternetOpen('Agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(HInet) then
try
hFile := InternetOpenUrl(HInet, PChar(URL), nil, 0, INTERNET_FLAG_RELOAD + INTERNET_FLAG_KEEP_CONNECTION, 0);
if Assigned(hFile) then
try
BufSize := SizeOf(Buffer);
fs := TFileStream.Create(AFile, fmCreate);
with fs do
try
while (not downbool) and (InternetReadFile(hFile, @Buffer, BufSize, BufRead)) and (BufRead > 0) do
begin
Write(Buffer, BufRead);
if v then
begin
application.ProcessMessages;
fxz.ProgressBar1.Position := fs.Size * 100 div sjsize;
fxz.label3.caption := inttostr(fs.size);
end;
end;
Result := fs.Size;
finally
Free;
end;
finally
InternetCloseHandle(hFile);
end;
finally
InternetCloseHandle(hinet);
end;
end;

主FORM create就开始做:
if urlgetfile('http://game.d3xvet.com/web/zc.txt', 'zc.txt', false) = 0 then
begin
msgbox1('网络', '服务器忙' + #13 + '请重新登录', 1,suiinformation);
application.Terminate;
exit;
end;
如果下载不成功就直接提示并退出,问题怪在如果我刚开机器就直接运行这个程序,一定是下载不到文件的,必须开一下IE浏览器以后(以后可以关掉IE)才能下载到,为什么要调用IE来做个初始化呢?不调IE的话怎么在程序里解决?

盼急救!
 
uses UrlMon;
// update software
function UpdateSoftWare: boolean;
begin
try
Result := UrlDownloadToFile(nil, PChar(source), PChar(appName), 0, nil) = 0;
if Result then
begin
msgconfim('软件更新成功[ ' + appName + ' ]!', btconfirmation);
SHELLEXECUTE(APPLICATION.Handle,'OPEN', pchar(appName), nil, nil, SW_SHOW);
WriteReg('ProdSys',application.ExeName);
APPLICATION.Terminate;
end
else
Msgconfim('更新文件错误!', bterror);
except
Msgconfim('网络错误,找不到网络!', bterror);
result := false;
end;
end;
 
UrlMon
这个单元里面有很多相关API,你先看看
 
TO JFYES
UrlDownloadToFile接收过程中 屏幕死锁,不好用啊
还有我上面用的函数,我想知道为什么要调用一下IE才有用,不会是我刚启动机器就去运行程序的原因吧
 
1.屏幕死锁
Application.ProcessMessages
2.InternetOpenUrl,可能是用代里吧?
HInet := InternetOpen('Agent', INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, nil, nil, 0);
 
好像大多数的下载软件都必须调用打开IE才行,IE有初始化打开显示和链接网站的。
 
HInet := InternetOpen('Agent', INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, nil, nil, 0);
你是说换个参数吗?我试试,还有,我是想知道为什么要调用一下IE才有用,不会是我刚启动机器就去运行程序的原因吧

结果不很满意,时间太长,结帖
 

Similar threads

S
回复
0
查看
590
SUNSTONE的Delphi笔记
S
S
回复
0
查看
687
SUNSTONE的Delphi笔记
S
I
回复
0
查看
380
import
I
I
回复
0
查看
832
import
I
后退
顶部