
今回は、Autoit で作成した「ファイルダウンローダー」のサンプルコードを紹介します。
シンプルで簡単に操作できるファイルダウンローダーですので、参考にしてみてください。
使用する主な関数:
- InetGet = インターネットからファイルをダウンロード
- InetGetSize = インターネット上のファイルのサイズを byte 単位で返す
- InetGetInfo = InetGet() から返されるハンドルの詳細なデータを返す
- InetClose = InetGet()から返されるハンドルを閉じる
- _PathSplit = パスをドライブ、ディレクトリ、ファイル名、拡張子に分割
- _ByteSuffix = ファイルサイズを返す(公式サイトのフォーラムから引用)
https://www.autoitscript.com/forum/topic/130848-function-to-dynamically-format-size-to-kbmbgbtb/
「ファイルダウンローダー」のサンプルコード
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include-once
; 「ファイルダウンローダー」 サンプルコード By wenbang(https://windows-waza.com/)
$Form1 = GUICreate("ファイルダウンローダー", 605, 189, -1, -1, -1, $WS_EX_TOPMOST)
$Input1 = GUICtrlCreateInput("", 56, 16, 401, 20)
$Label1 = GUICtrlCreateLabel("保存場所", 16, 56, 28, 25)
$Label2 = GUICtrlCreateLabel("URL", 16, 16)
$Input2 = GUICtrlCreateInput("", 56, 56, 361, 20)
GUICtrlSetData(-1, @UserProfileDir & "\Downloads")
$Button1 = GUICtrlCreateButton("...", 424, 56, 33, 25)
GUICtrlSetCursor(-1, 0)
$Button2 = GUICtrlCreateButton("ダウンロード", 56, 96, 361, 25)
GUICtrlSetCursor(-1, 0)
$Button3 = GUICtrlCreateButton("中止", 424, 96, 33, 25)
GUICtrlSetCursor(-1, 0)
GUICtrlSetState(-1, $GUI_DISABLE)
$Group1 = GUICtrlCreateGroup("サイズ", 472, 8, 105, 41)
$Label3 = GUICtrlCreateLabel("", 480, 26, 85, 16)
$Group2 = GUICtrlCreateGroup("進行度", 424, 130, 173, 51)
$Label4 = GUICtrlCreateLabel("", 518, 157, 75, 16)
$Progress = GUICtrlCreateProgress(432, 155, 80, 16)
$Group3 = GUICtrlCreateGroup("保存時のファイル名を変更(拡張子を除く)", 56, 130, 361, 51)
$Input3 = GUICtrlCreateInput("", 66, 150, 341, 20)
GUICtrlCreateLabel("Ver 1.0", 508, 65)
GUICtrlSetState(-1, $GUI_DISABLE)
$Label6 = GUICtrlCreateLabel("WEBサイトへ", 498, 103, 75, 16)
GUICtrlSetCursor(-1, 0)
GUICtrlSetFont(-1, 9, 400, 4)
GUICtrlSetColor(-1, 0x0000FF)
GUISetState(@SW_SHOW)
Global $End = 0
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Label6
ShellExecute("https://windows-waza.com/")
Case $Button1
; ダウンロードフォルダーの選択(デフォルトではダウンロードフォルダーを指定しています。)
$var = FileSelectFolder("ファイルの保存場所を選択してください", @UserProfileDir & "\Downloads", 1, "", $Form1)
If $var Then GUICtrlSetData($Input2, $var)
Case $Button2
If GUICtrlRead($Label3) <> 0 Then; 入力した URL のファイルサイズが「0」でないなら下のコードを実行。
$OK = 1
;保存場所に既に同じ名前のファイルが存在するなら上書きを確認。
If CheckFile(GUICtrlRead($Input2) & "\" & FileName(GUICtrlRead($Input1))) Then
$flag = MsgBox(52, "既にファイルが存在します。", "上書きしますか?", 0, $Form1)
If $flag <> 6 Then
$OK = 0
EndIf
EndIf
If $OK Then; 保存場所に既に同じ名前のファイルが存在しない、または上書きを許可したならダウンロードを開始。
; $GUI_DISABLE = コントロールを無効にする。
GUICtrlSetState($Input1, $GUI_DISABLE)
GUICtrlSetState($Button1, $GUI_DISABLE)
GUICtrlSetState($Button2, $GUI_DISABLE)
GUICtrlSetState($Button3, $GUI_ENABLE)
GUICtrlSetData($Button2, "ダウンロード中..."); ボタンの表示名を変更。
; ファイルのダウンロード
FileDownLoad(GUICtrlRead($Input1), GUICtrlRead($Input2) & "\" & FileName(GUICtrlRead($Input1)))
; ダウンロードが完了したらメッセージボックス(5秒で消える)を表示。途中で中止するとメッセージは表示されません。
If $End = 0 Then MsgBox(0, "ファイルのダウンロード", "ファイルのダウンロードが完了しました!", 5, $Form1)
; $GUI_ENABLE = コントロールを有効にする。
GUICtrlSetState($Input1, $GUI_ENABLE)
GUICtrlSetState($Button1, $GUI_ENABLE)
GUICtrlSetState($Button2, $GUI_ENABLE)
GUICtrlSetState($Button3, $GUI_DISABLE)
GUICtrlSetData($Button2, "ダウンロード"); ボタンの表示名を元に戻す。
$End = 0
EndIf
EndIf
EndSwitch
WEnd
; ファイルが既に存在するかどうかを確認
Func CheckFile($File)
If FileExists($File) Then
Return 1
Else
Return 0
EndIf
EndFunc ;==>CheckFile
; ファイルのダウンロード
Func FileDownLoad($File, $Folder)
$GetSize = InetGetSize(GUICtrlRead($Input1))
$hDownload = InetGet($File, $Folder, 1, 1)
Do
Sleep(250)
$aData = InetGetInfo($hDownload)
GUICtrlSetData($Label4, _ByteSuffix($aData[0])); 今までにダウンロードされたファイルの合計サイズを表示。
GUICtrlSetData($Progress, $aData[0] / $GetSize * 100); プログレスバーに進行度を表示。
Until InetGetInfo($hDownload, 2) Or $End = 1 ; ダウンロードが終了,または中止されたかどうかを確認。条件が合えばループを抜ける。
InetClose($hDownload); ハンドルを閉じる。
GUICtrlSetData($Label4, ""); 進行度(サイズ表示)をリセット
GUICtrlSetData($Progress, 0); 進行度(プログレス)をリセット
EndFunc ;==>FileDownLoad
; ダウンロードするファイル名を取得
Func FileName($Link_URL, $date = 0)
Local $sDrive = "", $sDir = "", $sFilename = "", $sExtension = "", $aData
; パスをドライブ、ディレクトリ、ファイル名、拡張子に分割
Local $aPathSplit = _PathSplit($Link_URL, $sDrive, $sDir, $sFilename, $sExtension)
If GUICtrlRead($Input3) Then $sFilename = GUICtrlRead($Input3)
If Not $date Then
Return $sFilename & $sExtension; ファイル名を返す
Else
Return $sExtension; 拡張子のみを返す
EndIf
EndFunc ;==>FileName
; ファイルサイズを返す(公式サイトのフォーラムから引用)
Func _ByteSuffix($iBytes, $iRound = 2) ; By Spiff59
Local $A, $aArray[9] = [" B", " KB", " MB", " GB", " TB", " PB", "EB", "ZB", "YB"]
While $iBytes > 1023
$A += 1
$iBytes /= 1024
WEnd
Return Round($iBytes, $iRound) & $aArray[$A]
EndFunc ;==>_ByteSuffix
; インプットボックスと "中止" ボタンの監視
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
Local $hdlWindowFrom, _
$intMessageCode, _
$intControlID_From
$intControlID_From = BitAND($wParam, 0xFFFF)
$intMessageCode = BitShift($wParam, 16)
Switch $intControlID_From
Case $Input1
Switch $intMessageCode
Case $EN_CHANGE
Local $URL = GUICtrlRead($Input1)
Local $nSize = InetGetSize($URL)
If FileName(GUICtrlRead($Input1), 1) Then
GUICtrlSetData($Label3, _ByteSuffix($nSize))
Else
GUICtrlSetData($Label3, _ByteSuffix(0))
EndIf
EndSwitch
Case $Button3
$End = 1
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
「ファイルダウンローダー」の解説

1.URL
ここにダウンロードしたいファイルの URL を入力します。
デフォルトで「C:\Users\ユーザー名\Downloads」が入力されています。
2.サイズ
「URL」にダウンロードしたいファイルの URL を入力すると、自動的にファイルサイズを取得して表示します。

ファイルサイズが「0」または拡張子のない URL を入力すると「0 B」と表示されます。
3.保存場所
ダウンロードするファイルを保存するフォルダーを入力します。
4.「…」ボタン
「…」ボタンをクリックすると、デフォルトで個人用フォルダーの「ダウンロード」フォルダーが表示されます。
ここでファイルの保存場所を選択して「フォルダーの選択」をクリックすると、3 の「保存場所」が変更されます。

5.「ダウンロード」ボタン
入力した URL のファイルサイズが「0」でないならコードを実行し、保存場所に既に同じ名前のファイルが存在すれば上書きを確認します。

「はい」をクリックするとダウンロードを開始し、「いいえ」をクリックするとキャンセルします。
6.保存時のファイル名を変更(拡張子を除く)
ここには拡張子を除いたファイル名を入力します。
デフォルトではそのままのファイル名で保存します。
例えば次の URL ならファイル名は「536.67-desktop-win10-win11-64bit-international-dch-whql.exe」となります。
https://jp.download.nvidia.com/Windows/536.67/536.67-desktop-win10-win11-64bit-international-dch-whql.exe
実際に URL を貼り付けてファイルをダウンロードしてみましょう。
7.進行度
ここにはファイルの進行度を表示します。
進行度はプログレスバーとファイルサイズを表示しています。

8.WEBサイトへ
文字をクリックすると当サイト「https://windows-waza.com/」を開きます。
ラベルの上にマウスカーソルを持って行った時に、ウェブブラウザのようにリンクに下線を付けたい場合は次のページを参考にしてみてください。
「ファイルダウンローダー」のサンプルコードは自由に変更して構いません。ご自身で修正し、自分の使いやすいように変更してみてください。
コメント(降順)