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
タイトル: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
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
タイトル: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)
結果
UWSC
タイトル: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, "メモ帳を起動しました")

デバッグするときは[指定ウィンドウが現れた時]を検知することは不可能なので、TitleClassの値をGETID関数に直接指定することでIDを取得します。

UWSC
DIM ID = GETID(GET_SCHEDULE_WIN)
IF ID = -1 THEN ID = GETID(Title, Class)

以下は[指定ウィンドウが現れた時]のTitleメモ帳ClassNotepadを指定しているときのプログラムです。スケジュール設定しているときはGET_SCHEDULE_WINIDを取得し、取得できなかったときはすでに起動しているメモ帳のIDを取得することで、デバッグもできるようになります。

UWSC
DIM ID = GETID(GET_SCHEDULE_WIN)
IF ID = -1 THEN ID = GETID("メモ帳", "Notepad")

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

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
結果
UWSC
1

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

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

UWSC
EXEC("notepad")
EXEC("mspaint")
EXEC("calc")
PRINT GETID("メモ帳")
PRINT GETID("ペイント")
PRINT GETID("電卓")
結果
UWSC
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
結果
UWSC
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("ペイント")
結果
UWSC
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("ペイント")
結果
UWSC
11
13

プログラム実行例

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

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

DIM ID = GETID("ファイル名を指定して実行", "#32770")
SENDSTR(ID, "shell:RecycleBinFolder")
CLKITEM(ID, "OK", CLK_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

//////////////////////////////////////////////////
// 【引数】
//   
// 【戻り値】
//   
//////////////////////////////////////////////////
PROCEDURE forceQuit()
	EXITEXIT
FEND
使用関数

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

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, EMPTYPARAM, "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, "保存", CLK_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

//////////////////////////////////////////////////
// 【引数】
//   
// 【戻り値】
//   
//////////////////////////////////////////////////
PROCEDURE forceQuit()
	EXITEXIT
FEND
使用関数

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

//////////////////////////////////////////////////
// 【引数】
//   
// 【戻り値】
//   
//////////////////////////////////////////////////
PROCEDURE forceQuit()
	EXITEXIT
FEND
結果
FFFTP
UWSC
[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

//////////////////////////////////////////////////
// 【引数】
//   
// 【戻り値】
//   
//////////////////////////////////////////////////
PROCEDURE forceQuit()
	EXITEXIT
FEND

//////////////////////////////////////////////////
// 【引数】
//   expr : 評価する式 
//   truepart : 評価した式がTrueのときに返す値 
//   falsepart : 評価した式がFalseのときに返す値 
// 【戻り値】
//   truepart : 評価した式がTrueのとき、falsepart : 評価した式がFalseのとき 
//////////////////////////////////////////////////
FUNCTION IIF(expr, truepart, falsepart)
	IFB EVAL(expr) THEN
		RESULT = truepart
	ELSE
		RESULT = falsepart
	ENDIF
FEND
使用関数

電卓で計算をする

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 cmd[] = "電卓", "メモ帳", "ペイント",  "最大化", "最小化", "終了"

RECOSTATE(TRUE, cmd)

WHILE TRUE
	FUKIDASI("音声を取得します")
	SELECT DICTATE(TRUE)
		CASE "電卓"
			FUKIDASI("電卓を起動します")
			EXEC("calc.exe")
		CASE "メモ帳"
			FUKIDASI("メモ帳を起動します")
			EXEC("notepad.exe")
		CASE "ペイント"
			FUKIDASI("ペイントを起動します")
			EXEC("mspaint.exe")
		CASE "最大化"
			FUKIDASI("アクティブウィンドウを最大化します")
			CTRLWIN(GETID(GET_ACTIVE_WIN), MAX)
		CASE "最小化"
			FUKIDASI("アクティブウィンドウを最小化します")
			CTRLWIN(GETID(GET_ACTIVE_WIN), MIN)
		CASE "終了"
			BREAK
	SELEND
	SLEEP(0.500)
	FUKIDASI()
WEND

RECOSTATE(FALSE)
使用関数

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

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
結果
UWSC
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. https://ja.wikipedia.org/wiki/Multiple_Document_Interface#MDI%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BE%8B

関連記事

STATUS関数 (スクリプト関数)
ウィンドウの各種状態を返します。
GETCTLHND関数 (スクリプト関数)
ボタン等、オブジェクトのハンドルを取得します。
ACW関数 (スクリプト関数)
ウィンドウの状態を変更、またはアクティブにします。
CTRLWIN関数 (スクリプト関数)
ウィンドウの状態を制御します。
GETSLIDER関数 (スクリプト関数)
スライダー(トラックバー、スクロールバー)の値を取得します。
HNDTOID関数 (スクリプト関数)
ハンドル値をIDに変換します。
IDTOHND関数 (スクリプト関数)
IDをハンドル値に変換します。
CHKBTN関数 (スクリプト関数)
ボタン類(ボタン、チェックボックス、ラジオボタン)の状態を返します。
CLKITEM関数 (スクリプト関数)
アイテムをクリックします。
GETITEM関数 (スクリプト関数)
キャプション文字やリスト等をすべて取得します。