本ページには広告が含まれています。
ウィンドウの各種状態を返します。
- 構文
- return = STATUS( ID, 取得項目 )
- 引数
- ID (Integer)必須
- Windowを識別するID
- 取得項目 (#status)必須
- 以下の定数
- ST_TITLE
- タイトルを返す(型:UNICODE文字列)
- ST_CLASS
- クラス名を返す(型:UNICODE文字列)
- ST_X
- X座標を返す(型:4バイト整数(符号付))
- ST_Y
- Y座標を返す(型:4バイト整数(符号付))
- ST_WIDTH
- 幅を返す(型:4バイト整数(符号付))
- ST_HEIGHT
- 高さを返す(型:4バイト整数(符号付))
- ST_CLX
- クライアント領域のX座標を返す(型:4バイト整数(符号付))
- ST_CLY
- クライアント領域のY座標を返す(型:4バイト整数(符号付))
- ST_CLWIDTH
- クライアント領域の幅を返す(型:4バイト整数(符号付))
- ST_CLHEIGHT
- クライアント領域の高さを返す(型:4バイト整数(符号付))
- ST_PARENT
- 親ウィンドウのIDを返す、親が無ければ-1(型:4バイト整数(符号付))
- ST_ICON
- アイコン状態であればTrue、でなければFalse(型:ブール型)
- ST_MAXIMIZED
- 最大化状態であればTrue、でなければFalse(型:ブール型)
- ST_VISIBLE
- 通常の表示状態であればTrue、でなければFalse(型:ブール型)
- ST_ACTIVE
- アクティブ状態であればTrue、でなければFalse(型:ブール型)
- ST_BUSY
- ビジー状態であればTrue、でなければFalse(型:ブール型)
- ST_ISID
- 有効なIDであればTrue、でなければFalse(型:ブール型)
- ST_WIN64
- 64bitアプリであればTrue、でなければFalse(型:ブール型)
- ST_PATH
- EXEのパスを返す(型:UNICODE文字列)
- ST_PROCESS
- プロセスIDを返す(型:4バイト整数(符号なし))
- ST_MONITOR
- 表示されているモニタ番号を返す(型:4バイト整数(符号付))
- 戻り値
- 取得した値
取得項目
ウィンドウの座標・幅
- ST_TITLE
- タイトルバーに表示されるタイトルを返します。
- ST_CLASS
- アプリケーション作成者がアプリケーションに付与する内部的な名前であるクラス名を返します。
- ST_X
- ウィンドウのX座標を返します。返す値はウィンドウ左上を基準としたX座標となります。
- ST_Y
- ウィンドウのY座標を返します。返す値はウィンドウ左上を基準としたY座標となります。
- ST_WIDTH
- ウィンドウの幅を返します。
- ST_HEIGHT
- ウィンドウの高さを返します。
- ST_CLX
- クライアント領域のX座標を返します。返す値はクライアント領域左上を基準としたX座標となります。
- ST_CLY
- クライアント領域のY座標を返します。返す値はクライアント領域左上を基準としたY座標となります。
- ST_CLWIDTH
- クライアント領域の幅を返します。
- ST_CLHEIGHT
- クライアント領域の高さを返します。
座標とサイズを組み合わせることでウィンドウの左上・右上・左下・右下の座標を計算で求めることができます。
DIM ID = GETID(GET_FROMPOINT_WIN)
DIM x
DIM y
// 左上
x = STATUS(ID, ST_X)
y = STATUS(ID, ST_Y)
// 右上
x = STATUS(ID, ST_X) + STATUS(ID, ST_WIDTH)
y = STATUS(ID, ST_Y)
// 左下
x = STATUS(ID, ST_X)
y = STATUS(ID, ST_Y) + STATUS(ID, ST_HEIGHT)
// 右下
x = STATUS(ID, ST_X) + STATUS(ID, ST_WIDTH)
y = STATUS(ID, ST_Y) + STATUS(ID, ST_HEIGHT)
親ウィンドウ・子ウィンドウ
- ST_PARENT
- 親ウィンドウのIDを返します。ウィンドウからウィンドウを開いたとき新しく開いた方のウィンドウを子ウィンドウ、元のウィンドウを親ウィンドウといいます。画像のOptionのウィンドウから見たUWSC Debuggerが親ウィンドウとなります。
状態
- ST_ICON
- アイコン状態を示すブール値を返します。
- ST_MAXIMIZED
- 最大化状態を示すブール値を返します。
- ST_VISIBLE
- 可視状態を示すブール値を返します。可視状態であれば最小化しててもTrueを返します。
- ST_ACTIVE
- アクティブ状態を示すブール値を返します。アクティブ状態とは利用者が文字入力などの操作を行える状態にある、最前面に表示されているウィンドウのことをいいます。
- ST_BUSY
- ビジー状態を示すブール値を返します。ビジー状態とは負荷のかかる処理を行っていてユーザーの操作に対応できない状態のことを指します。マウスカーソルの種別が待ち状態(青い輪でくるくるしてる状態)がビジー状態です。
ウィンドウのID
- ST_ISID
- UWSCで利用できるIDであるかを示すブール値を返します。
有効なIDは以下のプログラムで取得できます。以下の結果に出てくるIDはTrue、出てこない値はFalseを返します。
FOR ID IN GETALLWIN()
PRINT ID
NEXT
64bitアプリ
- ST_WIN64
- 64bitアプリかを示すブール値を返します。64bitアプリかはタスクマネージャーのプロセスで確認することができます。アプリ名の後ろに(32ビット)と書かれているものは32bitアプリ、書かれていないものは64bitアプリとなります。
実行ファイルの場所
- ST_PATH
- アプリケーションの実行ファイルの場所(パス)を返します。実行ファイルの場所は、タスクマネージャーのアプリ名を右クリックメニューの[ファイルの場所を開く]で開いたときに選択されているアプリのパスと同じです。
プロセスID
- ST_PROCESS
- プロセスIDを返します。この値はタスクマネージャー詳細タブのPIDの値に等しいです。
モニタ番号
- ST_MONITOR
- 表示されているモニタ番号を返します。
プログラム実行例
表示されているすべてのウィンドウのスクリーンショットを保存
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM folderspec = "D:\Desktop\Screenshot"
IF FSO.FolderExists(folderspec) = FALSE THEN FSO.CreateFolder(folderspec)
FOR n = 0 TO GETALLWIN() - 1
DIM ID = ALL_WIN_ID[n]
IFB STATUS(ID, ST_VISIBLE) = TRUE
DIM filename = ID + "_" + STATUS(ID, ST_TITLE)
filename = PathCleanupSpec(filename)
DIM path = FSO.BuildPath(folderspec, filename)
path = uniqueFilename(path)
SAVEIMG(path, id)
ENDIF
NEXT
//////////////////////////////////////////////////
// 【引数】
// filename : 使えない文字を削除するファイル・フォルダ名
// 【戻り値】
// ファイル名として使えない文字を削除した文字列
//////////////////////////////////////////////////
FUNCTION PathCleanupSpec(filename)
DIM filenameErrChar[12] = "\", "/", ":", "*", "?", "<#DBL>", "<#CR>", "<#TAB>", "<", ">", "|", "[", "]"
FOR item IN filenameErrChar
filename = REPLACE(filename, item, "")
NEXT
RESULT = filename
FEND
//////////////////////////////////////////////////
// 【引数】
// path : ファイルのパス
// 【戻り値】
// 重複しないファイル名
//////////////////////////////////////////////////
FUNCTION uniqueFilename(path)
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
IFB FSO.FileExists(path) THEN
DIM fol = FSO.GetParentFolderName(path)
DIM filename = FSO.GetBaseName(path)
DIM extension = FSO.GetExtensionName(path)
DIM i = 2
WHILE FSO.FileExists(FSO.BuildPath(fol, filename + " (" + i + ")." + extension))
i = i + 1
WEND
RESULT = FSO.BuildPath(fol, filename + " (" + i + ")." + extension)
ELSE
RESULT = path
ENDIF
FEND
使用関数
解説
タスクバーの位置を取得する
DIM ID = GETID("", "Shell_TrayWnd")
SELECT TRUE
CASE STATUS(ID, ST_X) = 0 AND STATUS(ID, ST_Y) = 0 AND STATUS(ID, ST_CLWIDTH) = G_SCREEN_W
PRINT "上"
CASE STATUS(ID, ST_X) = 0 AND STATUS(ID, ST_Y) = 0 AND STATUS(ID, ST_CLHEIGHT) = G_SCREEN_H
PRINT "左"
CASE STATUS(ID, ST_X) = 0 AND STATUS(ID, ST_Y) <> 0 AND STATUS(ID, ST_CLWIDTH) = G_SCREEN_W
PRINT "下"
CASE STATUS(ID, ST_X) <> 0 AND STATUS(ID, ST_Y) = 0 AND STATUS(ID, ST_CLHEIGHT) = G_SCREEN_H
PRINT "右"
SELEND
使用関数
解説
マウスカーソル下のウィンドウの情報を吹き出しに表示
PUBLIC ttl, cls
SETHOTKEY(VK_ESC, , "forceQuit")
SETHOTKEY(VK_S, MOD_ALT, "output")
WHILE TRUE
ID = GETID(GET_FROMPOINT_WIN)
msg = ""
msg = msg + "ALT+Sでカーソル下のタイトルとクラス名を出力<#CR>"
msg = msg + "ESCで終了<#CR>"
msg = msg + "<#CR>"
ttl = STATUS(ID, ST_TITLE)
cls = STATUS(ID, ST_CLASS)
msg = msg + "タイトル:" + ttl + "<#CR>"
msg = msg + "クラス名:" + cls + "<#CR>"
msg = msg + "X座標:" + STATUS(ID, ST_X) + "<#CR>"
msg = msg + "Y座標:" + STATUS(ID, ST_Y) + "<#CR>"
msg = msg + "幅:" + STATUS(ID, ST_WIDTH) + "<#CR>"
msg = msg + "高さ:" + STATUS(ID, ST_HEIGHT) + "<#CR>"
msg = msg + "クライアントX座標:" + STATUS(ID, ST_CLX) + "<#CR>"
msg = msg + "クライアントY座標:" + STATUS(ID, ST_CLY) + "<#CR>"
msg = msg + "クライアント幅:" + STATUS(ID, ST_CLWIDTH) + "<#CR>"
msg = msg + "クライアント高さ:" + STATUS(ID, ST_CLHEIGHT) + "<#CR>"
msg = msg + "親ウィンドウID:" + STATUS(ID, ST_PARENT) + "<#CR>"
msg = msg + "アイコン状態:" + STATUS(ID, ST_ICON) + "<#CR>"
msg = msg + "最大化:" + STATUS(ID, ST_MAXIMIZED) + "<#CR>"
msg = msg + "表示状態:" + STATUS(ID, ST_VISIBLE) + "<#CR>"
msg = msg + "アクティブ状態:" + STATUS(ID, ST_ACTIVE) + "<#CR>"
msg = msg + "ビジー状態:" + STATUS(ID, ST_BUSY) + "<#CR>"
msg = msg + "有効ID:" + STATUS(ID, ST_ISID) + "<#CR>"
msg = msg + "64bit:" + STATUS(ID, ST_WIN64) + "<#CR>"
msg = msg + "EXEパス:" + STATUS(ID, ST_PATH) + "<#CR>"
msg = msg + "プロセスID:" + STATUS(ID, ST_PROCESS) + "<#CR>"
msg = msg + "モニター番号:" + STATUS(ID, ST_MONITOR) + "<#CR>"
FUKIDASI(msg)
SLEEP(0.01)
WEND
// 強制終了する
PROCEDURE forceQuit()
EXITEXIT
FEND
// カーソル下のウィンドウのタイトルとクラス名を出力
PROCEDURE output()
PRINT "GETID(<#DBL>" + ttl + "<#DBL>, <#DBL>" + cls + "<#DBL>)"
PRINT ttl
PRINT cls
PRINT "----------"
FEND
使用関数
マウスカーソル下の文字情報を取得
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
WHILE TRUE
DIM ID = GETID(GET_FROMPOINT_WIN)
FUKIDASI(POSACC(ID, G_MOUSE_X - STATUS(ID, ST_CLX), G_MOUSE_Y - STATUS(ID, ST_CLY), ACC_BACK))
SLEEP(0.001)
WEND
//////////////////////////////////////////////////
// 【引数】
//
// 【戻り値】
//
//////////////////////////////////////////////////
PROCEDURE forceQuit()
EXITEXIT
FEND
使用関数
ファイルを開いているプロセスを調べる
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
CONST TemporaryFolder = 2
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
WITH FSO
DIM Folder = .GetSpecialFolder(TemporaryFolder)
DIM folderspec = Folder.Path
DIM filename = .GetTempName
DIM path = .BuildPath(folderspec, filename)
ENDWITH
DIM Shell = CREATEOLEOBJ("Shell.Application")
Shell.FileRun()
DIM ID = GETID("ファイル名を指定して実行", "#32770")
SENDSTR(ID, "cmd /c openfiles /query /fo CSV > " + path)
CLKITEM(ID, "OK", CLK_BTN)
SLEEP(0.500)
REPEAT
SLEEP(0.100)
UNTIL GETID("C:\WINDOWS\system32\cmd.exe", "ConsoleWindowClass") = -1
DIM FID = FOPEN(path, F_READ)
TRY
DIM ID2 = GETID("使用中", "OperationStatusWindow")
GETITEM(ID2, ITM_ACCTXT, 1)
DIM str = ALL_ITEM_LIST[1]
DIM sep = IIF(POS("フォルダー", STATUS(ID2, ST_TITLE)) <> 0, "\", "")
DIM msg = "■" + str + "<#CR>"
FOR r = 5 TO FGET(FID, F_LINECOUNT)
IF POS("\" + str + sep, FGET(FID, r, 3)) <> 0 THEN
msg = msg + "ID:" + FGET(FID, r, 1) + ", プロセス名:" + FGET(FID, r, 2) + "<#CR>"
ENDIF
NEXT
FCLOSE(FID)
REPEAT
FUKIDASI(TRIM(msg))
SLEEP(0.100)
UNTIL GETID("使用中", "OperationStatusWindow") = -1
FINALLY
FSO.DeleteFile(path)
ENDTRY
//////////////////////////////////////////////////
// 【引数】
//
// 【戻り値】
//
//////////////////////////////////////////////////
PROCEDURE forceQuit()
EXITEXIT
FEND
//////////////////////////////////////////////////
// 【引数】
// expr : 評価する式
// truepart : 評価した式がTrueのときに返す値
// falsepart : 評価した式がFalseのときに返す値
// 【戻り値】
// truepart : 評価した式がTrueのとき、falsepart : 評価した式がFalseのとき
//////////////////////////////////////////////////
FUNCTION IIF(expr, truepart, falsepart)
IFB EVAL(expr) THEN
RESULT = truepart
ELSE
RESULT = falsepart
ENDIF
FEND
使用関数
解説
アクティブウィンドウの左上にカーソルを移動
DIM ID = GETID(GET_ACTIVE_WIN)
DIM x = STATUS(ID, ST_X)
DIM y = STATUS(ID, ST_Y)
MMV(x, y)
使用関数
解説
最前面にあるウィンドウのタイトルを吹き出しに表示
DEF_DLL GetForegroundWindow(): long: user32.dll
WHILE TRUE
FUKIDASI(STATUS(HNDTOID(GetForegroundWindow()), ST_TITLE))
SLEEP(0.001)
WEND
使用関数
カーソル位置の文章を取得
DIM arr[-1]
FOR n = 0 TO GETALLWIN() - 1
arrayPush(arr, ALL_WIN_ID[n])
NEXT
arrayFilter(arr, "STATUS(%val%, ST_CLASS) = <#DBL>OpusApp<#DBL> AND STATUS(%val%, ST_VISIBLE)")
arrayMap("REPLACE(STATUS(%val%, ST_TITLE), <#DBL> - Microsoft Word<#DBL>, <#DBL><#DBL>)", arr)
QSORT(arr, QSRT_A)
TRY
DIM Word = GETACTIVEOLEOBJ("Word.Application")
EXCEPT
MSGBOX("操作する文書を開いてださい。")
EXIT
ENDTRY
DIM res = SLCTBOX(SLCT_RDO OR SLCT_STR, 0, "操作する文書を選択", arr)
IFB res = -1 THEN
MSGBOX("ファイル名が選択されなかったので終了します。")
EXIT
ENDIF
PRINT Word.Selection.Sentences(1).Text
//////////////////////////////////////////////////
// 【引数】
// array : 一次元配列。参照引数。
// callback : コールバック関数。callback内で配列の値は「%val%」で使うことができます。
// 【戻り値】
// callback関数によりフィルタ処理が行われたarrayの全ての要素を含む配列を返します。
//////////////////////////////////////////////////
PROCEDURE arrayFilter(var array[], callback)
DIM n = 0
DIM tmp[-1]
FOR %val% IN array
IFB EVAL(callback) THEN
RESIZE(tmp, n)
tmp[n] = %val%
n = n + 1
ENDIF
NEXT
RESIZE(array, RESIZE(tmp))
FOR n = 0 TO RESIZE(tmp)
array[n] = tmp[n]
NEXT
FEND
//////////////////////////////////////////////////
// 【引数】
// array : 要素を追加する配列(参照引数)
// values : 追加する要素をvalue1から指定
// 【戻り値】
// 処理後の配列の要素の数
//////////////////////////////////////////////////
FUNCTION arrayPush(var array[], value1 = EMPTY, value2 = EMPTY, value3 = EMPTY, value4 = EMPTY, value5 = EMPTY, value6 = EMPTY, value7 = EMPTY, value8 = EMPTY, value9 = EMPTY, value10 = EMPTY, value11 = EMPTY, value12 = EMPTY, value13 = EMPTY, value14 = EMPTY, value15 = EMPTY, value16 = EMPTY)
DIM i = 1
WHILE EVAL("value" + i) <> EMPTY
DIM res = RESIZE(array, UBound(array) + 1)
array[res] = EVAL("value" + i)
i = i + 1
WEND
RESULT = LENGTH(array)
FEND
//////////////////////////////////////////////////
// 【引数】
// inputs : 繰り返す文字列
// multiplier : inputsを繰り返す回数
// 【戻り値】
// inputsをmultiplier回を繰り返した文字列を返します
//////////////////////////////////////////////////
FUNCTION strRepeat(inputs, multiplier)
DIM res = ""
FOR n = 1 TO multiplier
res = res + inputs
NEXT
RESULT = res
FEND
//////////////////////////////////////////////////
// 【引数】
// arrayname : 上限値を求める配列の名前
// dimension : 返す次元を示す整数
// 【戻り値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(arrayname[], dimension = 1)
RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")")
FEND
使用関数
CLKITEMで操作できる項目を取得
PUBLIC flg = FALSE
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
SETHOTKEY(VK_X, MOD_ALT, "flag")
DIM array[] = "BTN", "LIST", "TAB", "MENU", "TREEVIEW", + _
"LISTVIEW", "EDIT", "STATIC", "STATUSBAR", "TOOLBAR", + _
"LINK", "ACCCLK", "ACCCLK2", "ACCTXT", "ACCEDIT", + _
"FROMLAST", "BACK"
REPEAT
FUKIDASI("Alt + Xでカーソル下の情報を取得")
SLEEP(0.001)
UNTIL flg
FUKIDASI("取得中")
DIM ID = GETID(GET_FROMPOINT_WIN)
PRINT "DIM ID = GETID(<#DBL>" + STATUS(ID, ST_TITLE) + "<#DBL>, <#DBL>" + STATUS(ID, ST_CLASS) + "<#DBL>)"
PRINT
FOR item IN array
PRINT "// [" + item + "]"
FOR class IN GETITEM(ID, EVAL("ITM_" + item), -1)
PRINT "CLKITEM(ID, <#DBL>" + class + "<#DBL>, CLK_" + item + ")"
NEXT
PRINT
NEXT
PROCEDURE forceQuit()
EXITEXIT
FEND
PROCEDURE flag()
flg = TRUE
FEND
使用関数
解説
関連記事
- ACW関数 (スクリプト関数)
- 指定したIDのウィンドウの位置・サイズを変更します。IDのみを指定した場合、そのウィンドウをアクティブにします。
- MONITOR関数 (スクリプト関数)
- MONITOR関数は、指定したモニタ番号・取得項目の情報を取得します。取得項目には、X座標・Y座標・幅・高さ・モニター名があります。引数なしの場合はモニターの数を返します。
- EXEC関数 (スクリプト関数)
- EXECは、第一引数に指定したアプリを起動する関数です。そのウィンドウのIDを戻値として返します。ストアアプリ・エクスプローラなどの別プロセスを呼ぶアプリはIDを返さないことがあるので、起動した後にGETIDで取得します。
- GETID関数 (スクリプト関数)
- 指定したウィンドウのIDを取得します。第一引数に取得したいウィンドウのタイトル(一部でも可)を指定します。UWSCでウィンドウを操作するのによく使う関数です。
- PEEKCOLOR関数 (スクリプト関数)
- PEEKCOLOR関数は、指定座標の色を取得する関数です。
- MOUSEORG関数 (スクリプト関数)
- マウス座標を相対座標にする、 またはマウスとキー情報を直接ウィンドウへ送ります。
- getBitmap関数 (自作関数)
- 引数に指定したビットマップ画像のサイズ・幅・高さ・ビットの深さを配列で返します。
- GETCTLHND関数 (スクリプト関数)
- ボタン等、オブジェクトのハンドルを取得します。
- CHKIMG関数 (スクリプト関数)
- 指定画像が画面上にあるかチェックしあればその情報を返します。
- CTRLWIN関数 (スクリプト関数)
- ウィンドウの状態を操作します。ウィンドウを終了、アクティブ化、表示・非表示、最大化・最小化などができます。