GETIDゲットアイディー関数

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

Contents

指定したウィンドウの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
DIM ID = GETID(GET_ACTIVE_WIN)

PRINT STATUS(ID, ST_TITLE)
PRINT STATUS(ID, ST_CLASS)
結果
プレーンテキスト
UWSC Debugger (実行中)
TFOya

GET_FROMPOINT_WIN

マウスカーソル下にあるウィンドウを取得します。

UWSC
DIM ID = GETID(GET_FROMPOINT_WIN)

PRINT STATUS(ID, ST_TITLE)
PRINT STATUS(ID, ST_CLASS)
結果
プレーンテキスト
UWSC Debugger (実行中)
TFOya

GET_FROMPOINT_OBJ

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

GET_THISUWSC_WIN

現在実行しているUWSCのウィンドウIDを取得します。

UWSC
GETID(GET_THISUWSC_WIN)

GET_LOGPRINT_WIN

PRINT時に表示されるログ表示用ウィンドウのIDを取得します。UWSC Debuggerで実行している場合はデバッガーのログが表示される枠を操作することができます。

UWSC
GETID(GET_LOGPRINT_WIN)

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を指定。

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 ("メモ帳", "notepad", 0)
	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
IF GETID(GET_UWSC_NAME, "クラス名") <> -1 THEN EXIT

プログラム干渉防止

他のUWSCプログラムが起動・動作しているとき、そのプログラムが終了するまで待機する。3つ以上起動している時の挙動は未確認。

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
    タイトル
    UWSCのFUKIDASI関数で表示される吹き出し
    クラス名
    TFfukidsi
  • NoxPlayer
    タイトル
    NoxPlayer
    クラス名
    Qt5QWindowIcon
    UWSC
    DIM ID = GETID("NoxPlayer", "Qt5QWindowIcon")

使い方

開かれているすべてのウィンドウのIDとクラス名を取得。

UWSC
DIM str = ""

FOR i = 0 TO GETALLWIN() - 1
	ID = ALL_WIN_ID[i]
	PRINT "ID = GETID(<#DBL>" + STATUS(ID, ST_TITLE) + "<#DBL>, <#DBL>" + STATUS(ID, ST_CLASS) + "<#DBL>)"
NEXT

プログラム実行例

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

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

//////////////////////////////////////////////////
// 【引数】
//   
// 【戻り値】
//   
//////////////////////////////////////////////////
PROCEDURE forceQuit()
	EXITEXIT
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 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
使用関数

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

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

フラッシュ暗算

UWSC
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")

DIM grades[] = "20級(初級)", "19級(初級)", "18級(初級)", "17級(初級)", "16級(初級)", "15級(初級)", "14級(初級)", "13級(初級)", "12級(初級)", "11級(初級)", _
				"10級(中級)", "9級(中級)", "8級(中級)", "7級(中級)", "6級(中級)", "5級(中級)", "4級(中級)", "3級(中級)", "2級(中級)", "1級(中級)", _
				"初段(上級)", "2段(上級)", "3段(上級)", "4段(上級)", "5段(上級)", "6段(上級)", "7段(上級)", "8段(上級)", "9段(上級)", "10段(上級)", _
				"11段(超上級)", "12段(超上級)", "13段(超上級)", "14段(超上級)", "15段(超上級)", "16段(超上級)", "17段(超上級)", "18段(超上級)", "19段(超上級)", "20段(超上級)"
DIM keta[] = 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, _
				2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _ 
				2, 3, 3, 3, 3, 3, 3, 3, 3, 3, _ 
				3, 3, 3, 3, 3, 3, 3, 3, 3, 3
DIM num[] = 3, 3, 5, 8, 10, 12, 15, 20, 10, 15, _
				2, 3, 4, 5, 6, 7, 8, 10, 12, 15, _
				15, 4, 6, 8, 10, 12, 15, 15, 15, 15, _
				15, 15, 15, 15, 15, 15, 15, 15, 15, 15
DIM time[] = 5, 5, 7, 10, 12, 15, 15, 15, 10, 15, _
				4, 6, 7, 8, 9, 10, 11, 12, 12, 13, _
				10, 4, 5, 6, 7, 8, 8, 6, 4.5, 3, _
				2.8, 2.6, 2.4, 2.2, 2.0, 1.9, 1.8, 1.7, 1.6, 1.5
DIM grade = SLCTBOX(SLCT_CMB OR SLCT_NUM, 60, "レベルを選択", grades)
DIM sum = 0
DIM fontsize = 80
DIM fontname = "abacus2"
DIM fontcolor = $00aa00
DIM bgcolor = 1

FOR i = 1 TO num[grade]
	DIM n = POWER(10, keta[grade] - 1) + RANDOM(POWER(10, keta[grade]) - POWER(10, keta[grade] - 1))
	sum = sum + n
	DIM msg = " " + n + " "
	FUKIDASI(msg, G_SCREEN_W, G_SCREEN_H,, fontsize, fontname, fontcolor, bgcolor)
	DIM ID = GETID(GET_FUKIDASI_WIN)
	FUKIDASI(msg, (STATUS(ID, ST_X) - STATUS(ID, ST_WIDTH))/2, (STATUS(ID, ST_Y) - STATUS(ID, ST_HEIGHT))/2,, fontsize, fontname, fontcolor, bgcolor)
	SOUND("BEEP")
	SLEEP(time[grade])
	FUKIDASI()
NEXT

DIM ans = INPUT("答えは?")

IFB ans = sum THEN
	MSGBOX("正解です!(ans." + sum + ")")
ELSE
	MSGBOX("残念でした、正解は " + sum + " です。")
ENDIF

PROCEDURE forceQuit()
	EXITEXIT
FEND
使用関数
解説

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

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

//////////////////////////////////////////////////
// 【引数】
//   
// 【戻り値】
//   
//////////////////////////////////////////////////
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 ID = GETID(GET_ACTIVE_WIN)

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

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

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関数 (スクリプト関数)
アイテムをクリックします。
GETALLWIN関数 (スクリプト関数)
全ウィンドウのIDを取得します。
GETITEM関数 (スクリプト関数)
指定したIDのウィンドウのキャプション文字やリストなどを取得します。取得した情報は配列変数のALL_ITEM_LIST[ ]に格納されます。戻値は取得した数でInteger型です。
HNDTOID関数 (スクリプト関数)
引数に指定したハンドル値をIDに変換して返します。IDをハンドル値に変換するにはIDTOHND関数を使います。
CTRLWIN関数 (スクリプト関数)
ウィンドウの状態を操作します。ウィンドウを終了、アクティブ化、表示・非表示、最大化・最小化などができます。
GETSLIDER関数 (スクリプト関数)
スライダー(トラックバー、スクロールバー)の値を取得します。