トップへ戻る

Autoitプログラミング

ウィンドウのリスト

AutoIt でウィンドウのリストを取得するには WinList 関数を使用します。

 

WinList は2次元配列を返します。

 

 

#include <Array.au3>

 

$WinList = WinList()

 

_ArrayDisplay($WinList, " ウィンドウリスト ")

 

 

 

 

注意するのは、隠されたウィンドウも含まれるということ。

 

次のサンプルは可視で名前のあるウィンドウのみを表示します。

 

$var[$i][0] <> "" で名前があるかを判断し、BitAnd( WinGetState($handle), 2 ) でウィンドウが可視かを判断しています。

 

ヘルプファイルのサンプルを少し編集し、四章で勉強した2次元配列と配列のサイズ変更を応用していますので、参考にしてみてください。

 

 

#include <Array.au3>

 

Dim $WinList[1][2], $s = 0

 

 

$var = WinList()

 

For $i = 1 To $var[0][0]
    ; 可視で名前のあるウィンドウのみを表示します。
    If $var[$i][0] <> "" And IsVisible($var[$i][1]) Then
        ReDim $WinList[$s + 1][2]
        $WinList[$s][0] = $var[$i][0]
        $WinList[$s][1] = $var[$i][1]
        $s += 1
    EndIf
Next

 

_ArrayDisplay($WinList, " ウィンドウリスト ")

 

Func IsVisible($handle)
    If BitAND(WinGetState($handle), 2) Then
        Return 1
    Else
        Return 0
    EndIf
EndFunc   ;==>IsVisible

 

 

 

ウィンドウの一時停止と終了

ある状況では特定のウィンドウが現れるまで一時停止する必要があります。

 

WinWait 関数を使えば実現できます。

 

私はソフトの自動インストールを行う時に使用しています。

 

七章のプロセスの一時停止と終了と似ていますね。

 

 

Run("notepad.exe")

 

 

; 無題 - メモ帳 というタイトルのウィンドウが表示されるまでスクリプトを一時停止します。

 

$s = WinWait("無題 - メモ帳", "", 3); タイムアウトを3秒に設定。

 

If $s = 0 Then

 

    MsgBox(0, "", "タイムアウトしました")

 

Else

 

    MsgBox(0, "", "ウィンドウのハンドル: " & $s)

 

EndIf

 

 

 

タイムアウトを指定しない場合、3つ目のパラメータを削除するか、「0」を指定します。

 

ウィンドウを終了するには WinClose 関数を使用します。

 

 

Run("notepad.exe")

 

 

; 無題 - メモ帳 というタイトルのウィンドウが表示されるまでスクリプトを一時停止します。

 

$s = WinWait("無題 - メモ帳", "", 3); タイムアウトを3秒に設定。

 

If $s = 0 Then

 

    MsgBox(0, "", "タイムアウトしました")

 

Else

 

    MsgBox(0, "", "ウィンドウのハンドル: " & $s)

 

EndIf

 

WinClose("無題 - メモ帳")

 

 

 

 

もしも終了したいウィンドウ(同名のタイトル)が複数ある場合、最後にアクティブになったウィンドウのみを終了します。

 

もうひとつ WinKill という関数があり、WinClose と同じようにウィンドウを終了しますが、

 

強制的に終了するので、例えばメモ帳にデータを書き込んでいる最中に実行すると、ファイルが保存されないまま終了してしまいます。

キーの送信

次のコードは「ファイル名を指定して実行」を開くサンプルです。

 

 

Send("#r")

 

 

 

 

Send 関数はアクティブなウィンドウに仮想キーを送信します。

 

上記のコードはキーボードの #(Winキー) + Rキーを同時に押した時と同じ動作をします。

 

Send 関数はアクティブなウィンドウのみに送信するので、送信したいウィンドウがアクティブでない場合は正しく送信できません。

 

アクティブでなくても確実に送信したい場合は ControlSend 関数を使用します。

 

Run("notepad.exe")

 

WinWait("無題 - メモ帳", "", 3)

 

Send("#d") ; デスクトップを表示

 

ControlSend("無題 - メモ帳", "", "Edit1", "バックグラウンドで動作しています。")

 

Send("#d")

 

 

 

 

Edit1 はノートパッドの文字を入力する部分のコントロールIDです。

 

コントロールIDは Au3Info ツールを使用すれば取得することができます。

コントロール操作

コントロール操作は基本的にソフトの自動インストールを行う場合に使用します。

 

主に使用するのは ControlClick 、ControlSetText 、ControlCommand の3つの関数です。

 

ControlClick でボタンをクリックし、ControlSetText でパスやデータの入力をします。

 

ヘルプファイルに詳しく書いてあるので、ここでは説明しません。