AutoIt でプログラムやファイルを実行する際には主に次の関数を使用します。
Run 、 RunWait 、 RunAs 、 RunAsWait 、 ShellExecute 、 ShellExecuteWait
Run、ShellExecute、RunWait、ShellExecuteWait は現在のユーザーとしてプログラムを実行します。
※RunAs、RunAsWait は別ユーザーの権限でプログラムを実行します。
プログラムの実行と終了、スクリプトの一時停止
ここでは Run、 RunWait、 ShellExecute 、ShellExecuteWait の 4つの関数について説明します。
プログラムの実行
まず Run 関数でノートパッドを実行してみましょう。
形式:Run ( “プログラムのフルパス” [, “作業ディレクトリのパス” [, 実行するプログラムの表示状態[, オプション ]]] )
※ディレクトリ = フォルダー
返し値:成功: 実行したプロセスのPID(プロセス識別値)。 失敗: 0を返し@errorに非ゼロを設定します。
; ノートパッドを最大化で実行します。
$PID = Run(@WindowsDir & "\Notepad.exe", "", @SW_MAXIMIZE)
MsgBox(0, "", " PID: " & $PID)
一旦ノートパッドを閉じ、 RunWait 関数でノートパッドを実行してみましょう。
形式:RunWait ( “プログラムのフルパス” [, “作業ディレクトリのパス” [, 実行するプログラムの表示状態[, オプション ]]] )
返し値:成功 実行したプログラムの終了コード。 失敗 0を返し@errorに非ゼロを設定します。
; ノートパッドを最大化で実行します。
$val = RunWait(@WindowsDir & "\Notepad.exe", "", @SW_MAXIMIZE)
MsgBox(0, "", " 終了コード: " & $val)
違いがわかりましたか?
Run 関数はノートパッドを実行した後すぐに次のコードを実行しています。
RunWait 関数はノートパッドを終了しない限り、次のコードを実行しません。
Run 関数または RunWait関数 でプログラムを DOSコマンドを実行するには次のように書きます。
Run(@ComSpec & " /c " & 'echo Hello&pause')
RunWait(@ComSpec & " /c " & 'echo Hello&pause')
例えば次のように「#RequireAdmin」を付けないと Run 関数で直接指定すると実行できないものがあります。
#RequireAdmin
Run("C:\Program Files\CrystalDiskInfo\DiskInfo64.exe", "", @SW_HIDE)
DOSコマンドで実行すると「#RequireAdmin」がなくても実行できる。
Run(@ComSpec & " /c " & '"C:\Program Files\CrystalDiskInfo\DiskInfo64.exe"', "", @SW_HIDE)
プログラムのパスを見ると「C:\Program Files\CrystalDiskInfo\DiskInfo64.exe」というようにスペースが含まれていますね。
@ComSpec は %comspec% の値であり、主にコマンドラインで使用します。
Run と RunWait は拡張子 EXE, BAT, COM, PIF のみを実行できます。
これら4種類の拡張子は実行可能なファイルで、それ以外の拡張子を指定すると実行に失敗します。
その他のファイルの場合、ShellExecute 、ShellExecuteWait 関数を使用します。
形式:ShellExecute ( “実行するファイルの名前(EXE、.txt、.lnkなど)” [, “パラメータ” [, “作業ディレクトリ” [, “動詞” [, 実行するプログラムの表示状態]]]] )
返し値:成功 1を返します。失敗 0を返し、 @errorを非ゼロに設定します。
形式:ShellExecuteWait ( “実行するファイルの名前(EXE、.txt、.lnkなど)” [, “パラメータ” [, “作業ディレクトリ” [, “動詞” [, 実行するプログラムの表示状態]]]] )
返し値:成功 実行してプログラムの終了コードを返します。 失敗 0を返し、@errorを非ゼロに設定します。
$pid = ShellExecute(@WindowsDir & "\Notepad.exe")
MsgBox(0, "", " PID: " & $pid)
一般的にプログラムやファイルの実行には ShellExecute 関数を使用します。
プログラムの終了とスクリプトの一時停止
プログラムを終了するには、ProcessClose 関数を使用します。
形式:ProcessClose ( “プロセス名またはPID” )
$PID = ShellExecute("notepad.exe"); ノートパッドを開きます。
WinWait("[CLASS:Notepad]", "", 10); 指定したウィンドウが存在するようになるまでスクリプトの実行を一時停止します。
$hWnd = WinGetHandle("[CLASS:Notepad]"); ウィンドウのハンドルを取得します。
; notepad.exe が存在するようになったらメッセージボックスを表示。
MsgBox(0, '', "ノートパッドを開きました。5秒後メッセージボックスを終了します。", 5, $hWnd)
ProcessClose($PID); notepad.exe を終了します。
Sleep(3000); 3秒スクリプトを停止します。
Exit; スクリプトを終了します。
スクリプトの一時停止
スクリプトの一時停止には一般的に次の関数を使用します。
形式:WinWait ( “ウィンドウのタイトルまたはクラス名” [, “ウィンドウのテキスト” [, タイムアウト]] )
形式:ProcessWait ( “プロセス名” [, タイムアウト] )
形式:ProcessWaitClose ( “プロセス名” [, タイムアウト] )
形式:Sleep ( 停止時間(ミリ秒))
ShellExecute("notepad.exe"); ノートパッドを開きます。
WinWait("[CLASS:Notepad]", "", 10); 指定したウィンドウが存在するようになるまでスクリプトの実行を一時停止します。
$hWnd = WinGetHandle("[CLASS:Notepad]"); ウィンドウのハンドルを取得します。
ProcessWait("notepad.exe"); notepad.exe が存在するようになるまで一時停止。
MsgBox(0, "", "ノートパッドが開きました。", 0, $hWnd)
ProcessWaitClose("notepad.exe"); notepad.exe が存在しなくなるまで一時停止。
MsgBox(0, "", "ノートパッドを閉じました。")
実際に実行して動作を確認してみましょう。
コメント