ウィンドウ操作関数 - stuncloud/UWSCR GitHub Wiki
- GETID
- IDTOHND
- HNDTOID
- GETALLWIN
- GETCTLHND
- CLKITEM
- CTRLWINCTRLWIN
- STATUS
- MONITOR
- CHKIMG
- ウィンドウ関数低レベル
- ACCについて
実装バージョン: 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を返す) | 
ウィンドウIDからウィンドウハンドルを得ます
ハンドル = idtohnd(ID)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| ID | 数値 | 必須 | ウィンドウID | 
| ハンドル | 数値 | 戻り値 | ウィンドウハンドル | 
ウィンドウハンドルからウィンドウIDを得ます
ID = hndtoid(ハンドル)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| ハンドル | 数値 | 必須 | ウィンドウハンドル | 
| ID | 数値 | 戻り値 | ウィンドウID | 
0.9.0以上
すべてのウィンドウのIDを得ます
IDを指定した場合はそのウィンドウの子ウィンドウをすべて取得します
IDリスト = getallwin(ID=EMPTY)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| ID | 数値 | 省略可 | 子ウィンドウを取得する場合はウィンドウIDを指定 | 
| IDリスト | 配列 | 戻り値 | 取得したウィンドウIDの配列 | 
- 戻り値が個数からIDの配列になった
- 
ALL_WIN_IDは廃止
 
- 
- 取得されるウィンドウ情報が増えた
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) // 一致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は対象不明) | 
アイテム種別が複数指定された場合は以下の順序でアイテム検索を行います
(該当アイテムが見つかるまで)
- CLK_BTN
- CLK_LIST
- CLK_TAB
- CLK_MENU
- CLK_TREEVIEW
- CLK_LISTVIEW
- CLK_TOOLBAR
- CLK_LINK
APIが複数指定された場合以下の順序でクリックを実行します
(クリックが成功するまで)
- CLK_API
- CLK_UIA
- CLK_ACC
CLK_SHORTが指定されていない場合アイテム名は完全一致する必要がありますが、ニーモニックがある場合は一致条件が増えます
- 
&Button- 
&Button:&込みで完全一致
- 
Button:&なしでも一致扱い
 
- 
- 
ボタン(&B)- 
ボタン(&B):(&*)込みで完全一致
- 
ボタン(B):&なしでも一致
- 
ボタン:(&*)なしでも一致
 
- 
- 
ボタン (&B)※ニーモニックの前に半角スペース- 
ボタン (&B):(&*)込みで完全一致
- 
ボタン (B):&なしでも一致
- 
ボタン:(&*)なし、かつスペースがなくても一致
 
- 
CLK_SHORTが指定されている場合はニーモニック(&や(&*))が含む状態に対する部分一致を検索します
マウスクリック(CLK_RIGHTCLK, CLK_LEFTCLK, CLK_DBLCLK)を指定した場合Win32 API(PostMessage)によるクリック処理が行われます
未指定の場合はAPI固有のクリック処理を行います
- CLK_ACC: デフォルトアクションを実行
- CLK_UIA:
また、マウスクリックを指定した場合は第四引数がFALSEでもクリックが行われます
実装バージョン: 0.0.5
対象ウィンドウに命令コマンドを送信します
ID0を更新します(※)
ctrlwin(ID, コマンド定数)
- 
ID 
 ウィンドウID
- 
コマンド定数 
 以下の定数を指定できます- CLOSE
 閉じる
- CLOSE2
 強制的に閉じる
- ACTIVATE
 アクティブにする
- HIDE
 非表示にする
- SHOW
 表示する
- MIN
 最小化する
- MAX
 最大化する
- NORMAL
 通常サイズに戻す
- TOPMOST
 最前面に固定する
- NOTOPMOST
 最前面固定を解除
- TOPNOACTV
 最前面に移動するがアクティブにはしない
 
- CLOSE
※ 渡されたIDのウィンドウをID0に紐付けする
ctrlwin(getid(GET_ACTIVE_WIN), HIDE)
sleep(1)
ctrlwin(0, SHOW)実装バージョン: 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対応バージョン: 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
対応バージョン: 0.3.0
指定画像をスクリーン上から探してその座標を返します
- 注意 UWSCとは引数や戻り値に互換性がありません
- 
注意 opencv4.5.4が必要です (opencv_world454.dllを参照します)
- ダウンロード
- Release OpenCV 4.5.4 · opencv/opencvを開く
- 
opencv-4.5.4-vc14_vc15.exeをダウンロード
- 
opencv-4.5.4-vc14_vc15.exeを実行し、任意のフォルダに展開する
 
- dllを参照する
- 環境変数にパスを追加する方法
- 該当dllのあるパスを%PATH%に追加 (C:\toolsに展開した場合)- 
実行環境のみなら以下を実行 (そのPowerShellを実行中の間のみ有効) $env:Path = "$env:Path;C:\tools\opencv\build\x64\vc15\bin\" 
- 
恒久的に設定するなら - スタートメニューから 環境変数を編集 を実行
- ユーザー環境変数のPathをダブルクリック
- 
C:\tools\opencv\build\x64\vc15\binを追記
- 実行環境(PowerShellなど)を再起動
 
 
- 
 
- 該当dllのあるパスを%PATH%に追加 (
- 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実装バージョン: 0.0.4
マウスカーソルを移動します
mmv(x, y [, ms])
- x
 移動先のX座標
- y
 移動先のY座標
- ms (省略可)
 マウスを移動行うまでの待機時間 (ミリ秒)
 省略時は 0
実装バージョン: 0.0.4
マウスボタン操作を送信します
btn(ボタン種定数 [, 状態, x, y, ms])
- ボタン種類
- 以下の定数のいずれかを指定
- 
LEFT: 左クリック
- 
RIGHT: 右クリック
- 
MIDDLE: ホイルクリック
- 
WHEEL: ホイル回転 (上下方向)
- 
WHEEL2: ホイル回転 (左右方向)
- 
TOUCH:未実装
 
- 
 
- 以下の定数のいずれかを指定
- 状態 (省略可)
- LEFT,RIGHT,MIDDLE の場合以下の定数のいずれかを指定
- CLICK : ボタンクリック (デフォルト)
- DOWN : ボタン押し下げ
- UP : ボタン開放
 
- WHEEL,WHEEL2 の場合はノッチ数を指定
- WHEEL : 数値が正の場合下方向、負の場合上方向にスクロール
- WHEEL2: 数値が正の場合右方向、負の場合左方向にスクロール
 
- WHEEL : 数値が正の場合
 
- LEFT,RIGHT,MIDDLE の場合以下の定数のいずれかを指定
- x (省略可)
 移動先のX座標、省略時は現在のX座標
- y (省略可)
 移動先のY座標、省略時は現在のY座標
- ms (省略可)
 ボタン操作を行うまでの待機時間 (ミリ秒)
 省略時は 0
実装バージョン: 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")実装バージョン: 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) // 101clkitemやgetitemなどで対象となるロール (0.9.0時点)
- クリック (CLK_ACCやITM_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