如何使用 HTTP 下載檔案
出自VFP Wiki
(修訂版本間差異)
在2005年11月11日 (五) 23:15所做的修訂版本
來源: http://support.microsoft.com/default.aspx?scid=kb;en-us;311306
此文章使用了兩個方法,一個是使用 urlmon.dll,另外一個則是使用 msinet active x.
using urlmon.dll
*----------------------------------- * AUTHOR: Trevor Hancock (TREVORH@MICROSOFT.COM) * CREATED: 10/24/01 03:07:28 PM for Microsoft Knowledge Base article Q311306 * ABSTRACT: Downloads a Web page and then parses the Web page to extract a stock quote. * * DETAILS: This code uses the function URLDownloadToFile(), located in * Urlmon.dll. This function downloads a Web page from * http://moneycentral.msn.com. Specifically, the function calls * "http://moneycentral.msn.com/scripts/webquote.dll?iPage=lqd&Symbol=", * passing to the Web page a stock symbol that the user types into THISFORM.txtSYMBOL. * The Web site returns an entire page of information about the * stock, which this code then parses to extract the current quote. *----------------------------------- PUBLIC ofrmURLMON ofrmURLMON = NEWOBJECT("frmURLMON") ofrmURLMON.SHOW RETURN ************************** DEFINE CLASS frmURLMON AS FORM HEIGHT = 83 WIDTH = 317 AUTOCENTER = .T. BORDERSTYLE = 2 CAPTION = "Stock Quote via URLMON.DLL" MAXBUTTON = .F. MINBUTTON = .F. NAME = "frmURLMON" ADD OBJECT txtsymbol AS TEXTBOX WITH ; FONTNAME = "Verdana", ; VALUE = "MSFT", ; FORMAT = "!", ; HEIGHT = 26, ; LEFT = 94, ; TABINDEX = 1, ; TOP = 7, ; WIDTH = 100, ; NAME = "txtSymbol" ADD OBJECT cmdGetQuote AS COMMANDBUTTON WITH ; TOP = 7, ; LEFT = 206, ; HEIGHT = 27, ; WIDTH = 94, ; FONTNAME = "Verdana", ; CAPTION = "Get Quote", ; TABINDEX = 2, ; NAME = "cmdGetQuote" ADD OBJECT lblSymbol AS LABEL WITH ; AUTOSIZE = .T., ; FONTNAME = "Verdana", ; CAPTION = "Stock Symbol:", ; HEIGHT = 16, ; LEFT = 3, ; TOP = 12, ; WIDTH = 90, ; TABINDEX = 5, ; NAME = "lblSymbol" ADD OBJECT txtQuote AS TEXTBOX WITH ; FONTNAME = "Verdana", ; HEIGHT = 23, ; LEFT = 94, ; READONLY = .T., ; TOP = 39, ; WIDTH = 100, ; NAME = "txtQuote" ADD OBJECT lblQuote AS LABEL WITH ; AUTOSIZE = .T., ; FONTNAME = "Verdana", ; CAPTION = "Quote:", ; HEIGHT = 16, ; LEFT = 47, ; TOP = 42, ; WIDTH = 46, ; TABINDEX = 5, ; NAME = "lbQuote" PROCEDURE cmdGetQuote.CLICK LOCAL lcQuote AS STRING, ; lcTempTxtFile AS STRING, ; lnGetResults AS INTEGER, ; lcURL AS STRING lcQuote = "" *-- Set up a variable referring to a temp .TXT file. *-- Uses the current VFP TEMP DIR [SYS(2023)] *-- and a random file name [SYS(2015)] lcTempTxtFile = FORCEEXT(ADDBS(SYS(2023)) + SYS(2015), "TXT") lnGetResults = 0 lcGetURl = "http://moneycentral.msn.com/scripts/webquote.dll?iPage=qd&Symbol=" + ; ALLT(THISFORM.txtsymbol.VALUE) DECLARE LONG URLDownloadToFile IN URLMON.DLL ; LONG, STRING, STRING, LONG, LONG WITH THISFORM *-- Get the quote using the Urlmon.dll and store it *-- to a temp .TXT file. *-- This function returns non-zero if it fails. lnGetResults = URLDownloadToFile(0, lcGetURl, lcTempTxtFile, 0, 0) IF lnGetResults # 0 MESSAGEBOX("Download Failed",0,"") RETURN .F. ENDIF *-- Read the Web page into a variable, and then erase it. lcQuote = FILETOSTR(lcTempTxtFile) ERASE (lcTempTxtFile) *-- Grab the quote from the Web page. If in VFP 7.0 or later, we use the new *-- STREXTRACT() function to grab the data between two delimiters. *-- In VFP 6.0, use SUBSTR() to get the data, and then trim off any *-- trailing HTML with the TRANSFORM() AND VAL() functions. IF VERSION(5) => 700 lcQuote = STREXTRACT(lcQuote, [Last ], [ ]) ELSE *-- Extract the quote from the HTML lcQuote = SUBSTR(lcQuote, ATC([Last ], lcQuote) + 16, 8) *-- Trim off the trailing HTML. VAL() will only return the numbers, *-- which we then change to a string with TRANSFORM() lcQuote = TRANSFORM(VAL(lcQuote)) ENDIF *-- Put the quote in the text box. .txtQuote.VALUE = "$" + lcQuote ENDWITH ENDPROC ENDDEFINE ****************
using msinet active x control
*----------------------------------- * AUTHOR: Trevor Hancock (TREVORH@MICROSOFT.COM) * CREATED: 10/24/01 03:07:28 PM for Microsoft Knowledge Base article Q311306 * ABSTRACT: Downloads a Web page and then parses it to extract a stock quote. * * DETAILS: This code uses the Msinet.ocx ActiveX control to * download a Web page from http://moneycentral.msn.com. Specifically, * the function calls "http://moneycentral.msn.com/scripts/webquote.dll?iPage=lqd&Symbol=", * passing to the Web page a stock symbol that the user types into THISFORM.txtSYBMOL. * The Web site returns an entire page of information about the * stock, which this code then parses to extract the current quote. *----------------------------------- PUBLIC ofrmMSINET ofrmMSINET = NEWOBJECT("frmMSINET") ofrmMSINET.SHOW RETURN ************************** DEFINE CLASS ocxMSINET AS OLECONTROL OLECLASS = "InetCtls.Inet.1" ENDDEFINE ************************** DEFINE CLASS frmMSINET AS FORM HEIGHT = 70 WIDTH = 304 AUTOCENTER = .T. BORDERSTYLE = 3 CAPTION = "Stock Quote via MSINET.OCX" MAXBUTTON = .F. MINBUTTON = .F. NAME = "frmMSINET" ADD OBJECT MSINET AS ocxMSINET WITH ; TOP = 37, ; LEFT = 234, ; HEIGHT = 100, ; WIDTH = 100, ; NAME = "MSINET" ADD OBJECT txtsymbol AS TEXTBOX WITH ; FONTNAME = "Verdana", ; VALUE = "MSFT", ; FORMAT = "!", ; HEIGHT = 26, ; LEFT = 94, ; TABINDEX = 1, ; TOP = 7, ; WIDTH = 100, ; NAME = "txtSymbol" ADD OBJECT cmdGetQuote AS COMMANDBUTTON WITH ; TOP = 7, ; LEFT = 206, ; HEIGHT = 27, ; WIDTH = 94, ; FONTNAME = "Verdana", ; CAPTION = "Get Quote", ; TABINDEX = 2, ; NAME = "cmdGetQuote" ADD OBJECT lblSymbol AS LABEL WITH ; AUTOSIZE = .T., ; FONTNAME = "Verdana", ; CAPTION = "Stock Symbol:", ; HEIGHT = 16, ; LEFT = 3, ; TOP = 12, ; WIDTH = 90, ; TABINDEX = 5, ; NAME = "lblSymbol" ADD OBJECT txtQuote AS TEXTBOX WITH ; FONTNAME = "Verdana", ; HEIGHT = 23, ; LEFT = 94, ; READONLY = .T., ; TOP = 39, ; WIDTH = 100, ; NAME = "txtQuote" ADD OBJECT lblQuote AS LABEL WITH ; AUTOSIZE = .T., ; FONTNAME = "Verdana", ; CAPTION = "Quote:", ; HEIGHT = 16, ; LEFT = 47, ; TOP = 42, ; WIDTH = 46, ; TABINDEX = 5, ; NAME = "lbQuote" PROCEDURE cmdGetQuote.CLICK LOCAL lcQuote AS STRING, ; lcURL AS STRING lcQuote = "" lcGetURl = "http://moneycentral.msn.com/scripts/webquote.dll?iPage=qd&Symbol=" + ; ALLT(THISFORM.txtsymbol.VALUE) WITH THISFORM *-- Get the quote using the Msinet.ocx ActiveX control. *-- The control will load it directly into a variable. lcQuote = .MSINET.OpenURL(lcGetURl) IF EMPTY(lcQuote) MESSAGEBOX("Download Failed.",0,"") RETURN .F. ENDIF *-- Grab the quote from the Web page. If in VFP 7.0 or later, we use the new *-- STREXTRACT() function to grab the data between two delimiters. *-- In VFP 6.0, use SUBSTR() to get the data, and then trim off any *-- trailing HTML with the TRANSFORM() AND VAL() functions. IF VERSION(5) => 700 lcQuote = STREXTRACT(lcQuote, [Last ], [ ]) ELSE *-- Extract the quote from the HTML lcQuote = SUBSTR(lcQuote, ATC([Last ], lcQuote) + 16, 8) *-- Trim off the trailing HTML. VAL() will only return the numbers, *-- which we then change to a string with TRANSFORM() lcQuote = TRANSFORM(VAL(lcQuote)) ENDIF *-- Put the quote in the text box. .txtQuote.VALUE = "$" + lcQuote ENDWITH ENDPROC ENDDEFINE **************************