本ページには広告が含まれています。
ウィンドウの状態を操作します。ウィンドウを終了、アクティブ化、表示・非表示、最大化・最小化などができます。第一引数のIDはGETID関数で取得します。
- 構文
- void = CTRLWIN( ID, 命令 )
- 引数
- ID (Integer)必須
- Windowを識別するID
- 命令 (#ctrlwin)必須
- CLOSE
- 終了
- CLOSE2
- 終了(QUIT)
- ACTIVATE
- アクティブ
- HIDE
- 非表示
- SHOW
- 表示
- MIN
- アイコン化
- MAX
- 最大化
- NORMAL
- サイズ戻す
- TOPMOST
- 最前面に固定
- NOTOPMOST
- 最前面固定を解除
- TOPNOACTV
- 最前面にするがアクティブ化はしない
- 戻り値
CLOSEとCLOSE2の違い
CLOSEは変更箇所があれば保存するかどうかの確認メッセージを表示するのに対し、CLOSE2は確認メッセージを表示せず強制的に終了します。
以下はメモ帳を開きテキストと入力してから終了します。内容に変更があるので保存するかどうかのダイアログボックスが表示されます。
DIM ID = EXEC("notepad")
SENDSTR(ID, "テキスト")
SLEEP(1.000)
CTRLWIN(ID, CLOSE)以下も同様にメモ帳にテキストを入力してから終了します。こちらは内容に変更があってもダイアログボックスは表示されずに強制終了します。
DIM ID = EXEC("notepad")
SENDSTR(ID, "テキスト")
SLEEP(1.000)
CTRLWIN(ID, CLOSE2)指定したIEオブジェクトを含むウィンドウ(すべてのタブ)を閉じる
Internet Explorerのウィンドウを閉じます。IE.Quitは指定したInternetExplorerオブジェクトしか閉じませんが、CTRLWINを使うとIEオブジェクトを含むウィンドウを閉じることができます。
CTRLWIN(HNDTOID(IE.hwnd), CLOSE)プログラム実行例
メモ帳の右クリックメニューを表示させる
DIM ID = EXEC("notepad")
CTRLWIN(ID, ACTIVATE)
KBD(VK_APPS, CLICK, 1000)使用関数
電卓を操作し計算をする
電卓を操作します。
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を起動したときのウィンドウの座標をマウス位置の座標に書き換える
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使用関数
ペイントを起動
DIM ID = EXEC("mspaint")
// CTRLWIN(ID, CLOSE)使用関数
電卓(ストアアプリ)を起動
EXEC("calc")
DIM ID = GETID("電卓")
// CTRLWIN(ID, CLOSE)使用関数
PowerPointを起動する(Excel)
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)
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使用関数
メモ帳に本文を入力し[名前を付けて保存]ダイアログボックスを開いて保存する
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使用関数
仮想キーで文章を入力
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)
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で画面中央に表示
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)使用関数
音声認識でアプリを操作
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)使用関数
ペイントで設定できるズーム倍率を取得
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関数 (スクリプト関数)
- ウィンドウの状態を変更、またはアクティブにします。
- GETALLWIN関数 (スクリプト関数)
- 全ウィンドウのIDを取得します。
- Shell.CascadeWindows メソッド
- デスクトップ上のすべてのウィンドウをカスケードします。この方法は、タスクバーを右クリックして「重ねて表示」を選択するのと同じ効果があります。
- Shell.TileHorizontally メソッド
- すべてのウィンドウを上下に並べて表示します。
- CLKITEM関数 (スクリプト関数)
- アイテムをクリックします。
- GETID関数 (スクリプト関数)
- 指定したウィンドウのIDを取得します。第一引数に取得したいウィンドウのタイトル(一部でも可)を指定します。
- GETITEM関数 (スクリプト関数)
- キャプション文字やリスト等をすべて取得します。
- HNDTOID関数 (スクリプト関数)
- ハンドル値をIDに変換します。
- IDTOHND関数 (スクリプト関数)
- IDをハンドル値に変換します。
- MOUSEORG関数 (スクリプト関数)
- マウス座標を相対座標にする、またはマウスとキー情報を直接ウィンドウへ送ります。
