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 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
  1. CREATEOLEOBJ
  2. FSO.FolderExists
  3. FSO.CreateFolder
  4. GETALLWIN
  5. STATUS
  6. PathCleanupSpec
  7. FSO.BuildPath
  8. uniqueFilename
  9. SAVEIMG

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

HASHTBL NAME

NAME[ITM_BTN] = "ITM_BTN"
NAME[ITM_LIST] = "ITM_LIST"
NAME[ITM_TAB] = "ITM_TAB"
NAME[ITM_MENU] = "ITM_MENU"
NAME[ITM_TREEVIEW] = "ITM_TREEVIEW"
NAME[ITM_LISTVIEW] = "ITM_LISTVIEW"
NAME[ITM_EDIT] = "ITM_EDIT"
NAME[ITM_STATIC] = "ITM_STATIC"
NAME[ITM_STATUSBAR] = "ITM_STATUSBAR"
NAME[ITM_TOOLBAR] = "ITM_TOOLBAR"
NAME[ITM_LINK] = "ITM_LINK"
NAME[ITM_ACCCLK] = "ITM_ACCCLK"
NAME[ITM_ACCCLK2] = "ITM_ACCCLK2"
NAME[ITM_ACCTXT] = "ITM_ACCTXT"
NAME[ITM_ACCEDIT] = "ITM_ACCEDIT"
NAME[ITM_FROMLAST] = "ITM_FROMLAST"

SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")

WHILE TRUE
	FUKIDASI("ALT+Sでカーソル下の情報を取得します<#CR>ESCで終了")
	IF GETKEYSTATE(VK_ALT) AND GETKEYSTATE(VK_S) THEN BREAK
WEND
FUKIDASI("取得中")

DIM ID = GETID(GET_FROMPOINT_WIN)

PRINT "DIM ID = GETID(<#DBL>" + STATUS(ID, ST_TITLE) + "<#DBL>, <#DBL>" + STATUS(ID, ST_CLASS) + "<#DBL>)"
PRINT

DIM items[] = ITM_BTN, ITM_LIST, ITM_TAB, ITM_MENU, ITM_TREEVIEW, ITM_LISTVIEW, ITM_EDIT, ITM_STATIC, ITM_STATUSBAR, ITM_TOOLBAR, ITM_LINK, ITM_ACCCLK, ITM_ACCCLK2, ITM_ACCTXT, ITM_ACCEDIT, ITM_FROMLAST

FOR item IN items
	PRINT "// [" + NAME[item] + "]"
	FOR arr IN GETITEM(ID, item)
		PRINT "CLKITEM(ID, <#DBL>" + arr + "<#DBL>, " + NAME[item] + ")"
	NEXT
	PRINT
NEXT

//////////////////////////////////////////////////
// 【引数】
// 
// 【戻値】
// 
//////////////////////////////////////////////////
PROCEDURE forceQuit()
	EXITEXIT
FEND
  1. SETHOTKEY
  2. FUKIDASI
  3. GETKEYSTATE
  4. GETID
  5. STATUS
  6. GETITEM
解説
  1. 1行目
    HASHTBL NAME
    
    連想配列NAMEを宣言。
  2. 3-18行目
    NAME[ITM_BTN] = "ITM_BTN"
    NAME[ITM_LIST] = "ITM_LIST"
    NAME[ITM_TAB] = "ITM_TAB"
    NAME[ITM_MENU] = "ITM_MENU"
    NAME[ITM_TREEVIEW] = "ITM_TREEVIEW"
    NAME[ITM_LISTVIEW] = "ITM_LISTVIEW"
    NAME[ITM_EDIT] = "ITM_EDIT"
    NAME[ITM_STATIC] = "ITM_STATIC"
    NAME[ITM_STATUSBAR] = "ITM_STATUSBAR"
    NAME[ITM_TOOLBAR] = "ITM_TOOLBAR"
    NAME[ITM_LINK] = "ITM_LINK"
    NAME[ITM_ACCCLK] = "ITM_ACCCLK"
    NAME[ITM_ACCCLK2] = "ITM_ACCCLK2"
    NAME[ITM_ACCTXT] = "ITM_ACCTXT"
    NAME[ITM_ACCEDIT] = "ITM_ACCEDIT"
    NAME[ITM_FROMLAST] = "ITM_FROMLAST"
    
  3. 20行目
    SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
    
    ESCキーでforceQuit関数を実行。
  4. 22-25行目
    WHILE TRUE
    	FUKIDASI("ALT+Sでカーソル下の情報を取得します<#CR>ESCで終了")
    	IF GETKEYSTATE(VK_ALT) AND GETKEYSTATE(VK_S) THEN BREAK
    WEND
    
    「ALT+S」が入力されるのを待つ。
  5. 26行目
    FUKIDASI("取得中")
    
    吹き出しを表示。
  6. 28行目
    DIM ID = GETID(GET_FROMPOINT_WIN)
    
    マウスカーソル下のウィンドウのIDを取得。
  7. 33行目
    DIM items[] = ITM_BTN, ITM_LIST, ITM_TAB, ITM_MENU, ITM_TREEVIEW, ITM_LISTVIEW, ITM_EDIT, ITM_STATIC, ITM_STATUSBAR, ITM_TOOLBAR, ITM_LINK, ITM_ACCCLK, ITM_ACCCLK2, ITM_ACCTXT, ITM_ACCEDIT, ITM_FROMLAST
    
  8. 35-41行目
    FOR item IN items
    	PRINT "// [" + NAME[item] + "]"
    	FOR arr IN GETITEM(ID, item)
    		PRINT "CLKITEM(ID, <#DBL>" + arr + "<#DBL>, " + NAME[item] + ")"
    	NEXT
    	PRINT
    NEXT
    

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

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. GETID
  2. STATUS
解説
  1. 1行目
    DIM ID = GETID("", "Shell_TrayWnd")
    
    タスクバーのIDを取得。
  2. 3行目
    SELECT TRUE
    
    CASEで書かれた条件で最初にTRUEとなったところを実行する。
  3. 4-5行目
    	CASE STATUS(ID, ST_X) = 0 AND STATUS(ID, ST_Y) = 0 AND STATUS(ID, ST_CLWIDTH) = G_SCREEN_W
    		PRINT "上"
    
    タスクバーのx座標が0・y座標が0、かつ、幅が画面幅と等しければ、「上」と出力。
  4. 6-7行目
    	CASE STATUS(ID, ST_X) = 0 AND STATUS(ID, ST_Y) = 0 AND STATUS(ID, ST_CLHEIGHT) = G_SCREEN_H
    		PRINT "左"
    
    タスクバーのx座標が0・y座標が0、かつ、高さが画面高と等しければ、「左」と出力。
  5. 8-9行目
    	CASE STATUS(ID, ST_X) = 0 AND STATUS(ID, ST_Y) <> 0 AND STATUS(ID, ST_CLWIDTH) = G_SCREEN_W
    		PRINT "下"
    
    タスクバーのx座標が0・y座標が0でない、かつ、幅が画面幅と等しければ、「下」と出力。
  6. 10-11行目
    	CASE STATUS(ID, ST_X) <> 0 AND STATUS(ID, ST_Y) = 0 AND STATUS(ID, ST_CLHEIGHT) = G_SCREEN_H
    		PRINT "右"
    
    タスクバーのx座標が0でない・y座標が0、かつ、高さが画面高と等しければ、「右」と出力。

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

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
  1. SETHOTKEY
  2. GETID
  3. STATUS
  4. FUKIDASI
  5. SLEEP

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

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
  1. GETID
  2. FUKIDASI
  3. POSACC
  4. STATUS

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

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", "ACC_BACK"
	DIM str = ""
	FOR item IN array
		str = str + item + ":" + POSACC(ID, x - STATUS(ID, ST_CLX), y - STATUS(ID, ST_CLY), EVAL(item)) + "<#CR>"
	NEXT
	FUKIDASI(str)
	SLEEP(0.001)
WEND

//////////////////////////////////////////////////
// 【引数】
// 
// 【戻値】
// 
//////////////////////////////////////////////////
PROCEDURE forceQuit()
	EXITEXIT
FEND
  1. forceQuit
  2. GETID
  3. POSACC
  4. STATUS
  5. FUKIDASI
  6. SLEEP

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

DIM ID = GETID(GET_ACTIVE_WIN)

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

MMV(x, y)
  1. GETID
  2. STATUS
  3. MMV
解説
  1. 1行目
    DIM ID = GETID(GET_ACTIVE_WIN)
    
    アクティブウィンドウのIDを取得。
  2. 3行目
    DIM x = STATUS(ID, ST_X)
    
    アクティブウィンドウのx座標を取得し、変数xに代入。
  3. 4行目
    DIM y = STATUS(ID, ST_Y)
    
    アクティブウィンドウのy座標を取得し、変数yに代入。
  4. 6行目
    MMV(x, y)
    
    マウスカーソルを(x, y) = (変数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
  1. GETALLWIN
  2. arrayPush
  3. arrayFilter
  4. STATUS
  5. arrayMap
  6. REPLACE
  7. QSORT
  8. GETACTIVEOLEOBJ
  9. MSGBOX
  10. SLCTBOX
  11. Word.Documents
  12. Word.Documents.Item
  13. Word.Document.Activate
  14. Word.Application.ActiveDocument
  15. Word.Document.Paragraphs
  16. Word.Paragraphs.Count

文字数を出力

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
  1. arrayPush
  2. arrayFilter
  3. STATUS
  4. arrayMap
  5. QSORT
  6. GETACTIVEOLEOBJ
  7. MSGBOX
  8. SLCTBOX
  9. Word.Application.ActiveDocument
  10. Word.Range
  11. Word.Range.ComputeStatistics
結果
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
  1. arrayPush
  2. arrayFilter
  3. STATUS
  4. arrayMap
  5. QSORT
  6. GETACTIVEOLEOBJ
  7. MSGBOX
  8. SLCTBOX
  9. Word.Application.ActiveDocument
  10. Word.Document.CheckGrammar

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

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
  1. arrayPush
  2. arrayFilter
  3. STATUS
  4. arrayMap
  5. REPLACE
  6. QSORT
  7. GETACTIVEOLEOBJ
  8. MSGBOX
  9. SLCTBOX
  10. Word.Selection.Sentences.Text

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

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
  1. arrayPush
  2. arrayFilter
  3. STATUS
  4. arrayMap
  5. REPLACE
  6. QSORT
  7. GETACTIVEOLEOBJ
  8. MSGBOX
  9. SLCTBOX
  10. Word.Selection.Range
  11. Word.Range.Start
  12. Word.Range.Paragraphs.Count