Contents
- 1 特別なウィンドウ
- 2 同じタイトル・クラス名のウィンドウを区別する
- 3 MDI
- 4 多重起動防止
- 5 プログラム干渉防止
- 6 引数にIDを使う関数
- 7 よく使うプログラムのクラス名一覧
- 8 使い方
- 9 プログラム実行例
- 9.1 ファイル名を指定して実行で「ごみ箱」を開く
- 9.2 タスクバーの位置を取得する
- 9.3 画像をクリップボードにコピーする
- 9.4 コントロールパネルを起動する
- 9.5 電卓(ストアアプリ)を起動
- 9.6 PowerPointを起動する(Excel)
- 9.7 Outlookを起動する(Excel)
- 9.8 マウスカーソル下のウィンドウの情報を吹き出しに表示
- 9.9 メモ帳に本文を入力し[名前を付けて保存]ダイアログボックスを開いて保存する
- 9.10 マウスカーソル下の文字情報を取得
- 9.11 Outlookが起動していなかったら起動する
- 9.12 フラッシュ暗算
- 9.13 マウスカーソル下のスクロールバー情報を取得
- 9.14 Wordを起動する(Excel)
- 9.15 ファイルを開いているプロセスを調べる
- 9.16 電卓で計算をする
- 9.17 アクティブウィンドウの左上にカーソルを移動
- 9.18 ExcelファイルとCSVファイルをExcelにドロップして開く
- 9.19 Internet ExplorerのタイトルとURLを取得
- 9.20 マウスカーソル下のウィンドウの左上の座標に移動する
- 9.21 CLKITEMで操作できる項目を取得
- 10 参考文献
指定したウィンドウのIDを取得します。第一引数に取得したいウィンドウのタイトル(一部でも可)を指定します。UWSCでウィンドウを操作するのによく使う関数です。
引数に指定するタイトル・クラス名は、STATUS関数関数の第二引数にST_TITLE・ST_CLASSを指定することで取得することもできます。
指定したウィンドウを取得できない場合は-1を返すので、ウィンドウの存在有無を確かめることもできます。
- 構文
- Integer = GETID( タイトル, クラス名, 待ち時間秒, MDI子タイトル )
- 引数
- タイトル (String,#getid)必須
- 識別したいウィンドウのタイトル (タイトルの一部分だけでもOK)
- クラス名 (String = Empty)省略可
- 区別に必要でなければ省略して構いません (前方一致でのみ部分指定可)
- 待ち時間秒 (Single = 0)省略可
- 確認できるまで指定された秒数待ちます(0.01~)
- 0
- 0.1~10秒まで状況や負荷により自動判断 (デフォルト)
- -1
- 無期限待ち
- MDI子タイトル (String = Empty)省略可
- MDIウィンドウ中の子ウィンドウタイトル
- 戻り値
そのウィンドウを識別するID (NGの時は -1)
GETID は始めに完全一致のウィンドウを探します。見つからなければ次に部分一致のウィンドウを探します。
特別なウィンドウの指定
- GET_ACTIVE_WIN
- アクティブウィンドウを返します
- GET_FROMPOINT_WIN
- マウスカーソル下のウィンドウ
- GET_FROMPOINT_OBJ
- マウスカーソル下のオブジェクト
- GET_THISUWSC_WIN
- UWSC自身
- GET_LOGPRINT_WIN
- ログ表示用ウィンドウ
- GET_BALLOON_WIN
- ふきだし用ウィンドウ(GET_FUKIDASI_WINでも可)
- GET_FORM_WIN
- フォーム画面ウィンドウ
- GET_FORM_WIN2
- フォーム画面ウィンドウ2
- GET_SCHEDULE_WIN
- スケジュール"指定Windowが現れた時"でキャッチしたウィンドウ('別プロセス実行'時はNG)
特別なウィンドウ
GET_ACTIVE_WIN
アクティブウィンドウ(現在入力操作を行える状態のウィンドウ)を取得します。
DIM ID = GETID(GET_ACTIVE_WIN)
PRINT STATUS(ID, ST_TITLE)
PRINT STATUS(ID, ST_CLASS)
- 結果
UWSC Debugger (実行中) TFOya
GET_FROMPOINT_WIN
マウスカーソル下にあるウィンドウを取得します。
DIM ID = GETID(GET_FROMPOINT_WIN)
PRINT STATUS(ID, ST_TITLE)
PRINT STATUS(ID, ST_CLASS)
- 結果
UWSC Debugger (実行中) TFOya
GET_FROMPOINT_OBJ
マウスカーソル下のオブジェクトを取得します。
GET_THISUWSC_WIN
現在実行しているUWSCのウィンドウIDを取得します。
GETID(GET_THISUWSC_WIN)
GET_LOGPRINT_WIN
PRINT時に表示されるログ表示用ウィンドウのIDを取得します。UWSC Debuggerで実行している場合はデバッガーのログが表示される枠を操作することができます。
GETID(GET_LOGPRINT_WIN)
GET_BALLOON_WIN
FUKIDASI関数またはBALLOON関数で表示される吹き出しのIDを取得します。
以下はBALLOON関数で表示させた吹き出しの位置を(x, y) = (10, 10)、サイズを(幅, 高さ) = (120, 60)に変更します。
BALLOON("吹き出し")
ACW(GETID(GET_BALLOON_WIN), 10, 10, 120, 60)
SLEEP(3.000)
GET_FUKIDASI_WIN
FUKIDASI関数またはBALLOON関数で表示される吹き出しのIDを取得します。
以下は吹き出しを最小化にします。
FUKIDASI("吹き出し")
CTRLWIN(GETID(GET_BALLOON_WIN), MIN)
SLEEP(3.000)
GET_FORM_WIN
CREATEFORM関数で作成したフォームのIDを取得します。
以下はフォームを座標(x, y) = (0, 0)の位置に移動させるプログラムです。カレントディレクトリに空でも良いのでindex.htmlを用意してから実行してください。
CREATEFORM("index.html", "フォーム", TRUE)
ACW(GETID(GET_FORM_WIN), 0, 0)
SLEEP(3.000)
以下はフォームを画面中央に移動するプログラムです。
CREATEFORM("index.html", "フォーム", TRUE)
DIM ID = GETID(GET_FORM_WIN)
ACW(ID, (G_SCREEN_W-STATUS(ID, ST_WIDTH))/2, (G_SCREEN_H-STATUS(ID, ST_HEIGHT))/2)
SLEEP(3.000)
GET_FORM_WIN2
CREATEFORM関数のオプション指定の引数にFOM_FORM2を指定して作成したフォームのIDを取得します。
以下はフォームを座標(x, y) = (0, 0)の位置に移動させるプログラムです。
CREATEFORM("index.html", "フォーム", TRUE, FOM_FORM2)
ACW(GETID(GET_FORM_WIN2), 0, 0)
SLEEP(3.000)
GET_SCHEDULE_WIN
GETID(GET_SCHEDULE_WIN)
UWSCの[設定]-[設定]-[スケジュール設定をする]-[タイマー]-[指定ウィンドウが現れた時]のTitle・Classを指定して起動したウィンドウのIDを取得します。別プロセスで実行にチェックが入っているときは取得できません。スケジュール設定の操作方法は使い方を参照。
[指定ウィンドウが現れた時]のClassにNOTEPADを指定。
DIM ID = GETID(GET_SCHEDULE_WIN)
SENDSTR(ID, "メモ帳を起動しました")
同じタイトル・クラス名のウィンドウを区別する
GETIDで取得できるのは1つだけです。同じタイトル・クラス名で複数のウィンドウを区別するにはGETALLWINですべてのウィンドウのIDをループし目的のIDを取得する必要があります。
以下のGETID2関数は第三引数に番号を指定することで、同じタイトル・クラス名のn番目のIDを取得することができます。
第三引数に0を指定すると、指定したタイトル・クラス名のウィンドウが何個あるかカウントすることもできます。
FUNCTION GETID2(title, class, n)
DIM cnt = 0
FOR i = 0 TO GETALLWIN() - 1
DIM ID = ALL_WIN_ID[i]
DIM targetTitle = STATUS(ID, ST_TITLE)
DIM targetClass = STATUS(ID, ST_CLASS)
IFB POS(title, targetTitle) <> 0 AND POS(class, targetClass) <> 0 THEN
cnt = cnt + 1
IFB cnt = n THEN
RESULT = ID
EXIT
ENDIF
ENDIF
NEXT
IF n = 0 THEN RESULT = cnt
FEND
GETID2の使い方
タイトルがメモ帳、クラス名がnotepadの2番目のウィンドウのIDを取得。
DIM ID = GETID2("メモ帳", "notepad", 2)
タイトルがメモ帳、クラス名がnotepadのウィンドウの数を取得。
DIM n = GETID2("メモ帳", "notepad", 0)
開いてるすべてのメモ帳に対して操作を行う。
FOR i = 1 TO ("メモ帳", "notepad", 0)
SENDSTR(ID, i)
NEXT
MDI
MDIとはMultiple Document Interface (マルチ・ドキュメント・インタフェース)の略で、親ウィンドウ内に複数の子ウィンドウを持つアプリケーションのことです。
わかりやすいものとしては2010以前Offieが子ウィンドウを持つアプリケーションで、Excelを例にするとMicrosoft Excelが親ウィンドウ(GETIDのタイトル)、ブック名(Book1, Book2など)が子ウィンドウ(GETIDのMDI子タイトル)となります。
以下はExcelで新しいブックを開き、開いたブックを閉じてからExcelウィンドウを閉じるプログラムです。
DIM Excel = CREATEOLEOBJ("Excel.Application")
Excel.Visible = TRUE
Excel.Workbooks.Add
SLEEP(3.00)
DIM ID = GETID("Microsoft Excel", , , Excel.ActiveWorkbook.Name) // アクティブウィンドウ(Book1)のIDを取得
CTRLWIN(ID, CLOSE) // Book1を閉じる
Excel.Quit // Excelを閉じる
以下はMDIを使用したアプリケーションの例です。
- Adobe Photoshop (CS4以降はMDIではなくTDIが標準となった)
- Eudora
- Microsoft Word
- Microsoft Excel(Excel 2010まで)
- 一太郎
- Opera
- Sleipnir
- PSPad
多重起動防止
プログラムの先頭に以下のプログラムを書くと多重起動を防止できます。最初に起動したプログラムはそのまま処理を続行し、後から起動したプログラムは終了します。
IF GETID(GET_UWSC_NAME, "クラス名") <> -1 THEN EXIT
プログラム干渉防止
他のUWSCプログラムが起動・動作しているとき、そのプログラムが終了するまで待機する。3つ以上起動している時の挙動は未確認。
REPEAT
SLEEP(0.001)
UNTIL GETID("UWSC", "TUScript") = -1
引数にIDを使う関数
- CHKBTN関数
- CLKITEM関数
- CTRLWIN関数
- DROPFILE関数
- GETALLWIN関数
- GETCTLHND関数
- GETITEM関数
- GETSLCTLST関数
- GETSLIDER関数
- GETSTR関数
- IDTOHND関数
- LOCKHARDEX関数
- MOUSEORG関数
- POSACC関数
- SAVEIMG関数
- SCKEY関数
- SENDSTR関数
- SETSLIDER関数
- STATUS関数
よく使うプログラムのクラス名一覧
-
- タイトル
- Internet Explorer
- クラス名
- IEFrame
DIM ID = GETID("Internet Explorer", "IEFrame")
-
- タイトル
- Google Chrome
- クラス名
- Chrome_WidgetWin_1
DIM ID = GETID("Google Chrome", "Chrome_WidgetWin_1")
-
- タイトル
- Mozilla Firefox
- クラス名
- MozillaWindowClass
DIM ID = GETID("Mozilla Firefox", "MozillaWindowClass")
-
- タイトル
- Microsoft Edge
- クラス名
- ApplicationFrameWindow
DIM ID = GETID("Microsoft Edge ", "ApplicationFrameWindow")
-
- タイトル
- ユーザー アカウント制御
- クラス名
- Credential Dialog Xaml Host
DIM ID = GETID("ユーザー アカウント制御", "Credential Dialog Xaml Host")
-
- タイトル
- タスク マネージャー
- クラス名
- TaskManagerWindow
DIM ID = GETID("タスク マネージャー", "TaskManagerWindow")
-
- タイトル
- メモ帳
- クラス名
- Notepad
DIM ID = GETID("メモ帳", "Notepad")
-
- タイトル
- ペイント
- クラス名
- MSPaintApp
DIM ID = GETID("ペイント, "MSPaintApp")
-
- タイトル
- Microsoft Excel
- クラス名
- XLMAIN
DIM ID = GETID("Microsoft Excel", "XLMAIN")
-
- タイトル
- Microsoft Word
- クラス名
- OpusApp
DIM ID = GETID("Microsoft Word", "OpusApp")
-
- タイトル
- Microsoft Outlook
- クラス名
- rctrl_renwnd32
DIM ID = GETID("Microsoft Outlook", "rctrl_renwnd32")
-
- タイトル
- UWSC Debugger
- クラス名
- TFOya
DIM ID = GETID("UWSC Debugger", "TFOya")
-
- タイトル
- UWSC Pro
- クラス名
- TUMain_uwsc
DIM ID = GETID("UWSC Pro", "TUMain_uwsc")
-
- タイトル
- ダイアログ
- クラス名
- #32770
DIM ID = GETID("名前を付けて保存", "#32770")
-
- タイトル
- UWSCのFUKIDASI関数で表示される吹き出し
- クラス名
- TFfukidsi
-
- タイトル
- NoxPlayer
- クラス名
- Qt5QWindowIcon
DIM ID = GETID("NoxPlayer", "Qt5QWindowIcon")
使い方
開かれているすべてのウィンドウのIDとクラス名を取得。
DIM str = ""
FOR i = 0 TO GETALLWIN() - 1
ID = ALL_WIN_ID[i]
PRINT "ID = GETID(<#DBL>" + STATUS(ID, ST_TITLE) + "<#DBL>, <#DBL>" + STATUS(ID, ST_CLASS) + "<#DBL>)"
NEXT
プログラム実行例
ファイル名を指定して実行で「ごみ箱」を開く
DIM Shell = CREATEOLEOBJ("Shell.Application")
Shell.FileRun
DIM ID = GETID("ファイル名を指定して実行", "#32770")
SENDSTR(ID, "shell:RecycleBinFolder")
CLKITEM(ID, "OK", ITM_BTN)
タスクバーの位置を取得する
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
画像をクリップボードにコピーする
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
//////////////////////////////////////////////////
// 【引数】
//
// 【戻り値】
//
//////////////////////////////////////////////////
PROCEDURE forceQuit()
EXITEXIT
FEND
コントロールパネルを起動する
DIM Shell = CREATEOLEOBJ("Shell.Application")
Shell.ControlPanelItem("control")
SLEEP(3.000)
DIM ID = GETID("コントロール パネル")
//CTRLWIN(ID, CLOSE)
電卓(ストアアプリ)を起動
EXEC("calc")
DIM ID = GETID("電卓")
// CTRLWIN(ID, CLOSE)
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
メモ帳に本文を入力し[名前を付けて保存]ダイアログボックスを開いて保存する
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")
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
Outlookが起動していなかったら起動する
IF GETID(, "rctrl_renwnd32") = -1 THEN DOSCMD("start outlook")
フラッシュ暗算
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
DIM grades[] = "20級(初級)", "19級(初級)", "18級(初級)", "17級(初級)", "16級(初級)", "15級(初級)", "14級(初級)", "13級(初級)", "12級(初級)", "11級(初級)", _
"10級(中級)", "9級(中級)", "8級(中級)", "7級(中級)", "6級(中級)", "5級(中級)", "4級(中級)", "3級(中級)", "2級(中級)", "1級(中級)", _
"初段(上級)", "2段(上級)", "3段(上級)", "4段(上級)", "5段(上級)", "6段(上級)", "7段(上級)", "8段(上級)", "9段(上級)", "10段(上級)", _
"11段(超上級)", "12段(超上級)", "13段(超上級)", "14段(超上級)", "15段(超上級)", "16段(超上級)", "17段(超上級)", "18段(超上級)", "19段(超上級)", "20段(超上級)"
DIM keta[] = 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, _
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
2, 3, 3, 3, 3, 3, 3, 3, 3, 3, _
3, 3, 3, 3, 3, 3, 3, 3, 3, 3
DIM num[] = 3, 3, 5, 8, 10, 12, 15, 20, 10, 15, _
2, 3, 4, 5, 6, 7, 8, 10, 12, 15, _
15, 4, 6, 8, 10, 12, 15, 15, 15, 15, _
15, 15, 15, 15, 15, 15, 15, 15, 15, 15
DIM time[] = 5, 5, 7, 10, 12, 15, 15, 15, 10, 15, _
4, 6, 7, 8, 9, 10, 11, 12, 12, 13, _
10, 4, 5, 6, 7, 8, 8, 6, 4.5, 3, _
2.8, 2.6, 2.4, 2.2, 2.0, 1.9, 1.8, 1.7, 1.6, 1.5
DIM grade = SLCTBOX(SLCT_CMB OR SLCT_NUM, 60, "レベルを選択", grades)
DIM sum = 0
DIM fontsize = 80
DIM fontname = "abacus2"
DIM fontcolor = $00aa00
DIM bgcolor = 1
FOR i = 1 TO num[grade]
DIM n = POWER(10, keta[grade] - 1) + RANDOM(POWER(10, keta[grade]) - POWER(10, keta[grade] - 1))
sum = sum + n
DIM msg = " " + n + " "
FUKIDASI(msg, G_SCREEN_W, G_SCREEN_H,, fontsize, fontname, fontcolor, bgcolor)
DIM ID = GETID(GET_FUKIDASI_WIN)
FUKIDASI(msg, (STATUS(ID, ST_X) - STATUS(ID, ST_WIDTH))/2, (STATUS(ID, ST_Y) - STATUS(ID, ST_HEIGHT))/2,, fontsize, fontname, fontcolor, bgcolor)
SOUND("BEEP")
SLEEP(time[grade])
FUKIDASI()
NEXT
DIM ans = INPUT("答えは?")
IFB ans = sum THEN
MSGBOX("正解です!(ans." + sum + ")")
ELSE
MSGBOX("残念でした、正解は " + sum + " です。")
ENDIF
PROCEDURE forceQuit()
EXITEXIT
FEND
マウスカーソル下のスクロールバー情報を取得
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
WHILE TRUE
DIM ID = GETID(GET_FROMPOINT_WIN)
DIM str = ""
DIM i = 1
WHILE GETSLIDER(ID, i, SLD_POS) <> ERR_VALUE
str = str + "[" + i + "]<#CR>"
str = str + "値:" + GETSLIDER(ID, i, SLD_POS) + "<#CR>"
str = str + "最小値:" + GETSLIDER(ID, i, SLD_MIN) + "<#TAB>"
str = str + "最大値:" + GETSLIDER(ID, i, SLD_MAX) + "<#CR>"
str = str + "移動量:" + GETSLIDER(ID, i, SLD_PAGE) + "<#TAB>"
str = str + "表示方向:" + GETSLIDER(ID, i, SLD_BAR) + "<#CR>"
str = str + "X座標:" + GETSLIDER(ID, i, SLD_X) + "<#TAB>"
str = str + "Y座標:" + GETSLIDER(ID, i, SLD_Y) + "<#CR>"
str = str + "----------<#CR>"
i = i + 1
WEND
FUKIDASI(TRIM(str))
WEND
//////////////////////////////////////////////////
// 【引数】
//
// 【戻り値】
//
//////////////////////////////////////////////////
PROCEDURE forceQuit()
EXITEXIT
FEND

[1]
値: 28
最小値: 0 最大値: 65
移動量: 12 表示方向: 1
X座標: 0 Y座標: 56
----------
[2]
値: 0
最小値: 0 最大値: 15
移動量: 11 表示方向: 1
X座標: 393 Y座標: 56
----------
[3]
値: 17
最小値: 0 最大値: 486
移動量: 450 表示方向: 0
X座標: 393 Y座標: 56
----------
[4]
値: 59
最小値: 0 最大値: 63
移動量: 5 表示方向: 1
X座標: 0 Y座標: 330
----------
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
ファイルを開いているプロセスを調べる
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
//////////////////////////////////////////////////
// 【引数】
//
// 【戻り値】
//
//////////////////////////////////////////////////
PROCEDURE forceQuit()
EXITEXIT
FEND
//////////////////////////////////////////////////
// 【引数】
// expr : 評価する式
// truepart : 評価した式がTrueのときに返す値
// falsepart : 評価した式がFalseのときに返す値
// 【戻り値】
// truepart : 評価した式がTrueのとき、falsepart : 評価した式がFalseのとき
//////////////////////////////////////////////////
FUNCTION IIF(expr, truepart, falsepart)
IFB EVAL(expr) THEN
RESULT = truepart
ELSE
RESULT = falsepart
ENDIF
FEND
電卓で計算をする
DIM WshShell = CREATEOLEOBJ("Wscript.Shell")
WITH WshShell
.Run("calc.exe")
GETID("電卓", , -1)
SLEEP(3.000)
.AppActivate("電卓")
.SendKeys("123")
.SendKeys("{+}")
.SendKeys("456")
.SendKeys("{=}")
ENDWITH
アクティブウィンドウの左上にカーソルを移動
DIM ID = GETID(GET_ACTIVE_WIN)
DIM x = STATUS(ID, ST_X)
DIM y = STATUS(ID, ST_Y)
MMV(x, y)
ExcelファイルとCSVファイルをExcelにドロップして開く
CREATEOLEOBJで起動したExcelにファイルをドロップするとなぜか落ちるから、EXECで起動。
EXEC("C:\Program Files\Microsoft Office\Office15\EXCEL.EXE")
DIM ID = GETID("Excel", "XLMAIN")
DROPFILE(ID, "D:\Desktop\", "sample.xlsx", "sample.csv")
Internet ExplorerのタイトルとURLを取得
DIM ID = GETID("Internet Explorer")
PRINT GETSTR(ID, 0, STR_STATIC)
PRINT GETSTR(ID, 1, STR_EDIT)
マウスカーソル下のウィンドウの左上の座標に移動する
MOUSEORG(GETID(GET_FROMPOINT_WIN))
MMV(0, 0)
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
参考文献
関連記事
- STATUS関数 (スクリプト関数)
- ウィンドウの各種状態を取得します。タイトル・クラス名・X座標・Y座標・幅・高さなどを取得することができます。
- GETCTLHND関数 (スクリプト関数)
- ボタン等、オブジェクトのハンドルを取得します。
- ACW関数 (スクリプト関数)
- 指定したIDのウィンドウの位置・サイズを変更します。IDのみを指定した場合、そのウィンドウをアクティブにします。
- CHKBTN関数 (スクリプト関数)
- 指定したIDのウィンドウにあるチェックボックス・ラジオボタンがチェックされているかを返します。
- CLKITEM関数 (スクリプト関数)
- アイテムをクリックします。
- GETALLWIN関数 (スクリプト関数)
- 全ウィンドウのIDを取得します。
- GETITEM関数 (スクリプト関数)
- 指定したIDのウィンドウのキャプション文字やリストなどを取得します。取得した情報は配列変数のALL_ITEM_LIST[ ]に格納されます。戻値は取得した数でInteger型です。
- HNDTOID関数 (スクリプト関数)
- 引数に指定したハンドル値をIDに変換して返します。IDをハンドル値に変換するにはIDTOHND関数を使います。
- CTRLWIN関数 (スクリプト関数)
- ウィンドウの状態を操作します。ウィンドウを終了、アクティブ化、表示・非表示、最大化・最小化などができます。
- GETSLIDER関数 (スクリプト関数)
- スライダー(トラックバー、スクロールバー)の値を取得します。