私はこれをwininet.dll関数を使って行っています。残念ながら私の雇用主が所有しているので、コードを貼り付けることはできません。
InternetOpenとInternetOpenUrlを使用してダウンロードを開始し、HttpQueryInfoLongを使用してコンテンツの長さを取得し、InternetReadFileを繰り返し呼び出してバッファにデータを読み込み(私は128kバッファを使用します)、データをファイルに書き込み、プログレスバーをあなたが行く。
宣言あなたが始めるために:
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function HttpQueryInfo Lib "wininet.dll" Alias "HttpQueryInfoA" (ByVal hHttpRequest As Long, ByVal lInfoLevel As Long, ByRef sBuffer As Any, ByRef lBufferLength As Long, ByRef lIndex As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByRef Buffer As Any, ByVal lNumberOfBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hInternet As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
Private Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Private Const INTERNET_FLAG_RELOAD = &H80000000
Private Const INTERNET_FLAG_KEEP_CONNECTION = &H400000 ' use keep-alive semantics - required for NTLM proxy authentication
Private Const HTTP_QUERY_CONTENT_LENGTH = 5
Private Const HTTP_QUERY_FLAG_NUMBER = &H20000000
何か明確化が必要な場合は、コメントを投稿してください。
プログレスバーを表示するのは簡単です。難しいのは、ダウンロード自体の進捗状況を把握することです。つまり、現在のダウンロードステータスを照会して、10%完了したか25%完了したかなどを確認する方法があるかどうかを知りたいと思います。現在、私は0%完了時のみ知っています100%完了しました。それは私のユーザーにとってあまり役に立ちません。 – mwolfe02
更新されたレスポンスを参照してください。それはあまりありませんが、それは何かです。 – JimmyPena