インターネット上で見つけた画像を、自分の PC に保存したい場面はよくあります。
ブラウザーで右クリックして「名前を付けて画像を保存」と操作するのが一般的ですが、この手順を自動化できると、より大きなスクリプトの中で画像を取得したり、複数の画像を連続でダウンロードしたりと、様々な応用が可能になります。
今回は、AutoIt を使って指定した URL の画像ファイルを、デスクトップにダウンロードして保存する、基本的なスクリプトの作り方を解説します。
目次
完成したスクリプトの全コード
#include <MsgBoxConstants.au3>
#include <StringConstants.au3>
#include <InetConstants.au3>
; ### 設定項目 ###
; ここに、ダウンロードしたい画像のURLを入力します
Local $sImageURL = "https://autoit.windows-waza.com/wp-content/uploads/2025/08/ダウンロード用サンプル画像.png"
; ### メイン処理 ###
; 1. URLからファイル名部分を抽出する
Local $aURL_Split = StringSplit($sImageURL, "/")
Local $sFileName = $aURL_Split[$aURL_Split[0]] ; 配列の最後の要素がファイル名
; 2. 保存先のフルパスを定義する (デスクトップ + ファイル名)
Local $sSavePath = @DesktopDir & "\" & $sFileName
; 3. InetGet関数を使ってファイルをダウンロードする
Local $iBytesDownloaded = InetGet($sImageURL, $sSavePath, $INET_FORCERELOAD, $INET_DOWNLOADBACKGROUND)
; 4. ダウンロードの完了を待つ
While InetGetInfo($iBytesDownloaded, $INET_DOWNLOADCOMPLETE) = 0
Sleep(250)
Wend
; 5. 実行結果を判定して表示
If FileExists($sSavePath) And FileGetSize($sSavePath) > 0 Then
MsgBox($MB_OK, "成功", "画像のダウンロードが完了しました。" & @CRLF & "保存先: " & $sSavePath)
ShellExecute(@DesktopDir) ; 保存先のデスクトップを開く
Else
MsgBox($MB_ICONERROR, "失敗", "画像のダウンロードに失敗しました。")
EndIf
コードの詳しい解説
URL からファイル名の抽出
まず、ダウンロードしたファイルを元の名前で保存するために、URL からファイル名部分だけを抜き出す必要があります。
Local $aURL_Split = StringSplit($sImageURL, "/")
Local $sFileName = $aURL_Split[$aURL_Split[0]]
StringSplit: この関数は、指定したURLを「/」で分割し、結果を配列として返します。$aURL_Split[0]: 配列の 0番目の要素には、分割してできた要素の総数が格納されています。$aURL_Split[$aURL_Split[0]]: これにより、配列の最後の要素、つまり URL の末尾にあるファイル名(例:ダウンロード用サンプル画像.png)を取得できます。
配列の内容は、次のようになっています。
| Index | Value |
|---|---|
| 0 | 8 |
| 1 | https: |
| 2 | |
| 3 | autoit.windows-waza.com |
| 4 | wp-content |
| 5 | uploads |
| 6 | 2025 |
| 7 | 08 |
| 8 | ダウンロード用サンプル画像.png |
InetGet によるダウンロード
このスクリプトの心臓部が、インターネットからファイルを取得するためのInetGet関数です。
InetGet($sImageURL, $sSavePath, $INET_FORCERELOAD, $INET_DOWNLOADBACKGROUND)
- 第1引数: ダウンロードしたいファイルの URL を指定します。
- 第2引数: ダウンロードしたファイルを保存する、PC 上のフルパスを指定します。
- 第3引数 (
$INET_FORCERELOAD): キャッシュを無視し、常にサーバーから最新のファイルをダウンロードするようにします。 - 第4引数 (
$INET_DOWNLOADBACKGROUND): ダウンロードをバックグラウンドで行い、その間もスクリプトの他の処理を止めないようにします。この関数は、ダウンロード処理のハンドル(識別番号)を返します。
ダウンロード完了の待機
$INET_DOWNLOADBACKGROUNDを指定した場合、InetGetはダウンロードが完了するのを待たずに次の行へ進んでしまいます。そのため、ダウンロードが終わるまで待機する処理が必要です。
While InetGetInfo($iBytesDownloaded, $INET_DOWNLOADCOMPLETE) = 0
Sleep(250)
Wend
InetGetInfo関数を使い、ダウンロードが完了した($INET_DOWNLOADCOMPLETEが「1」になる)かどうかをWhileループで定期的にチェックし、完了するまで待機します。
まとめ
InetGet は、画像だけでなく、あらゆる種類のファイルをインターネットからダウンロードできる、非常に強力な関数です。
ウェブサイトから特定のファイルを定期的に取得したり、アプリケーションのアップデータをダウンロードしたりと、インターネットと連携する自動化スクリプトを作成する上で、欠かすことのできない基本テクニックです。
コメント