AutoItを使用してボタンを押すと指定されたブラウザのウィンドウのスクリーンショットを連写キャプチャします。

設定した内容を保存できる改良版です

プログラム

#include <GUIConstantsEx.au3>
#include <ScreenCapture.au3>
#include <MsgBoxConstants.au3>

Global $iniFile = @ScriptDir & "\ScreenCapture.ini"

Global $saveFolder = "C:\app\FirefoxPortable\Screenshots"
Global $burstCount = 3
Global $burstInterval = 2000
Global $batchFile = "C:\app\FirefoxPortable\zip.bat"
Global $posX = @DesktopWidth - 170
Global $posY = 0

If FileExists($iniFile) Then
    $saveFolder = IniRead($iniFile, "Settings", "SaveFolder", $saveFolder)
    $burstCount = IniRead($iniFile, "Settings", "BurstCount", $burstCount)
    $burstInterval = IniRead($iniFile, "Settings", "BurstInterval", $burstInterval)
    $batchFile = IniRead($iniFile, "Settings", "BatchFile", $batchFile)
    $posX = IniRead($iniFile, "Settings", "PosX", $posX)
    $posY = IniRead($iniFile, "Settings", "PosY", $posY)
EndIf

Global $browserMap = _
    [ _
        ["Firefox", "[CLASS:MozillaWindowClass]"], _
        ["Chrome", "[CLASS:Chrome_WidgetWin_1]"], _
        ["Edge", "[CLASS:Chrome_WidgetWin_1]"] _
    ]

Local $winWidth = 170
Local $labelW = 40
Local $inputW = 120

GUICreate("SS", $winWidth, 200, $posX, $posY)

;-----------------------------------------
; ★ ブラウザ選択(最上段)
;-----------------------------------------
GUICtrlCreateLabel("ブラウザ", 5, 5, $labelW, 14)
GUICtrlSetFont(-1, 6)
$comboBrowser = GUICtrlCreateCombo("", 5 + $labelW, 3, $inputW, 18)
For $i = 0 To UBound($browserMap) - 1
    GUICtrlSetData($comboBrowser, $browserMap[$i][0])
Next
GUICtrlSetData($comboBrowser, "Firefox")
GUICtrlSetFont($comboBrowser, 7)

;-----------------------------------------
; ★ 保存先
;-----------------------------------------
GUICtrlCreateLabel("保存先", 5, 30, $labelW, 14)
GUICtrlSetFont(-1, 6)
$inputFolder = GUICtrlCreateInput($saveFolder, 5 + $labelW, 28, $inputW, 18)
GUICtrlSetFont($inputFolder, 7)

;-----------------------------------------
; ★ バッチファイル(保存先の下)
;-----------------------------------------
GUICtrlCreateLabel("BAT", 5, 55, $labelW, 14)
GUICtrlSetFont(-1, 6)
$inputBatch = GUICtrlCreateInput($batchFile, 5 + $labelW, 53, $inputW, 18)
GUICtrlSetFont($inputBatch, 7)

;-----------------------------------------
; ★ 回数と間隔(横並び)
;-----------------------------------------
GUICtrlCreateLabel("回数", 5, 80, 25, 14)
GUICtrlSetFont(-1, 6)
$inputBurstCount = GUICtrlCreateInput($burstCount, 35, 78, 40, 18)
GUICtrlSetFont($inputBurstCount, 7)

GUICtrlCreateLabel("間隔", 80, 80, 25, 14)
GUICtrlSetFont(-1, 6)
$inputBurstInterval = GUICtrlCreateInput($burstInterval, 110, 78, 50, 18)
GUICtrlSetFont($inputBurstInterval, 7)

;-----------------------------------------
; ★ ボタン(大きめ・日本語・2×2)
;-----------------------------------------
Local $btnW = 75
Local $btnH = 30

; 1行目
$btnCapture = GUICtrlCreateButton("キャプチャ", 5, 110, $btnW, $btnH)
$btnBurst   = GUICtrlCreateButton("連写",      5 + $btnW + 5, 110, $btnW, $btnH)

; 2行目
$btnBatch   = GUICtrlCreateButton("実行",      5, 110 + $btnH + 5, $btnW, $btnH)
$btnExit    = GUICtrlCreateButton("終了",      5 + $btnW + 5, 110 + $btnH + 5, $btnW, $btnH)

GUISetState()
WinSetOnTop("SS", "", 1)

;-----------------------------------------
; メインループ
;-----------------------------------------
While 1
    $msg = GUIGetMsg()

    Switch $msg
        Case $GUI_EVENT_CLOSE, $btnExit
            SaveSettings()
            Exit

        Case $btnCapture
            GUICtrlSetState($btnCapture, $GUI_DISABLE)
            GUICtrlSetState($btnBurst, $GUI_DISABLE)
            CaptureSelectedBrowser()
            GUICtrlSetState($btnCapture, $GUI_ENABLE)
            GUICtrlSetState($btnBurst, $GUI_ENABLE)

        Case $btnBurst
            GUICtrlSetState($btnCapture, $GUI_DISABLE)
            GUICtrlSetState($btnBurst, $GUI_DISABLE)
            BurstCapture()
            GUICtrlSetState($btnCapture, $GUI_ENABLE)
            GUICtrlSetState($btnBurst, $GUI_ENABLE)

        Case $btnBatch
            RunBatchFile()
    EndSwitch

    Local $pos = WinGetPos("SS")
    $posX = $pos[0]
    $posY = $pos[1]

    Sleep(50)
WEnd

;-----------------------------------------
; 関数
;-----------------------------------------
Func CaptureSelectedBrowser()
    Local $selected = GUICtrlRead($comboBrowser)
    For $i = 0 To UBound($browserMap) - 1
        If $browserMap[$i][0] = $selected Then
            CaptureBrowser($selected, $browserMap[$i][1])
            Return
        EndIf
    Next
EndFunc

Func CaptureBrowser($name, $class)
    Local $hWnd = WinGetHandle($class)
    If $hWnd = 0 Then
        TrayTip("ERR", $name & "なし", 1)
        Return
    EndIf

    WinActivate($hWnd)
    WinWaitActive($hWnd)

    Local $timestamp = @YEAR & @MON & @MDAY & "_" & @HOUR & @MIN & @SEC
    Local $filename = $saveFolder & "\" & $name & "_" & $timestamp & ".png"

    DirCreate($saveFolder)
    Local $hBmp = _ScreenCapture_CaptureWnd("", $hWnd)
    _ScreenCapture_SaveImage($filename, $hBmp)

    TrayTip("保存", $filename, 1)
EndFunc

Func BurstCapture()
    Local $count = Number(GUICtrlRead($inputBurstCount))
    Local $interval = Number(GUICtrlRead($inputBurstInterval))

    For $i = 1 To $count
        CaptureSelectedBrowser()
        Sleep($interval)
    Next
EndFunc

Func RunBatchFile()
    Local $bat = GUICtrlRead($inputBatch)
    If FileExists($bat) Then
        Run('"' & $bat & '"', "", @SW_HIDE)
        TrayTip("BAT", $bat, 1)
    Else
        MsgBox(16, "ERR", "見つからない:" & @CRLF & $bat)
    EndIf
EndFunc

Func SaveSettings()
    IniWrite($iniFile, "Settings", "SaveFolder", GUICtrlRead($inputFolder))
    IniWrite($iniFile, "Settings", "BurstCount", GUICtrlRead($inputBurstCount))
    IniWrite($iniFile, "Settings", "BurstInterval", GUICtrlRead($inputBurstInterval))
    IniWrite($iniFile, "Settings", "BatchFile", GUICtrlRead($inputBatch))
    IniWrite($iniFile, "Settings", "PosX", $posX)
    IniWrite($iniFile, "Settings", "PosY", $posY)
EndFunc

バッチファイル

powershell -WindowStyle Hidden -Command "C:\app\autoit3\AutoIt3_x64.exe C:\app\autoit3\Examples\ScreenCapture.au3"

AutoIt

Posted by eightban