GETID

Contents

指定したウィンドウのIDを取得します。第一引数に取得したいウィンドウのタイトル(一部でも可)を指定します。UWSCでウィンドウを操作するのによく使う関数です。

引数に指定するタイトル・クラス名は、STATUS関数の第二引数にST_TITLE・ST_CLASSを指定することで取得することもできます。

指定したウィンドウを取得できない場合は-1を返すので、ウィンドウの存在有無を確かめることもできます。

構文
  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を使う関数

  1. CHKBTN
  2. CLKITEM
  3. CTRLWIN
  4. DROPFILE
  5. GETALLWIN
  6. GETCTLHND
  7. GETITEM
  8. GETSLCTLST
  9. GETSLIDER
  10. GETSTR
  11. IDTOHND
  12. LOCKHARDEX
  13. MOUSEORG
  14. POSACC
  15. SAVEIMG
  16. SCKEY
  17. SENDSTR
  18. SETSLIDER
  19. STATUS

よく使うプログラムのクラス名一覧

  • Internet Explorer
    タイトル
    Internet Explorer
    クラス名
    IEFrame
    DIM ID = GETID(“Internet Explorer”, “IEFrame”)
  • Google Chrome
    タイトル
    Google Chrome
    クラス名
    Chrome_WidgetWin_1
    DIM ID = GETID(“Google Chrome”, “Chrome_WidgetWin_1”)
  • Firefox
    タイトル
    Mozilla Firefox
    クラス名
    MozillaWindowClass
    DIM ID = GETID(“Mozilla Firefox”, “MozillaWindowClass”)
  • Microsoft Edge
    タイトル
    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
    タイトル
    Microsoft Excel
    クラス名
    XLMAIN
    DIM ID = GETID(“Microsoft Excel”, “XLMAIN”)
  • Microsoft Word
    タイトル
    Microsoft Word
    クラス名
    OpusApp
    DIM ID = GETID(“Microsoft Word”, “OpusApp”)
  • Microsoft Outlook
    タイトル
    Microsoft Outlook
    クラス名
    rctrl_renwnd32
    DIM ID = GETID(“Microsoft Outlook”, “rctrl_renwnd32”)
  • UWSC Debugger
    タイトル
    UWSC Debugger
    クラス名
    TFOya
    DIM ID = GETID(“UWSC Debugger”, “TFOya”)
  • UWSC Pro
    タイトル
    UWSC Pro
    クラス名
    TUMain_uwsc
    DIM ID = GETID(“UWSC Pro”, “TUMain_uwsc”)
  • #32770
    タイトル
    ダイアログ
    クラス名
    #32770
    DIM ID = GETID(“名前を付けて保存”, “#32770”)
  • UWSC FUKIDASI
    タイトル
    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. SETHOTKEY
  2. FUKIDASI
  3. SLEEP
  4. GETID
  5. STATUS
  6. GETITEM
  7. EVAL
  8. CLKITEM
解説
  1. 1行目
    PUBLIC flg = FALSE
    Alt+Xの入力を検知するための変数。
  2. 3行目
    SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
    ESCキーが入力されたらforceQuit関数を呼び出す。
  3. 4行目
    SETHOTKEY(VK_X, MOD_ALT, "flag")
    Alt+Xが入力されたらflag関数を呼び出し、変数flgにTrueを代入。
  4. 11-14行目
    REPEAT
    	FUKIDASI("Alt + Xでカーソル下の情報を取得")
    	SLEEP(0.001)
    UNTIL flg
    変数flgにTrueが代入されるまで待機する。
  5. 18行目
    DIM ID = GETID(GET_FROMPOINT_WIN)
    マウスカーソル下のウィンドウのIDを取得する。
  6. 20行目
    PRINT "DIM ID = GETID(" + STATUS(ID, ST_TITLE) + ", " + STATUS(ID, ST_CLASS) + ")"
    マウスカーソル下のウィンドウのタイトルとクラス名を出力。
  7. 23,29行目
    FOR item IN array
    	…
    NEXT
    配列arrayの要素数だけループ。
  8. 25-27行目
    	FOR class IN GETITEM(ID, EVAL("ITM_" + item), -1)
    		PRINT "CLKITEM(ID, " + class + ", CLK_" + item + ")"
    	NEXT
    第二引数に指定した項目のキャプションやリスト等を取得する。For In構文に指定した場合は各要素が返されます。

ファイル名を指定して実行で「ごみ箱」を開く

DIM Shell = CREATEOLEOBJ("Shell.Application")
Shell.FileRun

DIM ID = GETID("ファイル名を指定して実行", "#32770")
SENDSTR(ID, "shell:RecycleBinFolder")
CLKITEM(ID, "OK", ITM_BTN)
  1. CREATEOLEOBJ
  2. Shell.FileRun
  3. GETID
  4. SENDSTR
  5. CLKITEM
解説
  1. 1行目
    DIM Shell = CREATEOLEOBJ("Shell.Application")
    Shellオブジェクトを生成する。
  2. 2行目
    Shell.FileRun
    「ファイル名を指定して実行」ウィンドウを開く。
  3. 4行目
    DIM ID = GETID("ファイル名を指定して実行", "#32770")
    「ファイル名を指定して実行」のIDを取得。「#32770」はダイアログのクラス名を示しています。
  4. 5行目
    SENDSTR(ID, "shell:RecycleBinFolder")
    「shell:RecycleBinFolder」と入力する。
  5. 6行目
    CLKITEM(ID, "OK", ITM_BTN)
    「OK」ボタンをクリックする。

タスクバーの位置を取得する

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. GETID
  2. STATUS
解説
  1. 1行目
    DIM ID = GETID("", "Shell_TrayWnd")
    タスクバーのIDを取得。
  2. 3行目
    SELECT TRUE
    CASEで書かれた条件で最初にTRUEとなったところを実行する。
  3. 4-5行目
    	CASE STATUS(ID, ST_X) = 0 AND STATUS(ID, ST_Y) = 0 AND STATUS(ID, ST_CLWIDTH) = G_SCREEN_W
    		PRINT "上"
    タスクバーのx座標が0・y座標が0、かつ、幅が画面幅と等しければ、「上」と出力。
  4. 6-7行目
    	CASE STATUS(ID, ST_X) = 0 AND STATUS(ID, ST_Y) = 0 AND STATUS(ID, ST_CLHEIGHT) = G_SCREEN_H
    		PRINT "左"
    タスクバーのx座標が0・y座標が0、かつ、高さが画面高と等しければ、「左」と出力。
  5. 8-9行目
    	CASE STATUS(ID, ST_X) = 0 AND STATUS(ID, ST_Y)  0 AND STATUS(ID, ST_CLWIDTH) = G_SCREEN_W
    		PRINT "下"
    タスクバーのx座標が0・y座標が0でない、かつ、幅が画面幅と等しければ、「下」と出力。
  6. 10-11行目
    	CASE STATUS(ID, ST_X)  0 AND STATUS(ID, ST_Y) = 0 AND STATUS(ID, ST_CLHEIGHT) = G_SCREEN_H
    		PRINT "右"
    タスクバーのx座標が0でない・y座標が0、かつ、高さが画面高と等しければ、「右」と出力。

画像をクリップボードにコピーする

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. SETHOTKEY
  2. SLEEP
  3. SAVEIMG
  4. GETID
解説
  1. 1行目
    SETHOTKEY(VK_S, MOD_ALT, "imageToClipboard")
    Alt+SでimageToClipboard関数を実行します。
  2. 2行目
    SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
    EscでforceQuit関数を実行します。
  3. 4-6行目
    WHILE TRUE
    	SLEEP(0.01)
    WEND
    無限ループ。Alt+SもしくはEscが入力されるのを待機します。

コントロールパネルを起動する

DIM Shell = CREATEOLEOBJ("Shell.Application")
Shell.ControlPanelItem("control")
SLEEP(3.000)

DIM ID = GETID("コントロール パネル")
//CTRLWIN(ID, CLOSE)
  1. CREATEOLEOBJ
  2. Shell.ControlPanelItem
  3. SLEEP
  4. GETID
  5. CTRLWIN
解説
  1. 1行目
    DIM Shell = CREATEOLEOBJ("Shell.Application")
    Shellオブジェクトを生成。
  2. 2行目
    Shell.ControlPanelItem("control")
    コントロールパネルを起動。
  3. 3行目
    SLEEP(3.000)
    3.000秒待機する。
  4. 5行目
    DIM ID = GETID("コントロール パネル")
    コントロールパネルのIDを取得する。
  5. 6行目
    //CTRLWIN(ID, CLOSE)
    コントロールパネルを閉じる。

電卓(ストアアプリ)を起動

EXEC("calc")
DIM ID = GETID("電卓")

// CTRLWIN(ID, CLOSE)
  1. EXEC
  2. GETID
  3. CTRLWIN
解説
  1. 1行目
    EXEC("calc")
    電卓を起動。
  2. 2行目
    DIM ID = GETID("電卓")
    電卓のIDを取得。EXEC関数は起動したときに戻値としてIDを返すが、ストアアプリなど一部のアプリはIDを返してくれないので起動後にGETID関数で取得します。
  3. 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
  1. CREATEOLEOBJ
  2. Excel.Application.Visible
  3. Excel.Application.ActivateMicrosoftApp
  4. GETID
  5. SLEEP
  6. CTRLWIN
  7. 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
  1. CREATEOLEOBJ
  2. Excel.Application.Visible
  3. Excel.Application.ActivateMicrosoftApp
  4. GETID
  5. SLEEP
  6. CTRLWIN
  7. 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
  1. SETHOTKEY
  2. GETID
  3. STATUS
  4. FUKIDASI
  5. SLEEP

メモ帳に本文を入力し[名前を付けて保存]ダイアログボックスを開いて保存する

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
  1. CREATEOLEOBJ
  2. FSO.GetParentFolderName
  3. FSO.GetFileName
  4. EXEC
  5. GETID
  6. SENDSTR
  7. CLKITEM
  8. FSO.FolderExists
  9. CTRLWIN
  10. SLEEP
  11. SCKEY
解説
  1. 1行目
    DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
    FileSystemObjectオブジェクトを生成。
  2. 2行目
    DIM path = "D:\Desktop\sample.txt"
    保存先のパスを指定。
  3. 3行目
    DIM folderspec = FSO.GetParentFolderName(path)
    パスからフォルダ部分を取得。
  4. 4行目
    DIM filename = FSO.GetFileName(path)
    パスからファイル名を取得。
  5. 6行目
    EXEC("notepad")
    メモ帳を起動。
  6. 7行目
    DIM ID = GETID("メモ帳", "Notepad")
    メモ帳のIDを取得。
  7. 8行目
    SENDSTR(ID, "内容", 0)
    メモ帳に文章を入力。
  8. 9行目
    CLKITEM(ID, "ファイル\名前を付けて保存", CLK_MENU)
    [名前を付けて保存]を実行。
  9. 11,27,29行目
    IFB FSO.FolderExists(folderspec) THEN
    	…
    ELSE
    	…
    ENDIF
    変数pathに指定したフォルダが存在したら12行目>>>、存在しなければ28行目>>>
  10. 12行目
    	DIM ID2 = GETID("名前を付けて保存", "#32770")
    [名前を付けて保存]ダイアログボックスのIDを取得。
  11. 14行目
    	CTRLWIN(ID2, ACTIVATE)
    [名前を付けて保存]ウインドウをアクティブ化する。
  12. 15行目
    	SLEEP(0.500)
    0.500秒待機する。
  13. 17行目
    	SCKEY(ID2, VK_F4)
    F4キーでアドレスバーを選択。
  14. 18行目
    	SENDSTR(ID2, folderspec, 1, TRUE)
    フォルダ名を入力。
  15. 19行目
    	SCKEY(ID2, VK_RETURN)
    Enterキーで確定・移動。
  16. 20行目
    	SLEEP(0.500)
    0.500秒待機する。
  17. 22行目
    	SCKEY(ID2, VK_ALT, VK_N)
    Alt+Nでファイル名を選択。
  18. 23行目
    	SENDSTR(ID2, filename, 1, TRUE)
    ファイル名を入力。
  19. 24行目
    	SLEEP(0.500)
    0.500秒待機する。
  20. 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
  1. GETID
  2. FUKIDASI
  3. POSACC
  4. STATUS

Outlookが起動していなかったら起動する

IF GETID(, "rctrl_renwnd32") = -1 THEN DOSCMD("start outlook")
  1. getid
  2. doscmd

マウスカーソル下のスクロールバー情報を取得

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. SETHOTKEY
  2. GETID
  3. GETSLIDER
  4. FUKIDASI
結果
[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
  1. CREATEOLEOBJ
  2. Excel.Application.Visible
  3. Excel.Application.ActivateMicrosoftApp
  4. GETID
  5. SLEEP
  6. CTRLWIN
  7. 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
  1. CREATEOLEOBJ
  2. WshShell.Run
  3. GETID
  4. SLEEP
  5. WshShell.AppActivate
  6. WshShell.SendKeys

アクティブウィンドウの左上にカーソルを移動

DIM ID = GETID(GET_ACTIVE_WIN)

DIM x = STATUS(ID, ST_X)
DIM y = STATUS(ID, ST_Y)

MMV(x, y)
  1. GETID
  2. STATUS
  3. MMV
解説
  1. 1行目
    DIM ID = GETID(GET_ACTIVE_WIN)
    アクティブウィンドウのIDを取得。
  2. 3行目
    DIM x = STATUS(ID, ST_X)
    アクティブウィンドウのx座標を取得し、変数xに代入。
  3. 4行目
    DIM y = STATUS(ID, ST_Y)
    アクティブウィンドウのy座標を取得し、変数yに代入。
  4. 6行目
    MMV(x, y)
    マウスカーソルを(x, y) = (変数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")
  1. EXEC
  2. GETID
  3. DROPFILE

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
  1. IEBoot
  2. IE.Navigate
  3. BusyWait
  4. GETID
  5. CTRLWIN
  6. document.getElementById
  7. Element.getElementsByTagName
  8. Elements.Item
  9. getTableData
  10. UBound
  11. TRIM
  12. POS
  13. REPLACE
  14. SPLIT
  15. degToDMS

Internet ExplorerのタイトルとURLを取得

DIM ID = GETID(“Internet Explorer”)

PRINT GETSTR(ID, 0, STR_STATIC)
PRINT GETSTR(ID, 1, STR_EDIT)
  1. GETID
  2. GETSTR

マウスカーソル下のウィンドウの左上の座標に移動する

MOUSEORG(GETID(GET_FROMPOINT_WIN))
MMV(0, 0)
  1. MOUSEORG
  2. GETID
  3. MMV
参考文献
Multiple Document Interface – Wikipedia

関連記事

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 (スクリプト関数)
スライダー(トラックバー、スクロールバー)の値を設定します。