STATUS

タグ:
構文
return = STATUS( ID, 取得項目 )
引数
ID
Windowを識別するID
取得項目
以下の定数
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バイト整数(符号付))
戻値
取得した値

プログラム実行例

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

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
解説
  1. 1行目
    DIM ID = GETID("", "Shell_TrayWnd")
    タスクバーのIDを取得。
  2. 3-12行目
    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

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

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

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

DIM ID = GETID(GET_ACTIVE_WIN) DIM x = STATUS(ID, ST_X) DIM y = STATUS(ID, ST_Y) MMV(x, y)

総段落数を取得

CONST wdDoNotSaveChanges = 0 CONST wdSaveChanges = -1 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 Word.Documents(res).Activate PRINT Word.ActiveDocument.Paragraphs.Count ////////////////////////////////////////////////// // 【引数】 // 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 : 要素を追加する配列(参照引数) // str : 追加する要素 // 【戻値】 // 処理後の配列の中の要素の数 ////////////////////////////////////////////////// FUNCTION arrayPush(var arr[], str) DIM res = RESIZE(arr, UBound(arr) + 1) arr[res] = str RESULT = res + 1 FEND ////////////////////////////////////////////////// // 【引数】 // 配列 : 上限値を求める配列 // 【戻値】 // 配列の上限値 ////////////////////////////////////////////////// FUNCTION UBound(array[]) RESULT = RESIZE(array) FEND

文字数を出力

CONST wdStatisticWords = 0 DIM arr[-1] // すべてのIDをarr変数に格納 FOR n = 0 TO GETALLWIN() - 1 arrayPush(arr, ALL_WIN_ID[n]) NEXT // クラス名がOpusApp、通常の表示状態であるものを抽出 arrayFilter(arr, "STATUS(%val%, ST_CLASS) = <#DBL>OpusApp<#DBL> AND STATUS(%val%, ST_VISIBLE)") // IDか[]らタイトルを取得し、そのタイトルから「 - Microsoft Word」を削除 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 DIM Range = Word.ActiveDocument.Range PRINT Range.ComputeStatistics(wdStatisticWords) ////////////////////////////////////////////////// // 【引数】 // 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 : 要素を追加する配列(参照引数) // str : 追加する要素 // 【戻値】 // 処理後の配列の中の要素の数 ////////////////////////////////////////////////// FUNCTION arrayPush(var arr[], str) DIM res = RESIZE(arr, UBound(arr) + 1) arr[res] = str RESULT = res + 1 FEND ////////////////////////////////////////////////// // 【引数】 // 配列 : 上限値を求める配列 // 【戻値】 // 配列の上限値 ////////////////////////////////////////////////// FUNCTION UBound(array[]) RESULT = RESIZE(array) FEND
結果
469

文章校正をする

CONST wdDoNotSaveChanges = 0 // 保留中の変更を保存しない CONST wdSaveChanges = -1 // 保留中の変更をユーザーに確認しないで自動的に保存する CONST wdPromptToSaveChanges = -2 // 保留中の変更を保存するかどうかをユーザーに確認する DIM arr[-1] // すべてのIDをarr変数に格納 FOR n = 0 TO GETALLWIN() - 1 arrayPush(arr, ALL_WIN_ID[n]) NEXT // クラス名がOpusApp、通常の表示状態であるものを抽出 arrayFilter(arr, "STATUS(%val%, ST_CLASS) = <#DBL>OpusApp<#DBL> AND STATUS(%val%, ST_VISIBLE)") // IDからタイトルを取得し、そのタイトルから「 - Microsoft Word」を削除 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 DIM Document = Word.Application.ActiveDocument Document.CheckGrammar //Word.Documents.Close(wdSaveChanges) //Word.Quit ////////////////////////////////////////////////// // 【引数】 // 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 : 要素を追加する配列(参照引数) // str : 追加する要素 // 【戻値】 // 処理後の配列の中の要素の数 ////////////////////////////////////////////////// FUNCTION arrayPush(var arr[], str) DIM res = RESIZE(arr, UBound(arr) + 1) arr[res] = str RESULT = res + 1 FEND ////////////////////////////////////////////////// // 【引数】 // 配列 : 上限値を求める配列 // 【戻値】 // 配列の上限値 ////////////////////////////////////////////////// FUNCTION UBound(array[]) RESULT = RESIZE(array) FEND

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

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 : 要素を追加する配列(参照引数) // str : 追加する要素 // 【戻値】 // 処理後の配列の中の要素の数 ////////////////////////////////////////////////// FUNCTION arrayPush(var arr[], str) DIM res = RESIZE(arr, UBound(arr) + 1) arr[res] = str RESULT = res + 1 FEND ////////////////////////////////////////////////// // 【引数】 // 配列 : 上限値を求める配列 // 【戻値】 // 配列の上限値 ////////////////////////////////////////////////// FUNCTION UBound(array[]) RESULT = RESIZE(array) FEND

カーソル位置の段落番号を取得

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 DIM Range = Word.Selection.Range Range.Start = 0 PRINT Range.Paragraphs.Count ////////////////////////////////////////////////// // 【引数】 // 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 : 要素を追加する配列(参照引数) // str : 追加する要素 // 【戻値】 // 処理後の配列の中の要素の数 ////////////////////////////////////////////////// FUNCTION arrayPush(var arr[], str) DIM res = RESIZE(arr, UBound(arr) + 1) arr[res] = str RESULT = res + 1 FEND ////////////////////////////////////////////////// // 【引数】 // 配列 : 上限値を求める配列 // 【戻値】 // 配列の上限値 ////////////////////////////////////////////////// FUNCTION UBound(array[]) RESULT = RESIZE(array) FEND

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

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) 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