本ページには広告が含まれています。
目次
- 1 CLOSEとCLOSE2の違い
- 2 指定したIEオブジェクトを含むウィンドウ(すべてのタブ)を閉じる
- 3 プログラム実行例
- 3.1 メモ帳の右クリックメニューを表示させる
- 3.2 電卓を操作し計算をする
- 3.3 コントロールパネルを起動する
- 3.4 UWSCを起動したときのウィンドウの座標をマウス位置の座標に書き換える
- 3.5 ペイントを起動
- 3.6 電卓(ストアアプリ)を起動
- 3.7 PowerPointを起動する(Excel)
- 3.8 Outlookを起動する(Excel)
- 3.9 メモ帳に本文を入力し[名前を付けて保存]ダイアログボックスを開いて保存する
- 3.10 仮想キーで文章を入力
- 3.11 Wordを起動する(Excel)
- 3.12 メモ帳を幅400、高さ300で画面中央に表示
- 3.13 音声認識でアプリを操作
- 3.14 ペイントで設定できるズーム倍率を取得
ウィンドウの状態を操作します。ウィンドウを終了、アクティブ化、表示・非表示、最大化・最小化などができます。第一引数の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は確認メッセージを表示せず強制的に終了します。
CTRLWIN(ID, CLOSE)
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)
使用関数
解説
コントロールパネルを起動する
DIM Shell = CREATEOLEOBJ("Shell.Application")
Shell.ControlPanelItem("control")
SLEEP(3.000)
DIM ID = GETID("コントロール パネル")
//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, "保存", ITM_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関数 (スクリプト関数)
- 指定した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関数 (スクリプト関数)
- マウス座標を相対座標にする、 またはマウスとキー情報を直接ウィンドウへ送ります。