Autoit プログラミングWindows 10Windows 11ソフトウェア

Autoit|InetGet 関数を使ってファイルのダウンローダーを作成

スポンサーリンク
ファイルダウンローダー

今回は、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 を入力すると、自動的にファイルサイズを取得して表示します。

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/」を開きます。

ラベルの上にマウスカーソルを持って行った時に、ウェブブラウザのようにリンクに下線を付けたい場合は次のページを参考にしてみてください。

Autoit|文字列にハイパーリンクを設定する

「ファイルダウンローダー」のサンプルコードは自由に変更して構いません。ご自身で修正し、自分の使いやすいように変更してみてください。

スポンサーリンク
スポンサーリンク
Windows 技!

コメント(降順)

タイトルとURLをコピーしました