GETALLWIN

全ウィンドウのIDを取得します。

構文
  1. Integer = GETALLWIN( ID )
引数
ID省略可
指定ウィンドウの子ウィンドウを取得したい場合に、親ウィンドウIDを指定
戻り値

取得したWindowの数 (For In 構文にて指定された場合は各要素を返す)

取得したIDは配列変数の ALL_WIN_ID[ ] に格納される (配列はゼロから)

プログラム実行例

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

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

//////////////////////////////////////////////////
// 【引数】
//   num : 符号を調べる数値 
// 【戻値】
//    : 正の数 
//   1、 : 0 
//   0、 : 負の数 
//   -1、 : 
//////////////////////////////////////////////////
FUNCTION sign(num)
	SELECT TRUE
		CASE num > 0
			RESULT = 1
		CASE num = 0
			RESULT = 0
		CASE num < 0
			RESULT = -1
	SELEND
FEND
    (1)
  1. FSO.FolderExists(4)
  2. (4) (6) (8,9) (10) (11) (12) (13)
解説
  1. 1行目
    UWSC
    DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
    FileSystemObjectオブジェクトを生成し、 FSO に代入します。
  2. 3行目
    UWSC
    DIM folderspec = "D:\Desktop\Screenshot"
  3. 4行目
    UWSC
    IF FSO.FolderExists(folderspec) = FALSE THEN FSO.CreateFolder(folderspec)
  4. 6,15行目
    UWSC
    FOR n = 0 TO GETALLWIN() - 1
    	…
    NEXT
  5. 7行目
    UWSC
    	DIM ID = ALL_WIN_ID[n]
  6. 8,14行目
    UWSC
    	IFB STATUS(ID, ST_VISIBLE) = TRUE		
    		…
    	ENDIF
  7. 9行目
    UWSC
    		DIM filename = ID + "_" + STATUS(ID, ST_TITLE)
  8. 10行目
    UWSC
    		filename = PathCleanupSpec(filename)
  9. 11行目
    UWSC
    		DIM path = FSO.BuildPath(folderspec, filename)
  10. 12行目
    UWSC
    		path = uniqueFilename(path)
  11. 13行目
    UWSC
    		SAVEIMG(path, id)

総段落数を取得

UWSC
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

//////////////////////////////////////////////////
// 【引数】
//   array : 上限値を求める配列 
// 【戻値】
//   配列の上限値 
//////////////////////////////////////////////////
FUNCTION UBound(array[])
	RESULT = RESIZE(array)
FEND
    (6) (7) (10) (10,11) (11) (11) (13) (16) (18,25) (22) (29) (29) (29) (31) (31) (31)

指定したキーワードに下線を引く(Word)

UWSC
CONST wdDoNotSaveChanges = 0			// 保留中の変更を保存しない
CONST wdSaveChanges = -1				// 保留中の変更をユーザーに確認しないで自動的に保存する
CONST wdPromptToSaveChanges = -2		// 保留中の変更を保存するかどうかをユーザーに確認する
CONST wdFindStop = 0
CONST wdCharacter = 1
CONST wdUnderlineSingle = 1
CONST wdCollapseEnd = 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

Word.Documents(res).Activate

DIM Document = Word.Application.ActiveDocument
DIM Range = Document.Content

// 下線を引くキーワード
DIM keywords[] = "ギャラリー", "オプション", "テーマ"

FOR item IN keywords
	Range.SetRange(0, 0)
	WITH Range.Find
		.Text = item
		.Forward = TRUE
		.Wrap = wdFindStop
		WHILE .Execute = TRUE
			WITH Range
				.Expand(wdCharacter)				// 範囲
				.Underline = wdUnderlineSingle		// 下線を引く
				.Collapse(wdCollapseEnd)		
			ENDWITH
		WEND
	ENDWITH
NEXT

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

//////////////////////////////////////////////////
// 【引数】
//   array : 上限値を求める配列 
// 【戻値】
//   配列の上限値 
//////////////////////////////////////////////////
FUNCTION UBound(array[])
	RESULT = RESIZE(array)
FEND
    (12) (13) (17) (19) (21) (24) (26,33) (30) (37) (37) (39) (40) (46) (47) (48) (49) (50) (51) (53) (54) (55) (61) (62)

関連記事

ACW (スクリプト関数)
ウィンドウの状態を変更、またはアクティブにします。
CTRLWIN (スクリプト関数)
ウィンドウの状態を制御します。
CALCARRAY (スクリプト関数)
配列データを計算します。
GETOLEITEM (スクリプト関数)
コレクションを取得します。
JOIN (スクリプト関数)
配列の中身を区切り文字で結合し、文字列として返します。
RESIZE (スクリプト関数)
配列のサイズを変更します。
SLICE (スクリプト関数)
配列の中を指定範囲の配列で返します。
UBound (自作関数)
配列の上限値(最大インデックス)を求めます。
連想配列
連想配列とは、自動的に割り当てられる数字をキーとして持つかわりに、自由に任意の文字列を割り振ることができる配列のことです。添え字に番号の変わりに名前をつけることでわかりやすく管理することができます。
inArray (自作関数)
指定した値が配列に存在すればTrue、なければFalseを返します。
divisors (自作関数)
引数に指定した数値の約数のリストを返します。
gnomeSort (自作関数)
引数に指定された配列を ノームソート で並び替えます。
heapSort (自作関数)
引数に指定された配列を ヒープソート で並び替えます。
POPUPMENU (スクリプト関数)
ポップアップメニューを表示します。
SETCLEAR (スクリプト関数)
配列を指定された値で埋めます。
SHIFTARRAY (スクリプト関数)
配列データをシフトします。
oddEvenSort (自作関数)
引数に指定された配列を 奇偶転置ソート で並び替えます。
shearSort (自作関数)
引数に指定された配列を シェアソート で並び替えます。
Collatz (自作関数)
コラッツ数列 を求め結果を配列で返します。
Kaprekar (自作関数)
カプレカ数 を求め結果を配列で返します。
arraySearch (自作関数)
配列の中から指定した要素が見つかった場合、その要素がある最初のインデックスを返します。
QSORT (スクリプト関数)
配列の中身をソートします。
arrayReverse (自作関数)
引数に指定した配列を逆順にして返します。
arrayDiff (自作関数)
配列の差を計算します。
getFolderList (自作関数)
サブフォルダを含めたフォルダ一覧を配列で返します。
SPLIT (スクリプト関数)
文字列を区切り、配列を作成します。
FOR-IN-NEXT
配列の要素分だけ処理を繰り返します。FOR文でも書き換えられます。
bubbleSort (自作関数)
引数に指定された配列を バブルソート で並び替えます。
shakerSort (自作関数)
引数に指定された配列を シェーカーソート で並び替えます。
combSort (自作関数)
引数に指定された配列を コムソート で並び替えます。
selectionSort (自作関数)
引数に指定された配列を 選択ソート で並び替えます。
Shell.CascadeWindows メソッド
デスクトップ上のすべてのウィンドウをカスケードします。この方法は、タスクバーを右クリックして「重ねて表示」を選択するのと同じ効果があります。
Shell.MinimizeAll メソッド
すべてのウィンドウを最小化します。
Shell.TileHorizontally メソッド
すべてのウィンドウを上下に並べて表示します。
Shell.TileVertically メソッド
すべてのウィンドウを左右に並べて表示します。
Shell.UndoMinimizeALL メソッド
すべてのデスクトップウィンドウを、最後のMinimizeAllコマンドの前と同じ状態に復元します。
insertionSort (自作関数)
引数に指定された配列を 挿入ソート で並び替えます。
shellSort (自作関数)
引数に指定された配列を シェルソート で並び替えます。
mergeSort (自作関数)
引数に指定された配列を マージソート で並び替えます。
quickSort (自作関数)
引数に指定された配列を クイックソート で並び替えます。
bogoSort (自作関数)
引数に指定された配列を ボゴソート で並び替えます。
CLKITEM (スクリプト関数)
アイテムをクリックします。
GETID (スクリプト関数)
指定したウィンドウのIDを取得します。第一引数に取得したいウィンドウのタイトル(一部でも可)を指定します。
GETITEM (スクリプト関数)
キャプション文字やリスト等をすべて取得します。
GETSLIDER (スクリプト関数)
スライダー(トラックバー、スクロールバー)の値を取得します。
GETSTR (スクリプト関数)
文字列を取得します。
HNDTOID (スクリプト関数)
ハンドル値 をIDをに変換します。
CHKBTN (スクリプト関数)
ボタン類の状態を返します。
GETCTLHND (スクリプト関数)
ボタン等、オブジェクトのハンドルを取得します。
IDTOHND (スクリプト関数)
IDを ハンドル値 に変換します。
MOUSEORG (スクリプト関数)
マウス座標を相対座標にする、 またはマウスとキー情報を直接ウィンドウへ送ります。
SETSLIDER (スクリプト関数)
スライダー(トラックバー、スクロールバー)の値を設定します。
STATUS (スクリプト関数)
ウィンドウの各種状態を返します。
SCKEY (スクリプト関数)
ショートカットキーを実行します。
SENDSTR (スクリプト関数)
文字列を送信します。