目次
- 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 Wordを起動する(Excel)
- 9.14 ファイルを開いているプロセスを調べる
- 9.15 電卓で計算をする
- 9.16 アクティブウィンドウの左上にカーソルを移動
- 9.17 アクティブウィンドウが最大化されているかを調べる
- 9.18 音量を取得
- 9.19 ExcelファイルとCSVファイルをExcelにドロップして開く
- 9.20 Internet ExplorerのタイトルとURLを取得
- 9.21 マウスカーソル下のウィンドウの左上の座標に移動する
- 9.22 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
アクティブウィンドウ(現在入力操作を行える状態のウィンドウ)を取得します。
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
WHILE TRUE
DIM ID = GETID(GET_ACTIVE_WIN)
FUKIDASI("タイトル:" + STATUS(ID, ST_TITLE) + "<#CR>クラス名:" + STATUS(ID, ST_CLASS))
SLEEP(0.001)
WEND
- 結果
タイトル:UWSC Debugger (実行中) クラス名:TFOya
GET_FROMPOINT_WIN
マウスカーソル下にあるウィンドウを取得します。アクティブ状態である必要はありません。
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
WHILE TRUE
DIM ID = GETID(GET_FROMPOINT_WIN)
FUKIDASI("タイトル:" + STATUS(ID, ST_TITLE) + "<#CR>クラス名:" + STATUS(ID, ST_CLASS))
SLEEP(0.001)
WEND
- 結果
UWSC Debugger (実行中) TFOya
GET_FROMPOINT_OBJ
マウスカーソル下のオブジェクトを取得します。
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
WHILE TRUE
DIM ID = GETID(GET_FROMPOINT_OBJ)
FUKIDASI("タイトル:" + STATUS(ID, ST_TITLE) + "<#CR>クラス名:" + STATUS(ID, ST_CLASS))
SLEEP(0.001)
WEND
GET_THISUWSC_WIN
現在実行しているUWSCのウィンドウIDを取得します。
DIM ID = GETID(GET_THISUWSC_WIN)
PRINT "タイトル:" + STATUS(ID, ST_TITLE)
PRINT "クラス名:" + STATUS(ID, ST_CLASS)
- 結果
タイトル:UWSC Debugger (実行中) クラス名:TFOya
GET_LOGPRINT_WIN
PRINT時に表示されるログ表示用ウィンドウのIDを取得します。UWSC Debuggerで実行している場合はデバッガーのログが表示される枠のIDが取得されます。UWSファイルで実行した場合はタイトルがUScript、UWSC Debuggerの場合はタイトルなしです。
DIM ID = GETID(GET_LOGPRINT_WIN)
PRINT "タイトル:" + STATUS(ID, ST_TITLE)
PRINT "クラス名:" + STATUS(ID, ST_CLASS)
- 結果
タイトル:UScript クラス名:TUScript
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を指定してスクリプトに以下のプログラムを保存したUWSファイルのパスを指定すると、メモ帳を起動したときにスクリプトが起動しメモ帳を起動しましたと文字列が入力されます。
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 GETID2("メモ帳", "notepad", 0)
DIM ID = GETID2("メモ帳", "Notepad", i)
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
多重起動の検知・制御
以下のプログラムをスクリプトの先頭に記述することで多重起動を制御することができます。
動作確認用のプログラムはスクリプトを起動した時刻を吹き出しに表示します。複数回スクリプトを起動すると以前のスクリプトを停止の方はスクリプトを複数個起動するとその度に時刻が更新されるので、以前のスクリプトが停止していることがわかります。
一方で自身のスクリプトを停止の方はスクリプトを複数個起動しても時刻は更新されないため、最初のスクリプトがそのまま残り後に起動した方が強制終了していることがわかります。
以前のスクリプトを停止
自身と同じ名前のスクリプトが実行中であれば、既に起動している方のスクリプトを停止します。
DIM ID = GETID(GET_THISUWSC_WIN)
CTRLWIN(GETID(STATUS(ID, ST_TITLE), STATUS(ID, ST_CLASS)), CLOSE)
以下は動作確認用のプログラムです。
DIM ID = GETID(GET_THISUWSC_WIN)
// すでに起動しているウィンドウを終了
CTRLWIN(GETID(STATUS(ID, ST_TITLE), STATUS(ID, ST_CLASS)), CLOSE)
GETTIME()
FUKIDASI(G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2)
SLEEP(60)
自身のスクリプトを停止
自身と同じ名前のスクリプトが実行中であれば、後に起動した方(自身)を停止します。
DIM ID = GETID(GET_THISUWSC_WIN)
IF GETID(STATUS(ID, ST_TITLE), STATUS(ID, ST_CLASS)) > 0 THEN EXITEXIT
以下は動作確認用プログラムです。
DIM ID = GETID(GET_THISUWSC_WIN)
// 自身を終了
IF GETID(STATUS(ID, ST_TITLE), STATUS(ID, ST_CLASS)) > 0 THEN EXITEXIT
GETTIME()
FUKIDASI(G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2)
SLEEP(60)
プログラム干渉防止
他のUWSCプログラムが起動・動作しているとき、そのプログラムが終了するまで待機します。以下のプログラムをスクリプトの先頭に記述することで機能します。
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")
-
- タイトル
- クラス名
- TFfukidsi
DIM ID = GETID("", "TFfukidasi")
-
- タイトル
- NoxPlayer
- クラス名
- Qt5QWindowIcon
DIM ID = GETID("NoxPlayer", "Qt5QWindowIcon")
-
- タイトル
- UWSC -
- クラス名
- TUinpBox_uwsc
DIM ID = GETID("UWSC -", "TUinpBox_uwsc")
-
- タイトル
- UWSC -
- クラス名
- TUmsgDlg_uwsc
DIM ID = GETID("UWSC -", "TUmsgDlg_uwsc")
-
- タイトル
- UWSC -
- クラス名
- TUslctBox_uwsc
DIM ID = GETID("UWSC -", "TUslctBox_uwsc")
-
- タイトル
- クラス名
- #32768
DIM ID = GETID("", "#32768")
使い方
ウィンドウのタイトルからIDを取得
タイトルにメモ帳が含まれるウィンドウのIDを取得します。以下のプログラムを実行するとIDにメモ帳のウィンドウIDが代入され、UWSCで操作するときに識別するIDとして使うことができるようになります。
EXEC関数でメモ帳を起動しているので、メモ帳が正しく起動していれば1を返します。起動していなければ-1を返します。
EXEC("notepad")
DIM ID = GETID("メモ帳")
PRINT ID
- 結果
1
複数のウィンドウIDを取得
EXEC関数でメモ帳・ペイント・電卓を起動し、それぞれのIDを出力します。
EXEC("notepad")
EXEC("mspaint")
EXEC("calc")
PRINT GETID("メモ帳")
PRINT GETID("ペイント")
PRINT GETID("電卓")
- 結果
1 2 3
この値はGETID関数を実行する前は別の値が割り当てられていて、GETID関数を実行したときに1から始まる整数が順に割り当てられます。
GETID関数を実行する前に割り当てていた値はGETALLWIN関数とSTATUS関数を組み合わせることで確認することができます。以下はメモ帳とペイントを起動した状態でプログラムを実行した結果です。
PRINT "ID,タイトル,クラス名"
FOR i = 0 TO GETALLWIN() - 1
ID = ALL_WIN_ID[i]
PRINT ID + "," + STATUS(ID, ST_TITLE) + "," + STATUS(ID, ST_CLASS)
NEXT
- 結果
ID, タイトル, クラス名 1, , #32770 2, GDI+ Window (TabTip.exe), GDI+ Hook Window Class 3, Forcepad driver tray window, SynTPEnhTFPWndClass 4, , Shell_TrayWnd 5, , TaskListThumbnailWnd 6, , PNIHiddenWnd 7, バッテリ メーター, SystemTray_Main 8, Window, Windows.UI.Core.CoreWindow 9, , TFClpBuf 10, Option, TFfontCs 11, 無題 - メモ帳, Notepad 12, GDI+ Window (mspaint.exe), GDI+ Hook Window Class 13, 無題 - ペイント, MSPaintApp 14, WISPTIS, TabletPenServiceHelperClass
現在メモ帳はIDの値が11、ペイントは13として割り当てられていますが、GETID関数でメモ帳・ペイントのIDを取得すると以下のように割り当てが変更されます。具体的にはメモ帳のIDが11から1、ペイントのIDが13から2に変更され、元々1から12に割り当てられていたものが後ろにずれていきます。
DIM ID1 = GETID("メモ帳")
DIM ID2 = GETID("ペイント")
- 結果
ID, タイトル, クラス名 3, , #32770 4, GDI+ Window (TabTip.exe), GDI+ Hook Window Class 5, Forcepad driver tray window, SynTPEnhTFPWndClass 6, , Shell_TrayWnd 7, , TaskListThumbnailWnd 8, , PNIHiddenWnd 9, バッテリ メーター, SystemTray_Main 10, Window, Windows.UI.Core.CoreWindow 11, , TFClpBuf 12, Option, TFfontCs 1, 無題 - メモ帳, Notepad 13, GDI+ Window (mspaint.exe), GDI+ Hook Window Class 2, 無題 - ペイント, MSPaintApp 14, WISPTIS, TabletPenServiceHelperClass
GETID関数よりも先にGETALLWIN関数が実行されると、GETID関数で取得したIDは1からの連番にはならず、GETALLWIN関数実行時に割り当てられていたIDのままとなります。
GETALLWIN()
PRINT GETID("メモ帳")
PRINT GETID("ペイント")
- 結果
11 13
プログラム実行例
ファイル名を指定して実行で「ごみ箱」を開く
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
コントロールパネルを起動する
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 ID = GETID(GET_FROMPOINT_WIN)
FUKIDASI(POSACC(ID, G_MOUSE_X - STATUS(ID, ST_CLX), G_MOUSE_Y - STATUS(ID, ST_CLY), ACC_BACK))
SLEEP(0.001)
WEND
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
[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
電卓で計算をする
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)
アクティブウィンドウが最大化されているかを調べる
アクティブウィンドウが最大化されているかを調べ数値を返します。最大化されている場合は0以外の数値、最大化されていない場合は0を返します。
DEF_DLL IsZoomed(hwnd): long: user32
DIM ID = GETID(GET_ACTIVE_WIN)
PRINT IsZoomed(IDTOHND(ID))
音量を取得
GETITEM(GETID("", "Shell_TrayWnd"), ITM_TOOLBAR)
FOR item IN ALL_ITEM_LIST
IFB POS("スピーカー: ", item) <> 0 THEN
PRINT REPLACE(REPLACE(item, "スピーカー: ", ""), "%", "")
BREAK
ENDIF
NEXT
10
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関数 (スクリプト関数)
- 指定したIDのウィンドウのアイテムをクリックします。アイテムに指定できるものにはボタン・チェックボックス・ラジオボタン・リストボックス・コンボボックス・タブコントロール・メニュー・ツリービュー・リストビュー・ツールバー・リンクがあります。
- GETITEM関数 (スクリプト関数)
- 指定したIDのウィンドウのキャプション文字やリストなどを取得します。取得した情報は配列変数のALL_ITEM_LIST[ ]に格納されます。戻値は取得した数でInteger型です。
- HNDTOID関数 (スクリプト関数)
- 引数に指定したハンドル値をIDに変換して返します。IDをハンドル値に変換するにはIDTOHND関数を使います。
- CTRLWIN関数 (スクリプト関数)
- ウィンドウの状態を操作します。ウィンドウを終了、アクティブ化、表示・非表示、最大化・最小化などができます。
- GETALLWIN関数 (スクリプト関数)
- 全ウィンドウのIDを取得します。
- IDTOHND関数 (スクリプト関数)
- 引数に指定したIDをハンドル値に変換して返します。ハンドル値をIDに変換するにはHNDTOID関数を使います。