Contents
- 構文
- 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行目
タスクバーのIDを取得。DIM ID = GETID("", "Shell_TrayWnd")
- 3行目
CASEで書かれた条件で最初にTRUEとなったところを実行する。SELECT TRUE
- 4-5行目
タスクバーのx座標が0・y座標が0、かつ、幅が画面幅と等しければ、「上」と出力。CASE STATUS(ID, ST_X) = 0 AND STATUS(ID, ST_Y) = 0 AND STATUS(ID, ST_CLWIDTH) = G_SCREEN_W PRINT "上"
- 6-7行目
タスクバーのx座標が0・y座標が0、かつ、高さが画面高と等しければ、「左」と出力。CASE STATUS(ID, ST_X) = 0 AND STATUS(ID, ST_Y) = 0 AND STATUS(ID, ST_CLHEIGHT) = G_SCREEN_H PRINT "左"
- 8-9行目
タスクバーのx座標が0・y座標が0でない、かつ、幅が画面幅と等しければ、「下」と出力。CASE STATUS(ID, ST_X) = 0 AND STATUS(ID, ST_Y) <> 0 AND STATUS(ID, ST_CLWIDTH) = G_SCREEN_W PRINT "下"
- 10-11行目
タスクバーのx座標が0でない・y座標が0、かつ、高さが画面高と等しければ、「右」と出力。CASE STATUS(ID, ST_X) <> 0 AND STATUS(ID, ST_Y) = 0 AND STATUS(ID, ST_CLHEIGHT) = G_SCREEN_H PRINT "右"
マウスカーソル下のウィンドウの情報を吹き出しに表示
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 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
アクティブウィンドウの左上にカーソルを移動
DIM ID = GETID(GET_ACTIVE_WIN)
DIM x = STATUS(ID, ST_X)
DIM y = STATUS(ID, ST_Y)
MMV(x, y)
解説
- 1行目
アクティブウィンドウのIDを取得。DIM ID = GETID(GET_ACTIVE_WIN)
- 3行目
アクティブウィンドウのx座標を取得し、変数xに代入。DIM x = STATUS(ID, ST_X)
- 4行目
アクティブウィンドウのy座標を取得し、変数yに代入。DIM y = STATUS(ID, ST_Y)
- 6行目
マウスカーソルを(x, y) = (変数x, 変数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)
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
この記事は役に立ちましたか?