Contents
- 1 特別なウィンドウ
- 2 同じタイトル・クラス名のウィンドウを区別する
- 3 MDI
- 4 多重起動防止
- 5 プログラム干渉防止
- 6 引数にIDを使う関数
- 7 よく使うプログラムのクラス名一覧
- 8 プログラム実行例
- 8.1 CLKITEMで操作できる項目を取得
- 8.2 ファイル名を指定して実行で「ごみ箱」を開く
- 8.3 タスクバーの位置を取得する
- 8.4 画像をクリップボードにコピーする
- 8.5 コントロールパネルを起動する
- 8.6 電卓(ストアアプリ)を起動
- 8.7 PowerPointを起動する(Excel)
- 8.8 Outlookを起動する(Excel)
- 8.9 マウスカーソル下のウィンドウの情報を吹き出しに表示
- 8.10 メモ帳に本文を入力し[名前を付けて保存]ダイアログボックスを開いて保存する
- 8.11 マウスカーソル下の文字情報を取得
- 8.12 Outlookが起動していなかったら起動する
- 8.13 マウスカーソル下のスクロールバー情報を取得
- 8.14 Wordを起動する(Excel)
- 8.15 電卓で計算をする
- 8.16 アクティブウィンドウの左上にカーソルを移動
- 8.17 ExcelファイルとCSVファイルをExcelにドロップして開く
- 8.18 Yahoo!天気・災害情報より直近に発生した地震情報を取得しその場所をGoogleマップで表示
- 8.19 Internet ExplorerのタイトルとURLを取得
- 8.20 マウスカーソル下のウィンドウの左上の座標に移動する
指定したウィンドウのIDを取得します。第一引数に取得したいウィンドウのタイトル(一部でも可)を指定します。UWSCでウィンドウを操作するのによく使う関数です。
引数に指定するタイトル・クラス名は、STATUS関数の第二引数にST_TITLE・ST_CLASSを指定することで取得することもできます。
指定したウィンドウを取得できない場合は-1を返すので、ウィンドウの存在有無を確かめることもできます。
- 構文
- Integer = GETID( タイトル, [クラス名, 待ち時間秒, MDI子タイトル] )
- 引数
- タイトル
- 識別したいウィンドウのタイトル (タイトルの一部分だけでもOK)
- クラス名
- 区別に必要でなければ省略して構いません (前方一致でのみ部分指定可)
- 待ち時間秒
- 確認できるまで指定された秒数待ちます(0.01~)
- 0
- 0.1~10秒まで状況や負荷により自動判断 (デフォルト)
- -1
- 無期限待ち
- MDI子タイトル
- 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
GETID(GET_ACTIVE_WIN)
アクティブウィンドウ(現在入力操作を行える状態のウィンドウ)を取得します。
GET_FROMPOINT_WIN
GETID(GET_FROMPOINT_WIN)
マウスカーソル下にあるウィンドウを取得します。
GET_THISUWSC_WIN
GETID(GET_THISUWSC_WIN)
現在実行しているUWSCのウィンドウIDを取得します。
GET_LOGPRINT_WIN
GETID(GET_LOGPRINT_WIN)
PRINT時に表示されるログ表示用ウィンドウのIDを取得します。
GET_BALLOON_WIN
GETID(GET_BALLOON_WIN)
FUKIDASI関数で表示される吹き出しのIDを取得します。
吹き出しのタイトルは「Ffukidasi」、クラス名は「TFfukidasi」です。
GET_FUKIDASI_WIN
GETID(GET_FUKIDASI_WIN)
GET_BALLOON_WINと同じく吹き出しの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
プログラム実行例
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
解説
- 1行目
- Alt+Xの入力を検知するための変数。
PUBLIC flg = FALSE
- 3行目
- ESCキーが入力されたらforceQuit関数を呼び出す。
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
- 4行目
- Alt+Xが入力されたらflag関数を呼び出し、変数flgにTrueを代入。
SETHOTKEY(VK_X, MOD_ALT, "flag")
- 11-14行目
- 変数flgにTrueが代入されるまで待機する。
REPEAT FUKIDASI("Alt + Xでカーソル下の情報を取得") SLEEP(0.001) UNTIL flg
- 18行目
- マウスカーソル下のウィンドウのIDを取得する。
DIM ID = GETID(GET_FROMPOINT_WIN)
- 20行目
- マウスカーソル下のウィンドウのタイトルとクラス名を出力。
PRINT "DIM ID = GETID(" + STATUS(ID, ST_TITLE) + ", " + STATUS(ID, ST_CLASS) + ")"
- 23,29行目
- 配列arrayの要素数だけループ。
FOR item IN array … NEXT
- 25-27行目
- 第二引数に指定した項目のキャプションやリスト等を取得する。For In構文に指定した場合は各要素が返されます。
FOR class IN GETITEM(ID, EVAL("ITM_" + item), -1) PRINT "CLKITEM(ID, " + class + ", CLK_" + item + ")" NEXT
ファイル名を指定して実行で「ごみ箱」を開く
DIM Shell = CREATEOLEOBJ("Shell.Application")
Shell.FileRun
DIM ID = GETID("ファイル名を指定して実行", "#32770")
SENDSTR(ID, "shell:RecycleBinFolder")
CLKITEM(ID, "OK", ITM_BTN)
解説
- 1行目
- Shellオブジェクトを生成する。
DIM Shell = CREATEOLEOBJ("Shell.Application")
- 2行目
- 「ファイル名を指定して実行」ウィンドウを開く。
Shell.FileRun
- 4行目
- 「ファイル名を指定して実行」のIDを取得。「#32770」はダイアログのクラス名を示しています。
DIM ID = GETID("ファイル名を指定して実行", "#32770")
- 5行目
- 「shell:RecycleBinFolder」と入力する。
SENDSTR(ID, "shell:RecycleBinFolder")
- 6行目
- 「OK」ボタンをクリックする。
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
解説
- 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 "右"
画像をクリップボードにコピーする
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
解説
- 1行目
- Alt+SでimageToClipboard関数を実行します。
SETHOTKEY(VK_S, MOD_ALT, "imageToClipboard")
- 2行目
- EscでforceQuit関数を実行します。
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
- 4-6行目
- 無限ループ。Alt+SもしくはEscが入力されるのを待機します。
WHILE TRUE SLEEP(0.01) WEND
コントロールパネルを起動する
DIM Shell = CREATEOLEOBJ("Shell.Application")
Shell.ControlPanelItem("control")
SLEEP(3.000)
DIM ID = GETID("コントロール パネル")
//CTRLWIN(ID, CLOSE)
解説
- 1行目
- Shellオブジェクトを生成。
DIM Shell = CREATEOLEOBJ("Shell.Application")
- 2行目
- コントロールパネルを起動。
Shell.ControlPanelItem("control")
- 3行目
- 3.000秒待機する。
SLEEP(3.000)
- 5行目
- コントロールパネルのIDを取得する。
DIM ID = GETID("コントロール パネル")
- 6行目
- コントロールパネルを閉じる。
//CTRLWIN(ID, CLOSE)
電卓(ストアアプリ)を起動
EXEC("calc")
DIM ID = GETID("電卓")
// CTRLWIN(ID, CLOSE)
解説
- 1行目
- 電卓を起動。
EXEC("calc")
- 2行目
- 電卓のIDを取得。EXEC関数は起動したときに戻値としてIDを返すが、ストアアプリなど一部のアプリはIDを返してくれないので起動後にGETID関数で取得します。
DIM ID = GETID("電卓")
- 4行目
- 電卓を閉じる。
// 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
- CREATEOLEOBJ
- Excel.Application.Visible
- Excel.Application.ActivateMicrosoftApp
- GETID
- SLEEP
- CTRLWIN
- Excel.Application.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
- CREATEOLEOBJ
- Excel.Application.Visible
- Excel.Application.ActivateMicrosoftApp
- GETID
- SLEEP
- CTRLWIN
- Excel.Application.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
- CREATEOLEOBJ
- FSO.GetParentFolderName
- FSO.GetFileName
- EXEC
- GETID
- SENDSTR
- CLKITEM
- FSO.FolderExists
- CTRLWIN
- SLEEP
- SCKEY
解説
- 1行目
- FileSystemObjectオブジェクトを生成。
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
- 2行目
- 保存先のパスを指定。
DIM path = "D:\Desktop\sample.txt"
- 3行目
- パスからフォルダ部分を取得。
DIM folderspec = FSO.GetParentFolderName(path)
- 4行目
- パスからファイル名を取得。
DIM filename = FSO.GetFileName(path)
- 6行目
- メモ帳を起動。
EXEC("notepad")
- 7行目
- メモ帳のIDを取得。
DIM ID = GETID("メモ帳", "Notepad")
- 8行目
- メモ帳に文章を入力。
SENDSTR(ID, "内容", 0)
- 9行目
- [名前を付けて保存]を実行。
CLKITEM(ID, "ファイル\名前を付けて保存", CLK_MENU)
- 12行目
- [名前を付けて保存]ダイアログボックスのIDを取得。
DIM ID2 = GETID("名前を付けて保存", "#32770")
- 14行目
- [名前を付けて保存]ウインドウをアクティブ化する。
CTRLWIN(ID2, ACTIVATE)
- 15行目
- 0.500秒待機する。
SLEEP(0.500)
- 17行目
- F4キーでアドレスバーを選択。
SCKEY(ID2, VK_F4)
- 18行目
- フォルダ名を入力。
SENDSTR(ID2, folderspec, 1, TRUE)
- 19行目
- Enterキーで確定・移動。
SCKEY(ID2, VK_RETURN)
- 20行目
- 0.500秒待機する。
SLEEP(0.500)
- 22行目
- Alt+Nでファイル名を選択。
SCKEY(ID2, VK_ALT, VK_N)
- 23行目
- ファイル名を入力。
SENDSTR(ID2, filename, 1, TRUE)
- 24行目
- 0.500秒待機する。
SLEEP(0.500)
- 26行目
- [保存]ボタンをクリックする。
CLKITEM(ID, "保存", ITM_BTN)
マウスカーソル下の文字情報を取得
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")
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
// Wordを起動
Excel.Application.ActivateMicrosoftApp(xlMicrosoftWord)
DIM ID = GETID("Microsoft Word", "OpusApp")
SLEEP(5.000)
// Wordを閉じる
CTRLWIN(ID, CLOSE)
Excel.Quit
- CREATEOLEOBJ
- Excel.Application.Visible
- Excel.Application.ActivateMicrosoftApp
- GETID
- SLEEP
- CTRLWIN
- Excel.Application.Quit
電卓で計算をする
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)
解説
- 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)
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")
Yahoo!天気・災害情報より直近に発生した地震情報を取得しその場所をGoogleマップで表示
DIM IE = IEBoot()
IE.Navigate("http://typhoon.yahoo.co.jp/weather/earthquake/")
BusyWait(IE)
DIM ID = GETID("地震情報")
CTRLWIN(ID, MAX)
DIM array[-1][-1]
DIM element = IE.document.getElementById("eqinfdtl")
DIM elements = element.getElementsByTagName("table")
element = elements.Item(0)
getTableData(element, array)
HASHTBL tbl
FOR r = 0 TO UBound(array)
tbl[TRIM(array[r][0])] = array[r][1]
NEXT
DIM way[1]
IF POS("北緯", tbl["緯度/経度"]) THEN way[0] = "N"
IF POS("東経", tbl["緯度/経度"]) THEN way[1] = "E"
IF POS("西経", tbl["緯度/経度"]) THEN way[1] = "W"
IF POS("南緯", tbl["緯度/経度"]) THEN way[0] = "S"
tbl["緯度/経度"] = REPLACE(tbl["緯度/経度"], "度", "")
tbl["緯度/経度"] = REPLACE(tbl["緯度/経度"], "北緯", "")
tbl["緯度/経度"] = REPLACE(tbl["緯度/経度"], "東経", "")
tbl["緯度/経度"] = REPLACE(tbl["緯度/経度"], "西経", "-")
tbl["緯度/経度"] = REPLACE(tbl["緯度/経度"], "南緯", "-")
DIM coordinate = SPLIT(TRIM(tbl["緯度/経度"]), "/")
DIM z = 7
DIM url = "https://www.google.co.jp/maps/place/" + degToDMS(coordinate[0]) + way[0] + "," + degToDMS(coordinate[1]) + way[1] + "/@" + coordinate[0] + "," + coordinate[1] + "," + z + "z/"
url = REPLACE(url, "°", "%C2%B0")
url = REPLACE(url, "<#DBL>", "")
IE.Navigate(url)
BusyWait(IE)
//////////////////////////////////////////////////
// 【引数】
// IE : IEオブジェクト
// 【戻値】
//
//////////////////////////////////////////////////
PROCEDURE BusyWait(Var IE)
SLEEP(0.500)
DIM t = GETTIME()
TRY
REPEAT
DIM tm = GETTIME() - t
FUKIDASI("BusyWait:" + tm)
SLEEP(0.010)
IF tm >= 60 THEN BREAK
UNTIL !IE.Busy AND IE.readyState = 4
EXCEPT
IE = getIEObj(-1)
PRINT IE.document.URL + " のIEオブジェクトを取得しました。"
BusyWait(IE)
ENDTRY
FUKIDASI()
FEND
//////////////////////////////////////////////////
// 【引数】
// deg : 角度(°)
// 【戻値】
// 角度(deg°分'秒")
//////////////////////////////////////////////////
FUNCTION degToDMS(deg)
DIM degree = INT(deg)
DIM minute = (deg - INT(deg)) * 60
DIM second = ROUND(minute - INT(minute), -10) * 60
RESULT = degree + "°" + INT(minute) + "'" + ROUND(second, -5) + ""
FEND
//////////////////////////////////////////////////
// 【引数】
// 文字列 or 数値 : 取得したいIEオブジェクトのタイトル・URLもしくは数値を指定
// 完全一致フラグ : (TRUE : 文字列が完全一致したものを取得、FALSE : 文字列の一部を含むものを取得)
// 【戻値】
// Internet Explorerオブジェクト
//////////////////////////////////////////////////
FUNCTION getIEObj(str, flg = FALSE)
DIM Shell = CREATEOLEOBJ("Shell.Application")
SELECT CHKNUM(str)
CASE TRUE
DIM cnt = 0
SELECT TRUE
CASE str > 0
FOR n = 0 TO Shell.Windows.Count - 1
TRY
IFB Shell.Windows.Item(n).Name = "Internet Explorer" THEN
cnt = cnt + 1
IFB str = cnt THEN
RESULT = Shell.Windows.Item(n)
EXIT
ENDIF
ENDIF
EXCEPT
ENDTRY
NEXT
CASE str = 5
SELEND
RESULT = ERR_VALUE
FEND
//////////////////////////////////////////////////
// 【引数】
// table : tableエレメント
// arr : 取得したデータを格納する配列(参照引数)
// 【戻値】
//
//////////////////////////////////////////////////
PROCEDURE getTableData(table, Var arr[][])
rowMax = table.rows.length - 1
colMax = 0
FOR row = 0 TO table.rows.length - 1
IFB table.rows(row).cells.length - 1 > colMax THEN
colMax = table.rows(row).cells.length - 1
ENDIF
NEXT
DIM arr[rowMax][colMax]
FOR row = 0 TO table.rows.length - 1
FOR col = 0 TO table.rows(row).cells.length - 1
n = 0
WHILE arr[row][col + n] ""
n = n + 1
WEND
arr[row][col + n] = table.rows(row).cells(col).innerText
IFB table.rows(row).cells(col).rowSpan > 1 AND table.rows(row).cells(col).colSpan > 1 THEN
rmax = table.rows(row).cells(col).rowSpan - 1
cmax = table.rows(row).cells(col).colSpan - 1
FOR r = 1 TO rmax
FOR c = 1 TO cmax
arr[row + r][col + c] = "←"
NEXT
NEXT
ENDIF
IFB table.rows(row).cells(col).rowSpan > 1 THEN
n = table.rows(row).cells(col).rowSpan - 1
WHILE n
arr[row + n][col] = "↑"
n = n - 1
WEND
ENDIF
IFB table.rows(row).cells(col).colSpan > 1 THEN
n = table.rows(row).cells(col).colSpan - 1
WHILE n
arr[row][col + n] = "←"
n = n - 1
WEND
ENDIF
NEXT
NEXT
FEND
//////////////////////////////////////////////////
// 【引数】
// InPrivate : InPrivateブラウズ・モードを有効にするときはTRUEを指定(デフォルトはFALSE)
// 【戻値】
// InternetExplorerオブジェクト
//////////////////////////////////////////////////
FUNCTION IEBoot(InPrivate = FALSE)
DIM IE
SELECT InPrivate
CASE TRUE
DOSCMD("start iexplore -private")
GETID("InPrivate - Internet Explorer - [InPrivate]", "IEFrame", -1)
IE = GETACTIVEOLEOBJ("InternetExplorer.Application","InPrivate - Internet Explorer - [InPrivate]")
CASE FALSE
TRY
IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = TRUE
EXCEPT
EXEC("C:\Program Files\Internet Explorer\iexplore.exe")
GETID("Internet Explorer", "IEFrame", -1)
TRY
IE = GETACTIVEOLEOBJ("InternetExplorer.Application")
EXCEPT
IE = getIEObj(-1)
ENDTRY
ENDTRY
SELEND
RESULT = IE
FEND
//////////////////////////////////////////////////
// 【引数】
// 配列 : 上限値を求める配列
// 【戻値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(array[])
RESULT = RESIZE(array)
FEND
- IEBoot
- IE.Navigate
- BusyWait
- GETID
- CTRLWIN
- document.getElementById
- Element.getElementsByTagName
- Elements.Item
- getTableData
- UBound
- TRIM
- POS
- REPLACE
- SPLIT
- degToDMS
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)
関連記事
- STATUS (スクリプト関数)
- ウィンドウの各種状態を取得します。タイトル・クラス名・X座標・Y座標・幅・高さなどを取得することができます。
- GETCTLHND (スクリプト関数)
- ボタン等、オブジェクトのハンドルを取得します。
- ACW (スクリプト関数)
- 指定したIDのウィンドウの位置・サイズを変更します。IDのみを指定した場合、そのウィンドウをアクティブにします。
- CHKBTN (スクリプト関数)
- 指定したIDのウィンドウにあるチェックボックス・ラジオボタンがチェックされているかを返します。
- CLKITEM (スクリプト関数)
- 指定したIDのウィンドウのアイテムをクリックします。アイテムに指定できるものにはボタン・チェックボックス・ラジオボタン・リストボックス・コンボボックス・タブコントロール・メニュー・ツリービュー・リストビュー・ツールバー・リンクがあります。
- CTRLWIN (スクリプト関数)
- ウィンドウの状態を操作します。ウィンドウを終了、アクティブ化、表示・非表示、最大化・最小化などができます。
- GETALLWIN (スクリプト関数)
- 全ウィンドウのIDを取得します。
- GETITEM (スクリプト関数)
- 指定したIDのウィンドウのキャプション文字やリストなどを取得すします。取得した情報は配列変数のALL_ITEM_LIST[ ]に格納されます。戻値は取得した数でInteger型です。
- GETSLIDER (スクリプト関数)
- スライダー(トラックバー、スクロールバー)の値を取得します。
- GETSTR (スクリプト関数)
- 引数に指定したIDのウィンドウの文字列を取得します。取得した文字列を返します。
- HNDTOID (スクリプト関数)
- 引数に指定したハンドル値をIDに変換して返します。IDをハンドル値に変換するにはIDTOHND関数を使います。
- IDTOHND (スクリプト関数)
- 引数に指定したIDをハンドル値に変換して返します。ハンドル値をIDに変換するにはHNDTOID関数を使います。
- MOUSEORG (スクリプト関数)
- マウス座標を相対座標にする、 またはマウスとキー情報を直接ウィンドウへ送ります。
- SCKEY (スクリプト関数)
- ショートカットキーを実行します。
- SENDSTR (スクリプト関数)
- 指定したIDのウィンドウに文字列を送信します。キー入力をする場合はKBD関数を使います。
- SETSLIDER (スクリプト関数)
- スライダー(トラックバー、スクロールバー)の値を設定します。