目次
- 1 使い方
- 2 カウントダウンタイマー
- 3 ランダムな時間待機
- 4 プログラム実行例
- 4.1 画像をクリップボードにコピーする
- 4.2 コントロールパネルを起動する
- 4.3 アイドル時間を取得
- 4.4 PowerPointを起動する(Excel)
- 4.5 Outlookを起動する(Excel)
- 4.6 マウスカーソル下のウィンドウの情報を吹き出しに表示
- 4.7 処理を5秒間待機します
- 4.8 メモ帳に本文を入力し[名前を付けて保存]ダイアログボックスを開いて保存する
- 4.9 特定のキーを連打する
- 4.10 Internet Explorerで開いたページを印刷
- 4.11 Internet Explorerで指定したURLを開きます
- 4.12 指定したURLを新しいタブで開く
- 4.13 POSTデータを送信して指定したURLを開く
- 4.14 テキストファイルを行毎に読み上げる
- 4.15 マウスの移動範囲を制限する
- 4.16 現在のカーソル位置を吹き出しに表示
- 4.17 GoBackとGoForwardを使った例
- 4.18 プログラム実行時からの経過時間を表示(ESCで終了)
- 4.19 メールの受信を検知(Outlook)
- 4.20 ワークブックの数と名前を取得
- 4.21 Wordを起動する(Excel)
- 4.22 アクティブセルに文字列を入力する
- 4.23 ファイルを開いているプロセスを調べる
- 4.24 電卓で計算をする
- 4.25 音声認識でアプリを操作
- 4.26 キーボードからの入力を1文字ずつずらす
- 4.27 今年何%経過したか
- 4.28 マウス位置の色を取得
- 4.29 Google Chromeで検索(WebDriver)
- 4.30 キャレット(カーソル)位置を取得
- 4.31 最前面にあるウィンドウのタイトルを吹き出しに表示
- 4.32 ウィンドウのタイトルバーを点滅させる
- 4.33 CLKITEMで操作できる項目を取得
引数に指定した時間(秒)だけ処理を待機します。
- 構文
- void = SLEEP( 秒 )
- 引数
- 秒 (Single)必須
- スリープする秒数(最小=0.001)
- 戻り値
使い方
引数に時間を秒単位で指定します。
以下は1秒待機する例。
SLEEP(1)
分単位で指定する場合は分×60、時間単位で指定する場合は時間×3600というように秒単位に直します。
15分、3時間待機する場合は以下のようになります。
SLEEP(15 * 60) // 15分(=900秒)
SLEEP(3 * 3600) // 3時間(=10800秒)
計算方法がわからないという方はSLEEP関数 (自作関数)を使ってください。
SLEEP(convert(15, "mn", "sec")) // 15分を秒単位に変換
SLEEP(convert(3, "hr", "sec")) // 3時間を秒単位に変換
10分30秒のように複数の時間単位を含む場合は、秒単位に揃えてから加算します。
SLEEP(10 * 60 + 30)
SLEEP(convert(10, "mn", "sec") + 30)
計算した結果を指定しても問題ありません。
SLEEP(630) // 10分30秒(=10*60+30)
カウントダウンタイマー
以下は残り待機時間を吹き出しで表示する関数です。SLEEP関数と同じように引数に待機する時間を秒単位で指定します。小数で指定した場合切り捨てられます。経過時間を計測するのではなく、まず終了日時を計算するので、誤差は1秒未満だと思われます。
PROCEDURE countDownTimer(sec)
DIM endTime = GETTIME() + INT(sec)
REPEAT
DIM t = endTime - GETTIME()
FUKIDASI(t)
SLEEP(0.001)
UNTIL t <= 0
FUKIDASI()
FEND
以下は3秒待機する例。
countDownTimer(3)
カウントダウンタイマーを実行しながら処理を進めるにはスレッドを使います。
THREAD countDownTimer(10)
ランダムな時間待機
RANDOM関数を使うことで待機時間に幅を持たせることができます。
ランダム値を取得する詳しい方法は、RANDOM関数を参考にしてください。
以下は5±2秒(3以上7未満)待機する例。
SLEEP(3 + RANDOM(5)) // 7 - 3 + 1 = 5
プログラム実行例
画像をクリップボードにコピーする
Alt+Sでマウスカーソル下のオブジェクトのスクリーンショット画像をクリップボードにコピーします。
SETHOTKEY(VK_S, MOD_ALT, "imageToClipboard")
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
WHILE TRUE
SLEEP(0.01)
WEND
PROCEDURE imageToClipboard()
SAVEIMG( , GETID(GET_FROMPOINT_WIN))
FEND
コントロールパネルを起動する
DIM Shell = CREATEOLEOBJ("Shell.Application")
Shell.ControlPanelItem("control")
SLEEP(3.000)
DIM ID = GETID("コントロール パネル")
//CTRLWIN(ID, CLOSE)
アイドル時間を取得
最後にキーボードまたはマウスを操作してから経過した時間をミリ秒で取得します。
DEF_DLL GetTickCount(): Dword: kernel32
DEF_DLL GetLastInputInfo({DWORD, DWORD}): BOOL: user32
DIM t
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
WHILE TRUE
GetLastInputInfo(8, t)
FUKIDASI((GetTickCount() - t) + "ms")
SLEEP(0.01)
WEND
PowerPointを起動する(Excel)
CONST xlMicrosoftPowerPoint = 2
DIM Excel = CREATEOLEOBJ("Excel.Application")
Excel.Visible = TRUE
Excel.Application.ActivateMicrosoftApp(xlMicrosoftPowerPoint)
DIM ID = GETID("PowerPoint", "PPTFrameClass")
SLEEP(5.000)
CTRLWIN(ID, CLOSE)
Excel.Quit
Outlookを起動する(Excel)
CONST xlMicrosoftMail = 3
DIM Excel = CREATEOLEOBJ("Excel.Application")
Excel.Visible = TRUE
Excel.Application.ActivateMicrosoftApp(xlMicrosoftMail)
DIM ID = GETID("Outlook", "rctrl_renwnd32")
SLEEP(5.000)
CTRLWIN(ID, CLOSE)
Excel.Quit
マウスカーソル下のウィンドウの情報を吹き出しに表示
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
処理を5秒間待機します
SLEEP(5.000)
メモ帳に本文を入力し[名前を付けて保存]ダイアログボックスを開いて保存する
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM path = "D:\Desktop\sample.txt"
DIM folderspec = FSO.GetParentFolderName(path)
DIM filename = FSO.GetFileName(path)
EXEC("notepad")
DIM ID = GETID("メモ帳", "Notepad")
SENDSTR(ID, "内容", 0)
CLKITEM(ID, "ファイル\名前を付けて保存", CLK_MENU)
IFB FSO.FolderExists(folderspec) THEN
DIM ID2 = GETID("名前を付けて保存", "#32770")
CTRLWIN(ID2, ACTIVATE)
SLEEP(0.500)
SCKEY(ID2, VK_F4)
SENDSTR(ID2, folderspec, 1, TRUE)
SCKEY(ID2, VK_RETURN)
SLEEP(0.500)
SCKEY(ID2, VK_ALT, VK_N)
SENDSTR(ID2, filename, 1, TRUE)
SLEEP(0.500)
CLKITEM(ID, "保存", ITM_BTN)
ELSE
PRINT "フォルダが存在しません。"
ENDIF
特定のキーを連打する
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
SETHOTKEY(VK_SPACE, EMPTYPARAM, "toggle")
PUBLIC flg = FALSE
WHILE TRUE
DIM msg = "Spaceキーで切り替え<#CR>ESCキーで終了<#CR>"
IFB flg THEN
FUKIDASI(msg + "連打中")
KBD(VK_A, CLICK)
SLEEP(0.100)
ELSE
FUKIDASI(msg + "停止中")
ENDIF
WEND
PROCEDURE forceQuit()
EXITEXIT
FEND
PROCEDURE toggle()
flg = !flg
SLEEP(0.500)
FEND
Internet Explorerで開いたページを印刷
ExecWBの第1引数にOLECMDID_PRINTを指定すると、[ファイル]メニューの[印刷]を実行するのと同じ動作をします。
またExecWBの第2引数にOLECMDEXECOPT_DONTPROMPTUSERを指定しているので、ユーザーの入力を促すことなく印刷が始まります。このプログラムを実行する際は注意してください。
CONST OLECMDID_PRINT = 6
CONST OLECMDEXECOPT_DONTPROMPTUSER = 2
DIM IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = TRUE
IE.Navigate("http://example.com")
BusyWait(IE)
SLEEP(3.000)
IE.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER)
IE.Quit
Internet Explorerで指定したURLを開きます
DIM IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = TRUE
IE.Navigate("http://example.com/")
BusyWait(IE)
SLEEP(3.000)
IE.Quit
指定したURLを新しいタブで開く
DIM IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = TRUE
IE.Navigate("http://example.com/", $800)
tab = getIEObj("http://example.com/")
BusyWait(tab)
SLEEP(3.000)
tab.Quit
IE.Quit
POSTデータを送信して指定したURLを開く
HASHTBL data
// 送信するデータを「data[名前] = 値」の形式で指定
data["mail"] = "info@example.com"
data["address"] = "北海道"
DIM arr[LENGTH(data) - 1]
FOR n = 0 TO LENGTH(data) - 1
// 連想配列の中身を「名前=値」の形式に変換
arr[n] = arr[n] + data[n, HASH_KEY] + "=" + ENCODE(ENCODE(data[n, HASH_VAL], CODE_UTF8), CODE_URL)
NEXT
// 配列の中身を「&」で結合
DIM PostData = JOIN(arr, "&")
// データをエンコード
PostData = ENCODE(PostData, CODE_BYTEARRAY)
// PostDataを渡すときは必ず指定
DIM Headers = "Content-Type: application/x-www-form-urlencoded"
DIM IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = TRUE
IE.Navigate("http://example.com", , , PostData, Headers)
BusyWait(IE)
SLEEP(5.000)
IE.Quit
テキストファイルを行毎に読み上げる
DIM FID = FOPEN("D:\Documents\sample.txt", F_READ)
FOR i = 1 TO FGET(FID, F_LINECOUNT)
FUKIDASI(i)
SPEAK(FGET(FID, i))
SLEEP(1.000)
NEXT
FCLOSE(FID)
マウスの移動範囲を制限する
DEF_DLL ClipCursor({long,long,long,long}): bool: user32
THREAD CursorPosition
ClipCursor(0, 0, 300, 300)
SLEEP(5.000)
ClipCursor(0, 0, G_SCREEN_W, G_SCREEN_H)
PROCEDURE CursorPosition()
WHILE TRUE
FUKIDASI(G_MOUSE_X + ", "+ G_MOUSE_Y)
SLEEP(0.001)
WEND
FEND
現在のカーソル位置を吹き出しに表示
DEF_DLL GetCursorPos({long, long}): bool: user32
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
DIM x, y
WHILE TRUE
GetCursorPos(x, y)
FUKIDASI(x + ", " + y)
SLEEP(0.001)
WEND
PROCEDURE forceQuit()
EXITEXIT
FEND
GoBackとGoForwardを使った例
DIM IE = IEBoot()
IE.Navigate("http://www.google.com")
BusyWait(IE)
IE.Navigate("https://www.yahoo.co.jp")
BusyWait(IE)
IE.GoBack
BusyWait(IE)
SLEEP(5.000)
IE.GoForward
BusyWait(IE)
SLEEP(5.000)
IE.Quit
プログラム実行時からの経過時間を表示(ESCで終了)
SETHOTKEY(VK_ESC, , "forceQuit")
DIM t = GETTIME()
WHILE TRUE
FUKIDASI(GETTIME() - t)
SLEEP(0.001)
WEND
PROCEDURE forceQuit()
EXITEXIT
FEND
メールの受信を検知(Outlook)
メールを受信したら日時を出力する。日時はメールの受信日時ではなくOutlookが受信を検知した日時。
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
DIM Outlook = GETACTIVEOLEOBJ("Outlook.Application")
OLEEVENT(Outlook, "ApplicationEvents_11", "NewMailEx", "receivedMail")
WHILE TRUE
FUKIDASI("ESCで終了")
SLEEP(0.001)
WEND
PROCEDURE forceQuit()
EXITEXIT
FEND
PROCEDURE receivedMail()
PRINT text(now(), "yyyy/mm/dd hh:nn:ss")
FEND
ワークブックの数と名前を取得
DIM Excel = CREATEOLEOBJ("Excel.Application")
Excel.Visible = TRUE
FOR i = 1 TO 3
Excel.Workbooks.Add()
NEXT
DIM Workbooks = Excel.Application.Workbooks
PRINT "ブック数:" + Excel.Workbooks.Count
PRINT "-----"
FOR Workbook IN Workbooks
PRINT "ブック名:" + Workbook.Name
NEXT
SLEEP(3.00)
Excel.Application.Quit
ブック数:3
-----
ブック名:Book1
ブック名:Book2
ブック名:Book3
Wordを起動する(Excel)
CONST xlMicrosoftWord = 1
DIM Excel = CREATEOLEOBJ("Excel.Application")
Excel.Visible = TRUE
Excel.Application.ActivateMicrosoftApp(xlMicrosoftWord)
DIM ID = GETID("Microsoft Word", "OpusApp")
SLEEP(5.000)
CTRLWIN(ID, CLOSE)
Excel.Quit
アクティブセルに文字列を入力する
DIM Excel = CREATEOLEOBJ("Excel.Application")
Excel.Visible = TRUE
Excel.Workbooks.Add()
DIM Range = Excel.Application.ActiveCell
SLEEP(1.000)
Range.Value = "abc"
SLEEP(3.000)
Excel.Application.DisplayAlerts = FALSE
Excel.Quit
ファイルを開いているプロセスを調べる
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
電卓で計算をする
DIM WshShell = CREATEOLEOBJ("Wscript.Shell")
WITH WshShell
.Run("calc.exe")
GETID("電卓", , -1)
SLEEP(3.000)
.AppActivate("電卓")
.SendKeys("123")
.SendKeys("{+}")
.SendKeys("456")
.SendKeys("{=}")
ENDWITH
音声認識でアプリを操作
DIM cmd[] = "電卓", "メモ帳", "ペイント", "最大化", "最小化", "終了"
RECOSTATE(TRUE, cmd)
WHILE TRUE
FUKIDASI("音声を取得します")
SELECT DICTATE(TRUE)
CASE "電卓"
FUKIDASI("電卓を起動します")
EXEC("calc.exe")
CASE "メモ帳"
FUKIDASI("メモ帳を起動します")
EXEC("notepad.exe")
CASE "ペイント"
FUKIDASI("ペイントを起動します")
EXEC("mspaint.exe")
CASE "最大化"
FUKIDASI("アクティブウィンドウを最大化します")
CTRLWIN(GETID(GET_ACTIVE_WIN), MAX)
CASE "最小化"
FUKIDASI("アクティブウィンドウを最小化します")
CTRLWIN(GETID(GET_ACTIVE_WIN), MIN)
CASE "終了"
BREAK
SELEND
SLEEP(0.500)
FUKIDASI()
WEND
RECOSTATE(FALSE)
キーボードからの入力を1文字ずつずらす
キーからのA→B、B→C、…、Z→Aのように1文字後ろにずらします。
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
PUBLIC array[-1]
FOR key = VK_A TO VK_Z
arrayPush(array, key)
NEXT
PUBLIC rotate
rotate = arrayRotate(array, 1)
PUBLIC key
FOR key = VK_A TO VK_Z
SETHOTKEY(key,, "keyChange")
SETHOTKEY(key, MOD_SHIFT, "keyChange")
NEXT
WHILE TRUE
FUKIDASI("キー割り当て変更中。ESCで終了")
SLEEP(0.001)
WEND
PROCEDURE keyChange()
DIM vk = rotate[arraySearch(HOTKEY_VK, array)]
IFB HOTKEY_MOD = 4 THEN
vk = STRCONV(vk, SC_UPPERCASE)
ENDIF
KBD(vk)
FEND
今年何%経過したか
WHILE TRUE
DIM date = text(now(), "yyyy/mm/dd hh:nn:ss")
DIM thisYear = VAL(getYear(date))
DIM nextYear = thisYear + 1
DIM total = dateDiff("s", thisYear + "/01/01", nextYear + "/01/01")
DIM pass = dateDiff("s", thisYear + "/01/01", date)
FUKIDASI(date + "<#TAB>" + pass/total * 100 + "%")
SLEEP(0.001)
WEND
マウス位置の色を取得
マウス位置の色情報を取得します。
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
WHILE TRUE
DIM c = PEEKCOLOR(G_MOUSE_X, G_MOUSE_Y)
DIM r = c AND $FF
DIM g = (c AND $FF00) / $100
DIM b = (c AND $FF0000) / $10000
FUKIDASI("赤<#TAB>" + r + "<#CR>緑<#TAB>" + g + "<#CR>青<#TAB>" + b)
SLEEP(0.001)
WEND
Google Chromeで検索(WebDriver)
Google Chromeでhttps://google.comを開き、検索ボックスにUWSCと入力し、検索ボタンをクリックします。
DIM WebDriver = CREATEOLEOBJ("Selenium.WebDriver")
WebDriver.Start("chrome")
WebDriver.Get("https://google.com")
WebElement = WebDriver.FindElementByXPath("//textarea[@name='q']")
WebElement.SendKeys("UWSC")
WebElement = WebDriver.FindElementByXPath("//input[@value='Google 検索']")
WebElement.Submit()
SLEEP(3.000)
WebDriver.Quit
キャレット(カーソル)位置を取得
DEF_DLL GetCaretPos({long, long}): bool: user32
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
DIM x, y
WHILE TRUE
GetCaretPos(x, y)
FUKIDASI(x + ", " + y)
SLEEP(0.010)
WEND
最前面にあるウィンドウのタイトルを吹き出しに表示
DEF_DLL GetForegroundWindow(): long: user32.dll
WHILE TRUE
FUKIDASI(STATUS(HNDTOID(GetForegroundWindow()), ST_TITLE))
SLEEP(0.001)
WEND
ウィンドウのタイトルバーを点滅させる
DEF_DLL FlashWindow(hwnd, long): long: user32.dll
DIM hwnd = IDTOHND(EXEC("notepad"))
FOR i = 1 TO 3
PRINT FlashWindow(hwnd , TRUE)
SLEEP(3.000)
NEXT
CLKITEMで操作できる項目を取得
PUBLIC flg = FALSE
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
SETHOTKEY(VK_X, MOD_ALT, "flag")
DIM array[] = "BTN", "LIST", "TAB", "MENU", "TREEVIEW", + _
"LISTVIEW", "EDIT", "STATIC", "STATUSBAR", "TOOLBAR", + _
"LINK", "ACCCLK", "ACCCLK2", "ACCTXT", "ACCEDIT", + _
"FROMLAST", "BACK"
REPEAT
FUKIDASI("Alt + Xでカーソル下の情報を取得")
SLEEP(0.001)
UNTIL flg
FUKIDASI("取得中")
DIM ID = GETID(GET_FROMPOINT_WIN)
PRINT "DIM ID = GETID(<#DBL>" + STATUS(ID, ST_TITLE) + "<#DBL>, <#DBL>" + STATUS(ID, ST_CLASS) + "<#DBL>)"
PRINT
FOR item IN array
PRINT "// [" + item + "]"
FOR class IN GETITEM(ID, EVAL("ITM_" + item), -1)
PRINT "CLKITEM(ID, <#DBL>" + class + "<#DBL>, CLK_" + item + ")"
NEXT
PRINT
NEXT
PROCEDURE forceQuit()
EXITEXIT
FEND
PROCEDURE flag()
flg = TRUE
FEND