GETIDゲットアイディー関数

本ページには広告が含まれています。

目次

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

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

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

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

アクティブウィンドウ(現在入力操作を行える状態のウィンドウ)を取得します。

UWSC
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

マウスカーソル下にあるウィンドウを取得します。アクティブ状態である必要はありません。

UWSC
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

マウスカーソル下のオブジェクトを取得します。

UWSC
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を取得します。

UWSC
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の場合はタイトルなしです。

UWSC
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)に変更します。

UWSC
BALLOON("吹き出し")

ACW(GETID(GET_BALLOON_WIN), 10, 10, 120, 60)
SLEEP(3.000)

GET_FUKIDASI_WIN

FUKIDASI関数またはBALLOON関数で表示される吹き出しのIDを取得します。

以下は吹き出しを最小化にします。

UWSC
FUKIDASI("吹き出し")

CTRLWIN(GETID(GET_BALLOON_WIN), MIN)
SLEEP(3.000)

GET_FORM_WIN

CREATEFORM関数で作成したフォームのIDを取得します。

以下はフォームを座標(x, y) = (0, 0)の位置に移動させるプログラムです。カレントディレクトリに空でも良いのでindex.htmlを用意してから実行してください。

UWSC
CREATEFORM("index.html", "フォーム", TRUE)

ACW(GETID(GET_FORM_WIN), 0, 0)
SLEEP(3.000)

以下はフォームを画面中央に移動するプログラムです。

UWSC
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)の位置に移動させるプログラムです。

UWSC
CREATEFORM("index.html", "フォーム", TRUE, FOM_FORM2)

ACW(GETID(GET_FORM_WIN2), 0, 0)
SLEEP(3.000)

GET_SCHEDULE_WIN

UWSC
GETID(GET_SCHEDULE_WIN)

UWSCの[設定]-[設定]-[スケジュール設定をする]-[タイマー]-[指定ウィンドウが現れた時]のTitle・Classを指定して起動したウィンドウのIDを取得します。別プロセスで実行にチェックが入っているときは取得できません。スケジュール設定の操作方法は使い方を参照。

[指定ウィンドウが現れた時]のClassにNOTEPADを指定してスクリプトに以下のプログラムを保存したUWSファイルのパスを指定すると、メモ帳を起動したときにスクリプトが起動しメモ帳を起動しましたと文字列が入力されます。

UWSC
DIM ID = GETID(GET_SCHEDULE_WIN)

SENDSTR(ID, "メモ帳を起動しました")

同じタイトル・クラス名のウィンドウを区別する

GETIDで取得できるのは1つだけです。同じタイトル・クラス名で複数のウィンドウを区別するにはGETALLWIN関数ですべてのウィンドウのIDをループし目的のIDを取得する必要があります。

以下のGETID2関数は第三引数に番号を指定することで、同じタイトル・クラス名があるときn番目のIDを取得することができます。

第三引数に0を指定すると、指定したタイトル・クラス名のウィンドウが何個あるかカウントすることもできます。

UWSC
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を取得。

UWSC
DIM ID = GETID2("メモ帳", "notepad", 2)

タイトルがメモ帳、クラス名がnotepadのウィンドウの数を取得。

UWSC
DIM n = GETID2("メモ帳", "notepad", 0)

開いてるすべてのメモ帳に対して操作を行う。

UWSC
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ウィンドウを閉じるプログラムです。

UWSC
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

多重起動の検知・制御

以下のプログラムをスクリプトの先頭に記述することで多重起動を制御することができます。

動作確認用のプログラムはスクリプトを起動した時刻を吹き出しに表示します。複数回スクリプトを起動すると以前のスクリプトを停止の方はスクリプトを複数個起動するとその度に時刻が更新されるので、以前のスクリプトが停止していることがわかります。

一方で自身のスクリプトを停止の方はスクリプトを複数個起動しても時刻は更新されないため、最初のスクリプトがそのまま残り後に起動した方が強制終了していることがわかります。

以前のスクリプトを停止

自身と同じ名前のスクリプトが実行中であれば、既に起動している方のスクリプトを停止します。

UWSC
DIM ID = GETID(GET_THISUWSC_WIN)

CTRLWIN(GETID(STATUS(ID, ST_TITLE), STATUS(ID, ST_CLASS)), CLOSE)

以下は動作確認用のプログラムです。

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

自身のスクリプトを停止

自身と同じ名前のスクリプトが実行中であれば、後に起動した方(自身)を停止します。

UWSC
DIM ID = GETID(GET_THISUWSC_WIN)

IF GETID(STATUS(ID, ST_TITLE), STATUS(ID, ST_CLASS)) > 0 THEN EXITEXIT

以下は動作確認用プログラムです。

UWSC
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プログラムが起動・動作しているとき、そのプログラムが終了するまで待機します。以下のプログラムをスクリプトの先頭に記述することで機能します。

UWSC
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
    UWSC
    DIM ID = GETID("Internet Explorer", "IEFrame")
  • Google Chrome
    タイトル
    Google Chrome
    クラス名
    Chrome_WidgetWin_1
    UWSC
    DIM ID = GETID("Google Chrome", "Chrome_WidgetWin_1")
  • Firefox
    タイトル
    Mozilla Firefox
    クラス名
    MozillaWindowClass
    UWSC
    DIM ID = GETID("Mozilla Firefox", "MozillaWindowClass")
  • Microsoft Edge
    タイトル
    Microsoft Edge
    クラス名
    ApplicationFrameWindow
    UWSC
    DIM ID = GETID("Microsoft Edge ", "ApplicationFrameWindow")
  • ユーザー アカウント制御
    タイトル
    ユーザー アカウント制御
    クラス名
    Credential Dialog Xaml Host
    UWSC
    DIM ID = GETID("ユーザー アカウント制御", "Credential Dialog Xaml Host")
  • タスクマネージャー
    タイトル
    タスク マネージャー
    クラス名
    TaskManagerWindow
    UWSC
    DIM ID = GETID("タスク マネージャー", "TaskManagerWindow")
  • メモ帳
    タイトル
    メモ帳
    クラス名
    Notepad
    UWSC
    DIM ID = GETID("メモ帳", "Notepad")
  • ペイント
    タイトル
    ペイント
    クラス名
    MSPaintApp
    UWSC
    DIM ID = GETID("ペイント, "MSPaintApp")
  • Microsoft Excel
    タイトル
    Microsoft Excel
    クラス名
    XLMAIN
    UWSC
    DIM ID = GETID("Microsoft Excel", "XLMAIN")
  • Microsoft Word
    タイトル
    Microsoft Word
    クラス名
    OpusApp
    UWSC
    DIM ID = GETID("Microsoft Word", "OpusApp")
  • Microsoft Outlook
    タイトル
    Microsoft Outlook
    クラス名
    rctrl_renwnd32
    UWSC
    DIM ID = GETID("Microsoft Outlook", "rctrl_renwnd32")
  • UWSC Debugger
    タイトル
    UWSC Debugger
    クラス名
    TFOya
    UWSC
    DIM ID = GETID("UWSC Debugger", "TFOya")
  • UWSC Pro
    タイトル
    UWSC Pro
    クラス名
    TUMain_uwsc
    UWSC
    DIM ID = GETID("UWSC Pro", "TUMain_uwsc")
  • #32770
    タイトル
    ダイアログ
    クラス名
    #32770
    UWSC
    DIM ID = GETID("名前を付けて保存", "#32770")
  • UWSC FUKIDASI
    タイトル
    クラス名
    TFfukidsi
    UWSC
    DIM ID = GETID("", "TFfukidasi")
  • NoxPlayer
    タイトル
    NoxPlayer
    クラス名
    Qt5QWindowIcon
    UWSC
    DIM ID = GETID("NoxPlayer", "Qt5QWindowIcon")
  • .png
    タイトル
    UWSC -
    クラス名
    TUinpBox_uwsc
    UWSC
    DIM ID = GETID("UWSC -", "TUinpBox_uwsc")
  • .png
    タイトル
    UWSC -
    クラス名
    TUmsgDlg_uwsc
    UWSC
    DIM ID = GETID("UWSC -", "TUmsgDlg_uwsc")
  • .png
    タイトル
    UWSC -
    クラス名
    TUslctBox_uwsc
    UWSC
    DIM ID = GETID("UWSC -", "TUslctBox_uwsc")
  • .png
    タイトル
    クラス名
    #32768
    UWSC
    DIM ID = GETID("", "#32768")

使い方

ウィンドウのタイトルからIDを取得

タイトルにメモ帳が含まれるウィンドウのIDを取得します。以下のプログラムを実行するとIDにメモ帳のウィンドウIDが代入され、UWSCで操作するときに識別するIDとして使うことができるようになります。

EXEC関数でメモ帳を起動しているので、メモ帳が正しく起動していれば1を返します。起動していなければ-1を返します。

UWSC
EXEC("notepad")
DIM ID = GETID("メモ帳")
PRINT ID
結果
プレーンテキスト
1

複数のウィンドウIDを取得

EXEC関数でメモ帳・ペイント・電卓を起動し、それぞれのIDを出力します。

UWSC
EXEC("notepad")
EXEC("mspaint")
EXEC("calc")
PRINT GETID("メモ帳")
PRINT GETID("ペイント")
PRINT GETID("電卓")
結果
プレーンテキスト
1
2
3

この値はGETID関数を実行する前は別の値が割り当てられていて、GETID関数を実行したときに1から始まる整数が順に割り当てられます。

GETID関数を実行する前に割り当てていた値はGETALLWIN関数STATUS関数を組み合わせることで確認することができます。以下はメモ帳とペイントを起動した状態でプログラムを実行した結果です。

UWSC
PRINT "ID,タイトル,クラス名"

FOR i = 0 TO GETALLWIN() - 1
	ID = ALL_WIN_ID[i]
	PRINT ID  + "," + STATUS(ID, ST_TITLE) + "," + STATUS(ID, ST_CLASS)
NEXT
結果
CSV
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に割り当てられていたものが後ろにずれていきます。

UWSC
DIM ID1 = GETID("メモ帳")
DIM ID2 = GETID("ペイント")
結果
CSV
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関数で取得したID1からの連番にはならず、GETALLWIN関数実行時に割り当てられていたIDのままとなります。

UWSC
GETALLWIN()

PRINT GETID("メモ帳")
PRINT GETID("ペイント")
結果
プレーンテキスト
11
13

プログラム実行例

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

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

DIM ID = GETID("ファイル名を指定して実行", "#32770")
SENDSTR(ID, "shell:RecycleBinFolder")
CLKITEM(ID, "OK", ITM_BTN)
使用関数
解説

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

UWSC
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でマウスカーソル下のオブジェクトのスクリーンショット画像をクリップボードにコピーします。

UWSC
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
解説

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

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

DIM ID = GETID("コントロール パネル")
//CTRLWIN(ID, CLOSE)
使用関数
解説

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

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

// CTRLWIN(ID, CLOSE)
解説

PowerPointを起動する(Excel)

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

UWSC
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
使用関数
解説

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

UWSC
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
使用関数

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

UWSC
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
使用関数
解説

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

UWSC
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が起動していなかったら起動する

UWSC
IF GETID(, "rctrl_renwnd32") = -1 THEN DOSCMD("start outlook")
使用関数
解説

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

UWSC
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
結果
FFFTP
CSV
[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)

UWSC
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
使用関数
解説

ファイルを開いているプロセスを調べる

UWSC
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
使用関数
解説

電卓で計算をする

UWSC
DIM WshShell = CREATEOLEOBJ("Wscript.Shell")

WITH WshShell
	.Run("calc.exe")
	GETID("電卓", , -1)
	SLEEP(3.000)
	.AppActivate("電卓")
	.SendKeys("123")
	.SendKeys("{+}")
	.SendKeys("456")
	.SendKeys("{=}")
ENDWITH
使用関数
解説

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

UWSC
DIM ID = GETID(GET_ACTIVE_WIN)

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

MMV(x, y)
使用関数
解説

アクティブウィンドウが最大化されているかを調べる

アクティブウィンドウが最大化されているかを調べ数値を返します。最大化されている場合は0以外の数値、最大化されていない場合は0を返します。

UWSC
DEF_DLL IsZoomed(hwnd): long: user32

DIM ID = GETID(GET_ACTIVE_WIN)
PRINT IsZoomed(IDTOHND(ID))

音量を取得

UWSC
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で起動。

UWSC
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を取得

UWSC
DIM ID = GETID("Internet Explorer")

PRINT GETSTR(ID, 0, STR_STATIC)
PRINT GETSTR(ID, 1, STR_EDIT)
使用関数

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

UWSC
MOUSEORG(GETID(GET_FROMPOINT_WIN))
MMV(0, 0)

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

UWSC
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. Multiple Document Interface - Wikipedia

関連記事

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関数を使います。