CTRLWINコントロールウィンドウ関数

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

ウィンドウの状態を操作します。ウィンドウを終了、アクティブ化、表示・非表示、最大化・最小化などができます。第一引数のIDはGETID関数で取得します。

構文
  1. void = CTRLWIN( ID, 命令 )
引数
ID (Integer)必須
Windowを識別するID
命令 (#ctrlwin必須
CLOSE
終了
CLOSE2
終了(QUIT)
ACTIVATE
アクティブ
HIDE
非表示
SHOW
表示
MIN
アイコン化
MAX
最大化
NORMAL
サイズ戻す
TOPMOST
最前面に固定
NOTOPMOST
最前面固定を解除
TOPNOACTV
最前面にするがアクティブ化はしない
戻り値

CLOSEとCLOSE2の違い

CLOSEは変更箇所があれば保存するかどうかの確認メッセージを表示するのに対し、CLOSE2は確認メッセージを表示せず強制的に終了します。

UWSC
CTRLWIN(ID, CLOSE)
CTRLWIN(ID, CLOSE2)

指定したIEオブジェクトを含むウィンドウ(すべてのタブ)を閉じる

Internet Explorerのウィンドウを閉じます。IE.Quitは指定したInternetExplorerオブジェクトしか閉じませんが、CTRLWINを使うとIEオブジェクトを含むウィンドウを閉じることができます。

UWSC
CTRLWIN(HNDTOID(IE.hwnd), CLOSE)

プログラム実行例

メモ帳の右クリックメニューを表示させる

UWSC
DIM ID = EXEC("notepad")
CTRLWIN(ID, ACTIVATE)

KBD(VK_APPS, CLICK, 1000)
解説

電卓を操作し計算をする

電卓を操作します。

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

CLKITEM(ID, "3", CLK_BTN)
CLKITEM(ID, "小数点", CLK_BTN)
CLKITEM(ID, "6", CLK_BTN)
CLKITEM(ID, "プラス", CLK_BTN)
CLKITEM(ID, "5", CLK_BTN)
CLKITEM(ID, "小数点", CLK_BTN)
CLKITEM(ID, "8", CLK_BTN)
CLKITEM(ID, "等号", CLK_BTN)

// CTRLWIN(ID, CLOSE)
使用関数
解説

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

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

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

UWSCを起動したときのウィンドウの座標をマウス位置の座標に書き換える

UWSC
CTRLWIN(GETID("UWSC Pro"), CLOSE)

DIM WshShell = CREATEOLEOBJ("WScript.Shell")
DIM username = WshShell.ExpandEnvironmentStrings("%USERNAME%")

SELECT TRUE
	CASE KINDOFOS() >= 20
		path = "C:\Users\" + username + "\AppData\Roaming\UWSC\UWSC.INI"
	CASE KINDOFOS() = 13
		path = "C:\Documents and Settings\" + username + "\Application Data\UWSC\UWSC.INI"
	DEFAULT
		MSGBOX("UWSC.INIのパスを特定できませんでした。")
		EXIT
SELEND

PRINT WRITEINI("SET", "Position", G_MOUSE_X + "," + G_MOUSE_Y, path)

//////////////////////////////////////////////////
// 【引数】
//   section : セクション 
//   key : キー(Delete関数は省略可) 
//   value : 値 
//   path : INIファイルのパス 
//   default : セクションとキーが存在しなかった場合に返す値 
// 【戻り値】
//   
//////////////////////////////////////////////////
MODULE INI
	DEF_DLL GetPrivateProfileStringW(wstring,wstring,wstring,var pwchar,dword,wstring):dword:kernel32
	DEF_DLL WritePrivateProfileStringW(wstring,wstring,wstring,wstring):bool:kernel32
	FUNCTION Read(section = NULL, key = NULL, path = NULL, default = EMPTY)
		DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
		IFB path = NULL THEN
			path = FSO.GetAbsolutePathName(FSO.GetBaseName(GET_UWSC_NAME) + ".INI")
		ELSE
			path = FSO.GetAbsolutePathName(path)
		ENDIF
		DIM n = 1024
		DIM buffer = FORMAT(CHR(0), n)
		IFB GetPrivateProfileStringW(section, key, default, buffer, n, path) = 0 THEN
			RESULT = default
		ELSE
			RESULT = SLICE(SPLIT(buffer, CHR(0), TRUE))
			IF section <> NULL AND key <> NULL THEN RESULT = RESULT[0]
		ENDIF
	FEND
	FUNCTION Write(section, key, value, path = NULL)
		DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
		IFB path = NULL THEN
			path = FSO.GetAbsolutePathName(FSO.GetBaseName(GET_UWSC_NAME) + ".INI")
		ELSE
			path = FSO.GetAbsolutePathName(path)
		ENDIF
		RESULT = WritePrivateProfileStringW(section, key, value, path)
	FEND
	PROCEDURE Delete(section, key = NULL, path = NULL)
		DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
		IFB path = NULL THEN
			path = FSO.GetAbsolutePathName(FSO.GetBaseName(GET_UWSC_NAME) + ".INI")
		ELSE
			path = FSO.GetAbsolutePathName(path)
		ENDIF
		PRINT WritePrivateProfileStringW(section, key, NULL, path)
	FEND
	FUNCTION escape(value)
		DIM esc = ";#=:"
		FOR i = 1 TO LENGTH(esc)
			DIM s = COPY(esc, i, 1)
			value = REPLACE(value, s, "\" + s)
		NEXT
		RESULT = value
	FEND
	FUNCTION unescape(value)
		DIM esc = ";#=:"
		FOR i = 1 TO LENGTH(esc)
			DIM s = COPY(esc, i, 1)
			value = REPLACE(value, "\" + s, s)
		NEXT
		RESULT = value
	FEND
ENDMODULE
解説

ペイントを起動

UWSC
DIM ID = EXEC("mspaint")
// 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
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
DIM ID = EXEC("notepad")

CTRLWIN(ID, ACTIVATE)

SCKEY(ID, VK_SHIFT, VK_T)
SCKEY(ID, VK_H, VK_I, VK_S, VK_SPACE, VK_I, VK_S, VK_SPACE, VK_A, VK_SPACE, VK_P, VK_E, VK_N, VK_OEM_PERIOD)
結果
プレーンテキスト
This is a pen.
使用関数

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

メモ帳を幅400、高さ300で画面中央に表示

UWSC
DIM w = 400
DIM h = 300
DIM sw = G_SCREEN_W
DIM sh = G_SCREEN_H
DIM ID = EXEC("notepad", FALSE, (sw - w) / 2, (sh - h) / 2, w, h)

//CTRLWIN(ID, CLOSE2)
使用関数

音声認識でアプリを操作

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 = EXEC("mspaint")

SETSLIDER(ID, 0, 0)
PRINT GETSTR(ID, 2, STR_STATIC)

REPEAT
	CLKITEM(ID, "拡大", CLK_BTN)
	PRINT GETSTR(ID, 2, STR_STATIC)
UNTIL GETSLIDER(ID, 0, SLD_POS) = 100

CTRLWIN(ID, CLOSE2)
結果
プレーンテキスト
12.50%
25%
50%
100%
200%
300%
400%
500%
600%
700%
800%
解説

関連記事

ACW関数 (スクリプト関数)
指定したIDのウィンドウの位置・サイズを変更します。IDのみを指定した場合、そのウィンドウをアクティブにします。
GETALLWIN関数 (スクリプト関数)
全ウィンドウのIDを取得します。
Shell.CascadeWindows メソッド
デスクトップ上のすべてのウィンドウをカスケードします。この方法は、タスクバーを右クリックして「重ねて表示」を選択するのと同じ効果があります。
Shell.TileHorizontally メソッド
すべてのウィンドウを上下に並べて表示します。
CLKITEM関数 (スクリプト関数)
指定したIDのウィンドウのアイテムをクリックします。アイテムに指定できるものにはボタン・チェックボックス・ラジオボタン・リストボックス・コンボボックス・タブコントロール・メニュー・ツリービュー・リストビュー・ツールバー・リンクがあります。
GETID関数 (スクリプト関数)
指定したウィンドウのIDを取得します。第一引数に取得したいウィンドウのタイトル(一部でも可)を指定します。UWSCでウィンドウを操作するのによく使う関数です。
GETITEM関数 (スクリプト関数)
指定したIDのウィンドウのキャプション文字やリストなどを取得します。取得した情報は配列変数のALL_ITEM_LIST[ ]に格納されます。戻値は取得した数でInteger型です。
HNDTOID関数 (スクリプト関数)
引数に指定したハンドル値をIDに変換して返します。IDをハンドル値に変換するにはIDTOHND関数を使います。
IDTOHND関数 (スクリプト関数)
引数に指定したIDをハンドル値に変換して返します。ハンドル値をIDに変換するにはHNDTOID関数を使います。
MOUSEORG関数 (スクリプト関数)
マウス座標を相対座標にする、 またはマウスとキー情報を直接ウィンドウへ送ります。