ウィンドウ操作関数 - stuncloud/UWSCR GitHub Wiki

GETID

実装バージョン: 0.0.4

指定ウィンドウのIDを返します

戻り値 = getid(タイトル[, クラス名, 待ち時間, MDI子タイトル])
  • タイトル
    ウィンドウタイトル (部分一致)
  • クラス名 (省略可)
    ウィンドウクラス名 (部分一致)
  • 待ち時間 (省略可)
    ウィンドウが見つからない場合のタイムアウト時間
    省略時は1
  • MDI子タイトル (省略可) 未実装
    MDIウィンドウ内の子ウィンドウのタイトル
  • 戻り値
    ウィンドウのID (1以上の数値)
    見つからなかった場合は-1

特定ウィンドウ指定

戻り値 = getid(定数)
  • 定数
    以下の定数を指定できます
    該当するウィンドウのIDを返します
定数 対象ウィンドウ
GET_ACTIVE_WIN アクティブウィンドウ
GET_FROMPOINT_WIN マウスカーソル下のウィンドウ
GET_FROMPOINT_OBJ マウスカーソル下の子ウィンドウ
GET_THISUWSC_WIN 対象なし(-1を返す)
GET_LOGPRINT_WIN Printウィンドウ
GET_BALLOON_WIN 吹き出し
GET_FUKIDASI_WIN 吹き出し
GET_FORM_WIN 対象なし(-1を返す)
GET_FORM_WIN2 対象なし(-1を返す)
GET_SCHEDULE_WIN 対象なし(-1を返す)
GET_STOPFORM_WIN 対象なし(-1を返す)

IDTOHND

ウィンドウIDからウィンドウハンドルを得ます

ハンドル = idtohnd(ID)
変数名 種別 説明
ID 数値 必須 ウィンドウID
ハンドル 数値 戻り値 ウィンドウハンドル

HNDTOID

ウィンドウハンドルからウィンドウIDを得ます

ID = hndtoid(ハンドル)
変数名 種別 説明
ハンドル 数値 必須 ウィンドウハンドル
ID 数値 戻り値 ウィンドウID

GETALLWIN

0.9.0以上

すべてのウィンドウのIDを得ます
IDを指定した場合はそのウィンドウの子ウィンドウをすべて取得します

IDリスト = getallwin(ID=EMPTY)
変数名 種別 説明
ID 数値 省略可 子ウィンドウを取得する場合はウィンドウIDを指定
IDリスト 配列 戻り値 取得したウィンドウIDの配列

UWSCとの違い

  • 戻り値が個数からIDの配列になった
    • ALL_WIN_IDは廃止
  • 取得されるウィンドウ情報が増えた

GETCTLHND

0.9.0以上

ボタン等、子ウィンドウのハンドルを得る

ハンドル = getctlhnd(ID, アイテム名, 番号=1)
変数名 種別 説明
ID 数値 必須 ウィンドウID
アイテム名 文字列 必須 子ウィンドウのタイトルまたはクラス名 (部分一致)
定数 必須 GET_MENU_HND : メニューハンドルを返す
GET_SYSMENU_HND : システムメニューハンドルを返す
番号 数値 省略可 アイテム名に該当するものが複数あった場合に指定
ハンドル 数値 戻り値 ウィンドウまたはメニューのハンドル
id = getid("ファイル名を指定して実行")
h1 = getctlhnd(id, "実行するプログラム名、") // タイトルを部分一致
h2 = getctlhnd(id, "static", 2)              // クラス名指定、2番目
assert_equal(h1, h2) // 一致

CLKITEM

0.9.0以上

ボタン等をクリックします

成否 = clkitem(ID, アイテム名, 種別=0, チェック=TRUE, 番号=1)
HWND = clkitem(ID, アイテム名, 種別=0, チェック=TRUE, 番号=1)
変数名 種別 説明
ID 数値 必須 ウィンドウID
アイテム名 文字列 必須 ボタン名や項目名、タブ文字(<#TAB>)区切りでリストの複数選択
配列 必須 タブ文字区切りの代わりに配列指定も可能
種別 定数 省略可 クリック対象やクリック方法を指定 (OR連結で複数指定可)
アイテム種類が未指定の場合すべてのアイテム種類を対象とする
APIが未指定の場合すべてのAPIでのクリックを対象とする
チェック 真偽値 省略可 チェックボックスのチェックを入れる(TRUE)または外す(FALSE)
ボタンを押す(TRUE)または押さない(FALSE)
数値 2を指定すると三状態チェックボックスを灰色状態にする (CLK_APIのみ)
番号 数値 省略可 同盟アイテムが複数ある場合に順番を指定 (1から)
リストの複数選択の際は無視されます
成否 真偽値 戻り値 クリックに成功した場合TRUE、チェックがFALSEの場合対象が存在していればTRUE
HWND 数値 戻り値 種別にCLK_HWNDを指定した場合に見つかったアイテムのHWNDを返す (見つからない場合は0)
定数 種別 意味 別名
CLK_BTN アイテム種類 ボタン、チェックボックス、ラジオボタン、その他以下に該当しないもの
CLK_LIST アイテム種類 リストボックス、コンボボックス
CLK_TAB アイテム種類 タブ
CLK_MENU アイテム種類 メニュー
CLK_TREEVIEW アイテム種類 ツリービュー CLK_TREEVEW
CLK_LISTVIEW アイテム種類 リストビュー、カラムヘッダ CLK_LSTVEW
CLK_TOOLBAR アイテム種類 ツールバー
CLK_LINK アイテム種類 リンク
CLK_BACK 動作オプション バックグラウンド実行 (ウィンドウをアクティブにしない)
CLK_MOUSEMOVE 動作オプション クリック位置にマウスを移動 CLK_MUSMOVE
CLK_RIGHTCLK マウスクリック 右クリック
CLK_LEFTCLK マウスクリック 左クリック (CLK_RIGHTCLKと同時指定ならこちらが優先)
CLK_DBLCLK マウスクリック ダブルクリック (CLK_LEFTCLKと同時指定で2回目のクリック)
CLK_SHORT 検索オプション アイテム名の部分一致
CLK_FROMLAST 検索オプション 逆順サーチ (CLK_ACC指定時のみ有効)
CLK_API API Win32 APIによる検索およびクリック
CLK_ACC API アクセシビリティコントロールによる検索およびクリック
CLK_UIA API UI Automationによる検索およびクリック
CLK_HWND 戻り値オプション 戻り値を対象アイテムのHWNDにする (0は対象不明)

アイテム種別の優先順位

アイテム種別が複数指定された場合は以下の順序でアイテム検索を行います
(該当アイテムが見つかるまで)

  1. CLK_BTN
  2. CLK_LIST
  3. CLK_TAB
  4. CLK_MENU
  5. CLK_TREEVIEW
  6. CLK_LISTVIEW
  7. CLK_TOOLBAR
  8. CLK_LINK

APIの優先順位

APIが複数指定された場合以下の順序でクリックを実行します
(クリックが成功するまで)

  1. CLK_API
  2. CLK_UIA
  3. CLK_ACC

ニーモニックを含むアイテム名の一致条件

CLK_SHORTが指定されていない場合アイテム名は完全一致する必要がありますが、ニーモニックがある場合は一致条件が増えます

  1. &Button
    • &Button: &込みで完全一致
    • Button : &なしでも一致扱い
  2. ボタン(&B)
    • ボタン(&B): (&*)込みで完全一致
    • ボタン(B): &なしでも一致
    • ボタン: (&*)なしでも一致
  3. ボタン (&B) ※ニーモニックの前に半角スペース
    • ボタン (&B): (&*)込みで完全一致
    • ボタン (B): &なしでも一致
    • ボタン: (&*)なし、かつスペースがなくても一致

CLK_SHORTが指定されている場合はニーモニック(&(&*))が含む状態に対する部分一致を検索します

クリック方法について

マウスクリック(CLK_RIGHTCLK, CLK_LEFTCLK, CLK_DBLCLK)を指定した場合Win32 API(PostMessage)によるクリック処理が行われます
未指定の場合はAPI固有のクリック処理を行います

  • CLK_ACC: デフォルトアクションを実行
  • CLK_UIA:

また、マウスクリックを指定した場合は第四引数がFALSEでもクリックが行われます

CTRLWIN

実装バージョン: 0.0.5

対象ウィンドウに命令コマンドを送信します
ID0を更新します(※)

ctrlwin(ID, コマンド定数)
  • ID
    ウィンドウID

  • コマンド定数
    以下の定数を指定できます

    • CLOSE
      閉じる
    • CLOSE2
      強制的に閉じる
    • ACTIVATE
      アクティブにする
    • HIDE
      非表示にする
    • SHOW
      表示する
    • MIN
      最小化する
    • MAX
      最大化する
    • NORMAL
      通常サイズに戻す
    • TOPMOST
      最前面に固定する
    • NOTOPMOST
      最前面固定を解除
    • TOPNOACTV
      最前面に移動するがアクティブにはしない

※ 渡されたIDのウィンドウをID0に紐付けする

ctrlwin(getid(GET_ACTIVE_WIN), HIDE)
sleep(1)
ctrlwin(0, SHOW)

STATUS

実装バージョン: 0.0.5

対象ウィンドウの各種状態を取得します

戻り値 = status(ID, ST定数 [, ST定数,  ST定数, ...])
  • ID
    ウィンドウID

  • ST定数
    以下の定数を指定できます
    定数を,区切りで複数指定することもできます(最大21)
    ST_ALLは単一指定時のみ使えます

    • ST_TITLE
      ウィンドウタイトル
    • ST_CLASS
      ウィンドウクラス名
    • ST_X
      ウィンドウ左上のX座標
    • ST_Y
      ウィンドウ左上のY座標
    • ST_WIDTH
      ウィンドウの幅
    • ST_HEIGHT
      ウィンドウの高さ
    • ST_CLX
      ウィンドウのクライアント領域左上のX座標
    • ST_CLY
      ウィンドウのクライアント領域左上のY座標
    • ST_CLWIDTH
      ウィンドウのクライアント領域の幅
    • ST_CLHEIGHT
      ウィンドウのクライアント領域の高さ
    • ST_PARENT
      親ウィンドウのID
    • ST_ICON
      最小化してればTRUE
    • ST_MAXIMIZED
      最大化してればTRUE
    • ST_VISIBLE
      ウィンドウが可視ならTRUE
    • ST_ACTIVE
      ウィンドウがアクティブならTRUE
    • ST_BUSY
      ウィンドウが応答なしならTRUE
    • ST_ISID
      ウィンドウが有効ならTRUE
    • ST_WIN64
      プロセスが64ビットかどうか
    • ST_PATH
      プロセスの実行ファイルのパス
    • ST_PROCESS
      プロセスID
    • ST_MONITOR
      ウィンドウが表示されているモニタ番号 (monitor関数に対応)
    • ST_ALL
      上記すべてを取得
  • 戻り値

    • 単一指定の場合 該当する値
    • 複数指定、またはST_ALLの場合 値を格納した連想配列
      キーはST定数
id = getid("uwsc", "HH") // uwscヘルプファイル
s = status(id, ST_TITLE, ST_CLASS, ST_HEIGHT, ST_WIDTH)

print s[ST_TITLE]  // uwsc
print s[ST_CLASS]  // HH Parent
print s[ST_HEIGHT] // 778
print s[ST_WIDTH]  // 1251

MONITOR

対応バージョン: 0.3.0

モニタの情報を得ます

戻り値 = monitor([モニタ番号, MON定数])
  • モニタ番号 (省略可)
    モニタ番号 (0から)

  • MON定数 (省略可)
    以下の定数を指定できます

    • MON_X : モニタのX座標
    • MON_Y : モニタのY座標
    • MON_WIDTH : モニタの幅
    • MON_HEIGHT : モニタの高さ
    • MON_PRIMARY : プライマリ(メイン)モニタならTRUE
    • MON_ISMAIN : MON_PRIMARYの別名
    • MON_NAME : モニタ名
    • MON_WORK_X : 作業エリアのX座標
    • MON_WORK_Y : 作業エリアのY座標
    • MON_WORK_WIDTH : 作業エリアの幅
    • MON_WORK_HEIGHT : 作業エリアの高さ
    • MON_ALL : 上記すべて (デフォルト)
  • 戻り値

    • 引数なしで実行
      モニタの数
    • MON_ALL以外を指定
      該当する値
    • MON_ALL指定時
      連想配列
    • 該当モニタなし
      False
for i = 0 to monitor() - 1
    m = monitor(i, MON_ALL)
    print "モニタ" + i + ": " + m[MON_NAME]
    print m[MON_X] + ", " + m[MON_Y]
    print m[MON_WIDTH] + " x " + m[MON_HEIGHT]
next

CHKIMG

対応バージョン: 0.3.0

指定画像をスクリーン上から探してその座標を返します

  • 注意 UWSCとは引数や戻り値に互換性がありません
  • 注意 opencv4.5.4が必要です (opencv_world454.dllを参照します)
    • ダウンロード
      1. Release OpenCV 4.5.4 · opencv/opencvを開く
      2. opencv-4.5.4-vc14_vc15.exeをダウンロード
      3. opencv-4.5.4-vc14_vc15.exeを実行し、任意のフォルダに展開する
    • dllを参照する
      • 環境変数にパスを追加する方法
        • 該当dllのあるパスを%PATH%に追加 (C:\toolsに展開した場合)
          • 実行環境のみなら以下を実行 (そのPowerShellを実行中の間のみ有効)

            $env:Path = "$env:Path;C:\tools\opencv\build\x64\vc15\bin\"
          • 恒久的に設定するなら

            1. スタートメニューから 環境変数を編集 を実行
            2. ユーザー環境変数のPathをダブルクリック
            3. C:\tools\opencv\build\x64\vc15\binを追記
            4. 実行環境(PowerShellなど)を再起動
      • uwscrと同じディレクトリにdllを置く方法
        • opencv_world454.dllをコピーする
    • 将来的にはdllが不要になる予定です
結果 = chkimg(画像ファイル, スコア=95, 最大検索回数=5, x1=EMPTY, y1=EMPTY, x2=EMPTY, y2=EMPTY)
変数名 種別 説明
画像ファイル 文字列 必須 検索する画像のパス (jpg, bmp, png)
スコア 数値 省略可 画像に対する一致率を指定 (100-0)
一致率が指定値以上であれば結果を返す
100は完全一致、省略時は95
最大検索回数 数値 省略可 画面内を検索する回数の最大値
例: 該当画像が10個あっても5を指定すると5つ分だけ返す
x1 数値 省略可 検索範囲: 左上x座標(left)
y1 数値 省略可 検索範囲: 左上y座標(top)
x2 数値 省略可 検索範囲: 右下x座標(right)
y2 数値 省略可 検索範囲: 右下y座標(bottom)
いずれも省略時(またはEMPTYの場合)は画面全体の座標になる
結果 二次元配列 戻り値 [x座標, y座標, スコア]
for found in chkimg("hoge.png")
    print found // [x, y, スコア]
next

ウィンドウ関数低レベル

MMV

実装バージョン: 0.0.4

マウスカーソルを移動します

mmv(x, y [, ms])
  • x
    移動先のX座標
  • y
    移動先のY座標
  • ms (省略可)
    マウスを移動行うまでの待機時間 (ミリ秒)
    省略時は 0

BTN

実装バージョン: 0.0.4

マウスボタン操作を送信します

btn(ボタン種定数 [, 状態, x, y, ms])
  • ボタン種類
    • 以下の定数のいずれかを指定
      • LEFT : 左クリック
      • RIGHT : 右クリック
      • MIDDLE : ホイルクリック
      • WHEEL : ホイル回転 (上下方向)
      • WHEEL2 : ホイル回転 (左右方向)
      • TOUCH : 未実装
  • 状態 (省略可)
    • LEFT,RIGHT,MIDDLE の場合以下の定数のいずれかを指定
      • CLICK : ボタンクリック (デフォルト)
      • DOWN : ボタン押し下げ
      • UP : ボタン開放
    • WHEEL,WHEEL2 の場合はノッチ数を指定
      • WHEEL : 数値が正の場合方向、負の場合方向にスクロール
      • WHEEL2: 数値が正の場合方向、負の場合方向にスクロール
  • x (省略可)
    移動先のX座標、省略時は現在のX座標
  • y (省略可)
    移動先のY座標、省略時は現在のY座標
  • ms (省略可)
    ボタン操作を行うまでの待機時間 (ミリ秒)
    省略時は 0

KBD

実装バージョン: 0.0.4

キーボード入力を送信します

kbd(仮想キー [, 状態, ms])
  • 仮想キー 以下のいずれかを指定
    • 仮想キーコード定数 (VK_*)
    • 文字列 (※)
  • 状態 (省略可) ※文字列指定時は無視されます
    • CLICK : キークリック (デフォルト)
    • DOWN : キー押し下げ
    • UP : キー開放
  • ms (省略可)
    キーボード入力を行うまでの待機時間 (ミリ秒)
    省略時は 0
// a が入力される
kbd(VK_A) 

// A が入力される
kbd(VK_SHIFT, DOWN)
kbd(VK_A, CLICK, 100) 
kbd(VK_SHIFT, UP, 100)

// A が入力される
kbd("A")

// あ が入力される
kbd("")

// abcde が入力される
kbd("abcde")

ACW

実装バージョン: 0.0.4

ウィンドウの位置やサイズを変更します
ID0を更新します(※)

acw(id [, x, y, h, w, ms])
  • id
    ウィンドウID
  • x (省略可)
    移動先のX座標、省略時は現在のX座標
  • y (省略可)
    移動先のY座標、省略時は現在のY座標
  • w (省略可)
    ウィンドウの幅、省略時は現在の幅
  • h (省略可)
    ウィンドウの高さ、省略時は現在の高さ
  • ms (省略可)
    ウィンドウに変更を加えるまでの待機時間 (ミリ秒)
    省略時は 0

※ 渡されたIDのウィンドウをID0に紐付けする

acw(getid(GET_ACTIVE_WIN), 100, 100)
sleep(1)
acw(0, 200, 200)

ウィンドウの表示スケールが変更されている場合、指定した値通りにならない場合があります

例: 2736 x 1824 125%表示 の場合

acw(id, 100)
print status(id, ST_X) // 101

ACCについて

clkitemgetitemなどで対象となるロール (0.9.0時点)

  • クリック (CLK_ACCITM_ACCCLK)
    • ROLE_SYSTEM_BUTTONDROPDOWN
    • ROLE_SYSTEM_BUTTONDROPDOWNGRID
    • ROLE_SYSTEM_BUTTONMENU
    • ROLE_SYSTEM_CELL
    • ROLE_SYSTEM_CHECKBUTTON
    • ROLE_SYSTEM_COLUMNHEADER
    • ROLE_SYSTEM_LINK
    • ROLE_SYSTEM_LISTITEM
    • ROLE_SYSTEM_MENUITEM
    • ROLE_SYSTEM_OUTLINEBUTTON
    • ROLE_SYSTEM_OUTLINEITEM
    • ROLE_SYSTEM_PAGETAB
    • ROLE_SYSTEM_PUSHBUTTON
    • ROLE_SYSTEM_RADIOBUTTON
    • ROLE_SYSTEM_ROWHEADER
    • ROLE_SYSTEM_SPLITBUTTON
  • スタティックテキスト (ITM_ACCTXT)
    • ROLE_SYSTEM_STATICTEXT
  • エディットボックス (ITM_ACCEDIT)
    • ROLE_SYSTEM_TEXT
⚠️ **GitHub.com Fallback** ⚠️