STATUSステータス関数

ウィンドウの各種状態を返します。

構文
  1. 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バイト整数(符号付))
戻り値
取得した値

プログラム実行例

表示されているすべてのウィンドウのスクリーンショットを保存

UWSC
使用関数
解説

タスクバーの位置を取得する

UWSC
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
使用関数
解説

マウスカーソル下のウィンドウの情報を吹き出しに表示

UWSC
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
使用関数

マウスカーソル下の文字情報を取得

UWSC
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
使用関数

フラッシュ暗算

UWSC
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")

WHILE TRUE
	DIM x = G_MOUSE_X
	DIM y = G_MOUSE_Y
	DIM ID = GETID(GET_FROMPOINT_WIN)
	FUKIDASI(POSACC(ID, x - STATUS(ID, ST_CLX), y - STATUS(ID, ST_CLY), ACC_BACK))
	SLEEP(0.001)
WEND

//////////////////////////////////////////////////
// 【引数】
//   
// 【戻り値】
//   
//////////////////////////////////////////////////
PROCEDURE forceQuit()
	EXITEXIT
FEND
使用関数
解説

マウスカーソル下の取得できるすべての文字情報を取得

UWSC
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")

DIM grades[] = "20級(初級)", "19級(初級)", "18級(初級)", "17級(初級)", "16級(初級)", "15級(初級)", "14級(初級)", "13級(初級)", "12級(初級)", "11級(初級)", _
				"10級(中級)", "9級(中級)", "8級(中級)", "7級(中級)", "6級(中級)", "5級(中級)", "4級(中級)", "3級(中級)", "2級(中級)", "1級(中級)", _
				"初段(上級)", "2段(上級)", "3段(上級)", "4段(上級)", "5段(上級)", "6段(上級)", "7段(上級)", "8段(上級)", "9段(上級)", "10段(上級)", _
				"11段(超上級)", "12段(超上級)", "13段(超上級)", "14段(超上級)", "15段(超上級)", "16段(超上級)", "17段(超上級)", "18段(超上級)", "19段(超上級)", "20段(超上級)"
DIM keta[] = 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, _
				2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _ 
				2, 3, 3, 3, 3, 3, 3, 3, 3, 3, _ 
				3, 3, 3, 3, 3, 3, 3, 3, 3, 3
DIM num[] = 3, 3, 5, 8, 10, 12, 15, 20, 10, 15, _
				2, 3, 4, 5, 6, 7, 8, 10, 12, 15, _
				15, 4, 6, 8, 10, 12, 15, 15, 15, 15, _
				15, 15, 15, 15, 15, 15, 15, 15, 15, 15
DIM time[] = 5, 5, 7, 10, 12, 15, 15, 15, 10, 15, _
				4, 6, 7, 8, 9, 10, 11, 12, 12, 13, _
				10, 4, 5, 6, 7, 8, 8, 6, 4.5, 3, _
				2.8, 2.6, 2.4, 2.2, 2.0, 1.9, 1.8, 1.7, 1.6, 1.5
DIM grade = SLCTBOX(SLCT_CMB OR SLCT_NUM, 60, "レベルを選択", grades)
DIM sum = 0
DIM fontsize = 80
DIM fontname = "abacus2"
DIM fontcolor = $00aa00
DIM bgcolor = 1

FOR i = 1 TO num[grade]
	DIM n = POWER(10, keta[grade] - 1) + RANDOM(POWER(10, keta[grade]) - POWER(10, keta[grade] - 1))
	sum = sum + n
	DIM msg = " " + n + " "
	FUKIDASI(msg, G_SCREEN_W, G_SCREEN_H,, fontsize, fontname, fontcolor, bgcolor)
	DIM ID = GETID(GET_FUKIDASI_WIN)
	FUKIDASI(msg, (STATUS(ID, ST_X) - STATUS(ID, ST_WIDTH))/2, (STATUS(ID, ST_Y) - STATUS(ID, ST_HEIGHT))/2,, fontsize, fontname, fontcolor, bgcolor)
	SOUND("BEEP")
	SLEEP(time[grade])
	FUKIDASI()
NEXT

DIM ans = INPUT("答えは?")

IFB ans = sum THEN
	MSGBOX("正解です!(ans." + sum + ")")
ELSE
	MSGBOX("残念でした、正解は " + sum + " です。")
ENDIF

PROCEDURE forceQuit()
	EXITEXIT
FEND
使用関数

ファイルを開いているプロセスを調べる

UWSC
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")

WHILE TRUE
	DIM x = G_MOUSE_X
	DIM y = G_MOUSE_Y
	DIM ID = GETID(GET_FROMPOINT_WIN)
	DIM array[] = "ACC_ACC", "ACC_API", "ACC_NAME", "ACC_VALUE", "ACC_ROLE", "ACC_STATE", "ACC_DESCRIPTION", "ACC_LOCATION"
	DIM str = ""
	FOR item IN array
		str = str + item + ":" + POSACC(ID, x - STATUS(ID, ST_CLX), y - STATUS(ID, ST_CLY), EVAL(item + " OR ACC_BACK")) + "<#CR>"
	NEXT
	FUKIDASI(str)
	SLEEP(0.001)
WEND

//////////////////////////////////////////////////
// 【引数】
//   
// 【戻り値】
//   
//////////////////////////////////////////////////
PROCEDURE forceQuit()
	EXITEXIT
FEND
使用関数
解説

アクティブウィンドウの左上にカーソルを移動

UWSC
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
使用関数
解説

最前面にあるウィンドウのタイトルを吹き出しに表示

UWSC
DIM ID = GETID(GET_ACTIVE_WIN)

DIM x = STATUS(ID, ST_X)
DIM y = STATUS(ID, ST_Y)

MMV(x, y)
使用関数

カーソル位置の文章を取得

UWSC
DEF_DLL GetForegroundWindow(): long: user32.dll

WHILE TRUE
	FUKIDASI(STATUS(HNDTOID(GetForegroundWindow()), ST_TITLE))
	SLEEP(0.001)
WEND
使用関数

CLKITEMで操作できる項目を取得

UWSC
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

//////////////////////////////////////////////////
// 【引数】
//   callback : 配列の各要素に適用するコールバック関数 
//   array : コールバック関数を適用する配列。参照引数。 
// 【戻り値】
//   callback関数を適用した後、 適用後の要素を含む配列 
//////////////////////////////////////////////////
PROCEDURE arrayMap(callback, var array[])
	DIM tmp[RESIZE(array)]
	DIM n = 0
	FOR %val% IN array
		tmp[n] = EVAL(callback)
		n = n + 1
	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
使用関数
解説

この記事は役に立ちましたか?

はい
いいえ
ご協力ありがとうございます。

関連記事

ACW関数 (スクリプト関数)
ウィンドウの状態を変更、またはアクティブにします。
MONITOR関数 (スクリプト関数)
マルチモニタ情報を取得します。
EXEC関数 (スクリプト関数)
アプリを起動します。
PEEKCOLOR関数 (スクリプト関数)
指定位置の色を取得します。
GETID関数 (スクリプト関数)
指定したウィンドウのIDを取得します。第一引数に取得したいウィンドウのタイトル(一部でも可)を指定します。
MOUSEORG関数 (スクリプト関数)
マウス座標を相対座標にする、 またはマウスとキー情報を直接ウィンドウへ送ります。
GETCTLHND関数 (スクリプト関数)
ボタン等、オブジェクトのハンドルを取得します。
getBitmap (自作関数)
引数に指定したビットマップ画像のサイズ・幅・高さ・ビットの深さを配列で返します。
IE.Left プロパティ
オブジェクトの左端の座標を取得または設定します。
GETSLIDER関数 (スクリプト関数)
スライダー(トラックバー、スクロールバー)の値を取得します。