GETID

GETID関数は、指定したウィンドウの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
  • タイトル
    UWSCのINPUT関数で表示されるウィンドウ
    クラス名
    TUinpBox_uwsc
  • タイトル
    デスクトップ通知
    クラス名
    NUIDialog
  • タイトル
    アクション センター
    クラス名
    Windows.UI.Core.CoreWindow
  • タイトル
    タスクトレイ
    クラス名
    Shell_TrayWnd

プログラム実行例

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

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」ボタンをクリックする。

CLKITEMで操作できる項目を取得

HASHTBL NAME

NAME[ITM_BTN] = "ITM_BTN"
NAME[ITM_LIST] = "ITM_LIST"
NAME[ITM_TAB] = "ITM_TAB"
NAME[ITM_MENU] = "ITM_MENU"
NAME[ITM_TREEVIEW] = "ITM_TREEVIEW"
NAME[ITM_LISTVIEW] = "ITM_LISTVIEW"
NAME[ITM_EDIT] = "ITM_EDIT"
NAME[ITM_STATIC] = "ITM_STATIC"
NAME[ITM_STATUSBAR] = "ITM_STATUSBAR"
NAME[ITM_TOOLBAR] = "ITM_TOOLBAR"
NAME[ITM_LINK] = "ITM_LINK"
NAME[ITM_ACCCLK] = "ITM_ACCCLK"
NAME[ITM_ACCCLK2] = "ITM_ACCCLK2"
NAME[ITM_ACCTXT] = "ITM_ACCTXT"
NAME[ITM_ACCEDIT] = "ITM_ACCEDIT"
NAME[ITM_FROMLAST] = "ITM_FROMLAST"

SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")

WHILE TRUE
	FUKIDASI("ALT+Sでカーソル下の情報を取得します<#CR>ESCで終了")
	IF GETKEYSTATE(VK_ALT) AND GETKEYSTATE(VK_S) THEN BREAK
WEND
FUKIDASI("取得中")

DIM ID = GETID(GET_FROMPOINT_WIN)

PRINT "DIM ID = GETID(<#DBL>" + STATUS(ID, ST_TITLE) + "<#DBL>, <#DBL>" + STATUS(ID, ST_CLASS) + "<#DBL>)"
PRINT

DIM items[] = ITM_BTN, ITM_LIST, ITM_TAB, ITM_MENU, ITM_TREEVIEW, ITM_LISTVIEW, ITM_EDIT, ITM_STATIC, ITM_STATUSBAR, ITM_TOOLBAR, ITM_LINK, ITM_ACCCLK, ITM_ACCCLK2, ITM_ACCTXT, ITM_ACCEDIT, ITM_FROMLAST

FOR item IN items
	PRINT "// [" + NAME[item] + "]"
	FOR arr IN GETITEM(ID, item)
		PRINT "CLKITEM(ID, <#DBL>" + arr + "<#DBL>, " + NAME[item] + ")"
	NEXT
	PRINT
NEXT

//////////////////////////////////////////////////
// 【引数】
// 
// 【戻値】
// 
//////////////////////////////////////////////////
PROCEDURE forceQuit()
	EXITEXIT
FEND
  1. SETHOTKEY
  2. FUKIDASI
  3. GETKEYSTATE
  4. GETID
  5. STATUS
  6. GETITEM
解説
  1. 1行目
    HASHTBL NAME
    
    連想配列NAMEを宣言。
  2. 3-18行目
    NAME[ITM_BTN] = "ITM_BTN"
    NAME[ITM_LIST] = "ITM_LIST"
    NAME[ITM_TAB] = "ITM_TAB"
    NAME[ITM_MENU] = "ITM_MENU"
    NAME[ITM_TREEVIEW] = "ITM_TREEVIEW"
    NAME[ITM_LISTVIEW] = "ITM_LISTVIEW"
    NAME[ITM_EDIT] = "ITM_EDIT"
    NAME[ITM_STATIC] = "ITM_STATIC"
    NAME[ITM_STATUSBAR] = "ITM_STATUSBAR"
    NAME[ITM_TOOLBAR] = "ITM_TOOLBAR"
    NAME[ITM_LINK] = "ITM_LINK"
    NAME[ITM_ACCCLK] = "ITM_ACCCLK"
    NAME[ITM_ACCCLK2] = "ITM_ACCCLK2"
    NAME[ITM_ACCTXT] = "ITM_ACCTXT"
    NAME[ITM_ACCEDIT] = "ITM_ACCEDIT"
    NAME[ITM_FROMLAST] = "ITM_FROMLAST"
    
  3. 20行目
    SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
    
    ESCキーでforceQuit関数を実行。
  4. 22-25行目
    WHILE TRUE
    	FUKIDASI("ALT+Sでカーソル下の情報を取得します<#CR>ESCで終了")
    	IF GETKEYSTATE(VK_ALT) AND GETKEYSTATE(VK_S) THEN BREAK
    WEND
    
    「ALT+S」が入力されるのを待つ。
  5. 26行目
    FUKIDASI("取得中")
    
    吹き出しを表示。
  6. 28行目
    DIM ID = GETID(GET_FROMPOINT_WIN)
    
    マウスカーソル下のウィンドウのIDを取得。
  7. 33行目
    DIM items[] = ITM_BTN, ITM_LIST, ITM_TAB, ITM_MENU, ITM_TREEVIEW, ITM_LISTVIEW, ITM_EDIT, ITM_STATIC, ITM_STATUSBAR, ITM_TOOLBAR, ITM_LINK, ITM_ACCCLK, ITM_ACCCLK2, ITM_ACCTXT, ITM_ACCEDIT, ITM_FROMLAST
    
  8. 35-41行目
    FOR item IN items
    	PRINT "// [" + NAME[item] + "]"
    	FOR arr IN GETITEM(ID, item)
    		PRINT "CLKITEM(ID, <#DBL>" + arr + "<#DBL>, " + NAME[item] + ")"
    	NEXT
    	PRINT
    NEXT
    

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

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

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

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)
    電卓を閉じる。

マウスカーソル下のウィンドウの情報を吹き出しに表示

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

マウスカーソル下の文字情報を取得

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
----------

ExcelからWordを起動する

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) + "<#DBL>"
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 < 0
					FOR n = Shell.Windows.Count - 1 TO 0 STEP -1
						TRY
							IFB Shell.Windows.Item(n).Name = "Internet Explorer" THEN
								cnt = cnt + 1
								IFB ABS(str) = cnt THEN
									RESULT = Shell.Windows.Item(n)
									EXIT
								ENDIF
							ENDIF
						EXCEPT
						ENDTRY
					NEXT
				CASE str = 0
					FOR n = 0 TO Shell.Windows.Count - 1
						TRY
							IF Shell.Windows.Item(n).Name = "Internet Explorer" THEN cnt = cnt + 1
						EXCEPT
						ENDTRY
					NEXT
					RESULT = cnt
					EXIT
			SELEND
		CASE FALSE
			DIM t = GETTIME()
			REPEAT
				FOR n = 0 TO Shell.Windows.Count - 1
					TRY
						DIM targetObj = Shell.Windows.Item(n)
						IFB targetObj.Name = "Internet Explorer" THEN
							SELECT flg
								CASE TRUE
									IFB targetObj.document.title = str OR targetObj.LocationURL = str THEN
										RESULT = Shell.Windows.Item(n)
										EXIT
									ENDIF
								CASE FALSE
									IFB POS(str, targetObj.document.title) OR POS(str, targetObj.LocationURL) THEN
										RESULT = Shell.Windows.Item(n)
										EXIT
									ENDIF
							SELEND
						ENDIF
					EXCEPT
					ENDTRY
				NEXT
			UNTIL GETTIME() - t >= 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
			// rowSpan(行結合)とcolSpan(列結合)の両方があれば
			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
			// rowSpan(行結合)があれば結合セルに「↑」を代入
			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
			// colSpan(列結合)があれば結合セルに「←」を代入
			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

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

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