線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3986
推到 Plurk!
推到 Facebook!

呼叫URLMON.PAS的URLDownloadToFile的問題?

 
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-10-12 19:33:41 IP:218.163.xxx.xxx 未訂閱
當我呼叫URLMON.PAS的URLDownloadToFile以下載檔案時,總會被趨勢科技的防獨軟體擋下,並說程式是病毒檔而被刪除,唯有關掉趨勢科技的防獨軟體,才能順利呼叫URLMON.PAS的URLDownloadToFile以下載檔案,為什麼會這樣?有什麼方式可以不關趨勢科技的防獨軟體又能順利呼叫URLMON.PAS的URLDownloadToFile以下載檔案呢?
awen
一般會員


發表:0
回覆:4
積分:0
註冊:2006-10-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-10-13 19:22:50 IP:221.234.xxx.xxx 未訂閱
應該是趨勢科技的軟件在URLMON.DLL裏面攔截了這個函數,儅發現有程式調用這個函數的時候,就報警了。如果趨勢攔截了這個函數,那只能用其他方法替代。建議您使用Delphi自帶的Indy組件中的TIdHTTP組件來下載文件。代碼範例如下:
uses IdHTTP;
procedure TYourClass.Someprocedure(const FURL, LocalFileName: string);
var
http: TIdHTTP;
MemStream: TFileStream;
Options: TIdHTTPOptions;
begin
http := TIdHTTP.Create;//創建TIdHTTP組件。
try
MemStream := TFileStream.Create(LocalFileName, fmCreate);//創建本地文件流對象。
try
http.ConnectTimeout := 30000;//設置http連接超時時間。這裡可以按照您的需求自己設定。
http.ReadTimeout := 120000;//設置讀取http超時時間。
http.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)';//仿造IE進行下載。
http.HandleRedirects := True;//允許服務器發送跳轉Response后,IdHTTP自動下載新地址。
if hoForceEncodeParams in http.HTTPOptions then//這個代碼是取消IdHTTP自己對URL的編碼功能,因爲FURL可能傳入已經編碼過的URL地址。如果您的FURL參數中,傳入的字符串未做URLEncode的話,這個If和一下的begin end之間的代碼可以註釋掉。
begin
Options := http.HTTPOptions;
Exclude(Options, hoForceEncodeParams);
http.HTTPOptions := Options;
end;
try
http.Get(FURL, MemStream);//執行下載。
except
//加入您的異常處理代碼
end;
finally
MemStream.Free;
end;
finally
http.Free;
end;
end;

上述代碼在XP Pro SP2,Delphi7,Indy10(2006年9月9日的Snapshot版本)中測試通過。
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-10-16 20:11:38 IP:218.163.xxx.xxx 未訂閱
awen你好:
我不用indy來做,是因裝indy 10後不能 compile 其ftpdemo.dpr(其不能之錯誤訊息看不懂),但indy 9可以,其ftp元件的list方法似乎做了太多其結果指定給listbox後,listbox看起來很不清楚,不像wininet api可以只取檔案或目錄的部份或全部資訊,比較有彈性
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-10-16 20:16:55 IP:218.163.xxx.xxx 未訂閱
awen你好:
我不用indy來做,是因裝indy 10後不能 compile 其ftpdemo.dpr(其不能之錯誤訊息看不懂),但indy 9可以,其ftp元件的list方法似乎做了太多其結果指定給listbox後,listbox看起來很不清楚,不像wininet api可以只取檔案或目錄的部份或全部資訊,比較有彈性
awen
一般會員


發表:0
回覆:4
積分:0
註冊:2006-10-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-10-18 12:52:03 IP:221.234.xxx.xxx 未訂閱
這是因爲Indy10對很多事件的聲明都發生了變化,比如,最新的Indy10 DevSnapshot on 2006-9-9裏面,所有Indy Component的祖先類,TIdComponent修改了OnWorkBegin,OnWork的聲明,其中,AWorkMax和AWorkCount已經由Integer該聲明成了Int64,以支持IdFTP等組建上傳大於2GB文件的功能。這只是一個例子,Indy10的最新Snapshot裏面改動了好多東西。但是,他的Demo不能編譯的問題,一般就是Demo裏面的聲明沒有修改過來導致的。所以,如果您使用的是動態創建的代碼,則不會有任何問題。我給您輸入的代碼是動態創建對象,所以不存在您提到的那些問題,您可以放心使用。
系統時間:2024-04-29 14:12:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!