指定したウィンドウのIDを取得します。第一引数に取得したいウィンドウのタイトル(一部でも可)を指定します。UWSCでウィンドウを操作するのによく使う関数です。
引数に指定するタイトル・クラス名は、STATUS関数の第二引数にST_TITLE・ST_CLASSを指定することで取得することもできます。
指定したウィンドウを取得できない場合は-1を返すので、ウィンドウの存在有無を確かめることもできます。
- 構文
- Integer = GETID( タイトル, クラス名, 待ち時間秒, MDI子タイトル )
- 引数
- タイトル (String,#getid)必須
- 識別したいウィンドウのタイトル (タイトルの一部分だけでもOK)
- クラス名 (String = Empty)省略可
- 区別に必要でなければ省略して構いません (前方一致でのみ部分指定可)
- 待ち時間秒 (Single = 0)省略可
- 確認できるまで指定された秒数待ちます(0.01~)
- 0
- 0.1~10秒まで状況や負荷により自動判断 (デフォルト)
- -1
- 無期限待ち
- MDI子タイトル (String = Empty)省略可
- MDIウィンドウ中の子ウィンドウタイトル
- 戻り値
そのウィンドウを識別するID (NGの時は -1)
GETID は始めに完全一致のウィンドウを探します。見つからなければ次に部分一致のウィンドウを探します。
特別なウィンドウの指定
- GET_ACTIVE_WIN
- アクティブウィンドウを返します
- GET_FROMPOINT_WIN
- マウスカーソル下のウィンドウ
- GET_FROMPOINT_OBJ
- マウスカーソル下のオブジェクト
- GET_THISUWSC_WIN
- UWSC自身
- GET_LOGPRINT_WIN
- ログ表示用ウィンドウ
- GET_BALLOON_WIN
- ふきだし用ウィンドウ(GET_FUKIDASI_WINでも可)
- GET_FORM_WIN
- フォーム画面ウィンドウ
- GET_FORM_WIN2
- フォーム画面ウィンドウ2
- GET_SCHEDULE_WIN
- スケジュール"指定Windowが現れた時"でキャッチしたウィンドウ('別プロセス実行'時はNG)
特別なウィンドウ
GET_ACTIVE_WIN
アクティブウィンドウ(現在入力操作を行える状態のウィンドウ)を取得します。
- 結果
GET_FROMPOINT_WIN
マウスカーソル下にあるウィンドウを取得します。アクティブ状態である必要はありません。
- 結果
GET_FROMPOINT_OBJ
マウスカーソル下のオブジェクトを取得します。
GET_THISUWSC_WIN
現在実行しているUWSCのウィンドウIDを取得します。
- 結果
GET_LOGPRINT_WIN
PRINT時に表示されるログ表示用ウィンドウのIDを取得します。UWSC Debuggerで実行している場合はデバッガーのログが表示される枠のIDが取得されます。UWSファイルで実行した場合はタイトルがUScript、UWSC Debuggerの場合はタイトルなしです。
- 結果
GET_BALLOON_WIN
FUKIDASI関数またはBALLOON関数 (スクリプト関数)で表示される吹き出しのIDを取得します。
以下はBALLOON関数 (スクリプト関数)で表示させた吹き出しの位置を(x, y) = (10, 10)、サイズを(幅, 高さ) = (120, 60)に変更します。
GET_FUKIDASI_WIN
FUKIDASI関数またはBALLOON関数 (スクリプト関数)で表示される吹き出しのIDを取得します。
以下は吹き出しを最小化にします。
GET_FORM_WIN
CREATEFORM関数で作成したフォームのIDを取得します。
以下はフォームを座標(x, y) = (0, 0)の位置に移動させるプログラムです。カレントディレクトリに空でも良いのでindex.htmlを用意してから実行してください。
以下はフォームを画面中央に移動するプログラムです。
GET_FORM_WIN2
CREATEFORM関数のオプション指定の引数にFOM_FORM2を指定して作成したフォームのIDを取得します。
以下はフォームを座標(x, y) = (0, 0)の位置に移動させるプログラムです。
GET_SCHEDULE_WIN
UWSCの[設定]-[設定]-[スケジュール設定をする]-[タイマー]-[指定ウィンドウが現れた時]のTitle・Classを指定して起動したウィンドウのIDを取得します。別プロセスで実行にチェックが入っているときは取得できません。スケジュール設定の操作方法は使い方を参照。
[指定ウィンドウが現れた時]のClassにNOTEPADを指定してスクリプトに以下のプログラムを保存したUWSファイルのパスを指定すると、メモ帳を起動したときにスクリプトが起動しメモ帳を起動しましたと文字列が入力されます。
デバッグするときは[指定ウィンドウが現れた時]を検知することは不可能なので、TitleとClassの値をGETID関数に直接指定することでIDを取得します。
以下は[指定ウィンドウが現れた時]のTitleにメモ帳、ClassにNotepadを指定しているときのプログラムです。スケジュール設定しているときはGET_SCHEDULE_WINでIDを取得し、取得できなかったときはすでに起動しているメモ帳のIDを取得することで、デバッグもできるようになります。
同じタイトル・クラス名のウィンドウを区別する
GETIDで取得できるのは1つだけです。同じタイトル・クラス名で複数のウィンドウを区別するにはGETALLWIN関数 (スクリプト関数)ですべてのウィンドウのIDをループし目的のIDを取得する必要があります。
以下のGETID2関数は第三引数に番号を指定することで、同じタイトル・クラス名があるときn番目のIDを取得することができます。
第三引数に0を指定すると、指定したタイトル・クラス名のウィンドウが何個あるかカウントすることもできます。
GETID2の使い方
タイトルがメモ帳、クラス名がnotepadの2番目のウィンドウのIDを取得。
タイトルがメモ帳、クラス名がnotepadのウィンドウの数を取得。
開いてるすべてのメモ帳に対して操作を行う。
MDI
MDIとはMultiple Document Interface (マルチ・ドキュメント・インタフェース)の略で、親ウィンドウ内に複数の子ウィンドウを持つアプリケーションのことです。
わかりやすいものとしては2010以前Offieが子ウィンドウを持つアプリケーションで、Excelを例にするとMicrosoft Excelが親ウィンドウ(GETIDのタイトル)、ブック名(Book1, Book2など)が子ウィンドウ(GETIDのMDI子タイトル)となります。
以下はExcelで新しいブックを開き、開いたブックを閉じてからExcelウィンドウを閉じるプログラムです。
以下はMDIを使用したアプリケーションの例です。
- Adobe Photoshop (CS4以降はMDIではなくTDIが標準となった)
- Eudora
- Microsoft Word
- Microsoft Excel(Excel 2010まで)
- 一太郎
- Opera
- Sleipnir
- PSPad
多重起動の検知・制御
以下のプログラムをスクリプトの先頭に記述することで多重起動を制御することができます。
動作確認用のプログラムはスクリプトを起動した時刻を吹き出しに表示します。複数回スクリプトを起動すると以前のスクリプトを停止の方はスクリプトを複数個起動するとその度に時刻が更新されるので、以前のスクリプトが停止していることがわかります。
一方で自身のスクリプトを停止の方はスクリプトを複数個起動しても時刻は更新されないため、最初のスクリプトがそのまま残り後に起動した方が強制終了していることがわかります。
以前のスクリプトを停止
自身と同じ名前のスクリプトが実行中であれば、既に起動している方のスクリプトを停止します。
以下は動作確認用のプログラムです。
自身のスクリプトを停止
自身と同じ名前のスクリプトが実行中であれば、後に起動した方(自身)を停止します。
以下は動作確認用プログラムです。
プログラム干渉防止
他のUWSCプログラムが起動・動作しているとき、そのプログラムが終了するまで待機します。以下のプログラムをスクリプトの先頭に記述することで機能します。
引数にIDを使う関数
- CHKBTN関数
- CLKITEM関数
- CTRLWIN関数
- DROPFILE関数
- GETALLWIN関数 (スクリプト関数)
- GETCTLHND関数 (スクリプト関数)
- GETITEM関数
- GETSLCTLST関数
- GETSLIDER関数
- GETSTR関数
- IDTOHND関数
- LOCKHARDEX関数
- MOUSEORG関数
- POSACC関数
- SAVEIMG関数 (スクリプト関数)
- SCKEY関数
- SENDSTR関数
- SETSLIDER関数
- STATUS関数
よく使うプログラムのクラス名一覧
-
" width="1366" height="707"]
- タイトル
- Internet Explorer
- クラス名
- IEFrame
-
" width="1366" height="707"]
- タイトル
- Google Chrome
- クラス名
- Chrome_WidgetWin_1
-
" width="1366" height="707"]
- タイトル
- Mozilla Firefox
- クラス名
- MozillaWindowClass
-
" width="1366" height="707"]
- タイトル
- Microsoft Edge
- クラス名
- ApplicationFrameWindow
-
" width="456" height="333"]
- タイトル
- ユーザー アカウント制御
- クラス名
- Credential Dialog Xaml Host
-
" width="1366" height="707"]
- タイトル
- タスク マネージャー
- クラス名
- TaskManagerWindow
-
" width="1366" height="707"]
- タイトル
- メモ帳
- クラス名
- Notepad
-
" width="1366" height="707"]
- タイトル
- ペイント
- クラス名
- MSPaintApp
-
" width="1366" height="707"]
- タイトル
- Microsoft Excel
- クラス名
- XLMAIN
-
" width="1366" height="707"]
- タイトル
- Microsoft Word
- クラス名
- OpusApp
-
" width="1366" height="707"]
- タイトル
- Microsoft Outlook
- クラス名
- rctrl_renwnd32
-
" width="1366" height="707"]
- タイトル
- UWSC Debugger
- クラス名
- TFOya
-
" width="216" height="59" style="width:216px;"]
- タイトル
- UWSC Pro
- クラス名
- TUMain_uwsc
-
" width="669" height="473"]
- タイトル
- ダイアログ
- クラス名
- #32770
-
" width="74" height="36" style="width:74px;"]
- タイトル
- クラス名
- TFfukidsi
-
- タイトル
- NoxPlayer
- クラス名
- Qt5QWindowIcon
-
- タイトル
- UWSC -
- クラス名
- TUinpBox_uwsc
-
- タイトル
- UWSC -
- クラス名
- TUmsgDlg_uwsc
-
- タイトル
- UWSC -
- クラス名
- TUslctBox_uwsc
-
- タイトル
- クラス名
- #32768
使い方
ウィンドウのタイトルからIDを取得
タイトルにメモ帳が含まれるウィンドウのIDを取得します。以下のプログラムを実行するとIDにメモ帳のウィンドウIDが代入され、UWSCで操作するときに識別するIDとして使うことができるようになります。
EXEC関数でメモ帳を起動しているので、メモ帳が正しく起動していれば1を返します。起動していなければ-1を返します。
- 結果
複数のウィンドウIDを取得
EXEC関数でメモ帳・ペイント・電卓を起動し、それぞれのIDを出力します。
- 結果
この値はGETID関数を実行する前は別の値が割り当てられていて、GETID関数を実行したときに1から始まる整数が順に割り当てられます。
GETID関数を実行する前に割り当てていた値はGETALLWIN関数 (スクリプト関数)とSTATUS関数を組み合わせることで確認することができます。以下はメモ帳とペイントを起動した状態でプログラムを実行した結果です。
- 結果
現在メモ帳はIDの値が11、ペイントは13として割り当てられていますが、GETID関数でメモ帳・ペイントのIDを取得すると以下のように割り当てが変更されます。具体的にはメモ帳のIDが11から1、ペイントのIDが13から2に変更され、元々1から12に割り当てられていたものが後ろにずれていきます。
- 結果
GETID関数よりも先にGETALLWIN関数 (スクリプト関数)が実行されると、GETID関数で取得したIDは1からの連番にはならず、GETALLWIN関数 (スクリプト関数)実行時に割り当てられていたIDのままとなります。
- 結果
プログラム実行例
ファイル名を指定して実行で「ごみ箱」を開く
タスクバーの位置を取得する
画像をクリップボードにコピーする
Alt+Sでマウスカーソル下のオブジェクトのスクリーンショット画像をクリップボードにコピーします。
電卓(ストアアプリ)を起動
PowerPointを起動する(Excel)
Outlookを起動する(Excel)
マウスカーソル下のウィンドウの情報を吹き出しに表示
メモ帳に本文を入力し[名前を付けて保存]ダイアログボックスを開いて保存する
マウスカーソル下の文字情報を取得
Outlookが起動していなかったら起動する
マウスカーソル下のスクロールバー情報を取得
Wordを起動する(Excel)
ファイルを開いているプロセスを調べる
電卓で計算をする
音声認識でアプリを操作
アクティブウィンドウの左上にカーソルを移動
アクティブウィンドウが最大化されているかを調べる
アクティブウィンドウが最大化されているかを調べ数値を返します。最大化されている場合は0以外の数値、最大化されていない場合は0を返します。
音量を取得
ExcelファイルとCSVファイルをExcelにドロップして開く
CREATEOLEOBJで起動したExcelにファイルをドロップするとなぜか落ちるから、EXECで起動。
Internet ExplorerのタイトルとURLを取得
マウスカーソル下のウィンドウの左上の座標に移動する
CLKITEMで操作できる項目を取得
参考文献
関連記事
- STATUS関数 (スクリプト関数)
- ウィンドウの各種状態を返します。
- GETCTLHND関数 (スクリプト関数)
- ボタン等、オブジェクトのハンドルを取得します。
- ACW関数 (スクリプト関数)
- ウィンドウの状態を変更、またはアクティブにします。
- CTRLWIN関数 (スクリプト関数)
- ウィンドウの状態を制御します。
- GETSLIDER関数 (スクリプト関数)
- スライダー(トラックバー、スクロールバー)の値を取得します。
- HNDTOID関数 (スクリプト関数)
- ハンドル値をIDに変換します。
- IDTOHND関数 (スクリプト関数)
- IDをハンドル値に変換します。
- CHKBTN関数 (スクリプト関数)
- ボタン類(ボタン、チェックボックス、ラジオボタン)の状態を返します。
- CLKITEM関数 (スクリプト関数)
- アイテムをクリックします。
- GETITEM関数 (スクリプト関数)
- キャプション文字やリスト等をすべて取得します。



















