目次
- 1 使い方
- 2 起動したいプログラム(exe)のパスの探し方
- 3 EXECで使用できるコマンド
- 4 プログラム実行例
- 4.1 メモ帳の右クリックメニューを表示させる
- 4.2 パソコンの音量を上げる
- 4.3 パソコンの音量を下げる
- 4.4 電卓を操作し計算をする
- 4.5 メモ帳を起動し、アクティブにする
- 4.6 メモ帳のメニューバーを取得
- 4.7 ペイントを起動
- 4.8 電卓(ストアアプリ)を起動
- 4.9 メモ帳に本文を入力し[名前を付けて保存]ダイアログボックスを開いて保存する
- 4.10 既定ブラウザで指定したURLを開く
- 4.11 ペイントを起動しウィンドウの位置とサイズを設定
- 4.12 仮想キーで文章を入力
- 4.13 メッセージボックスで処理分岐
- 4.14 メモ帳を幅400、高さ300で画面中央に表示
- 4.15 音声認識でアプリを操作
- 4.16 テキストファイルをメモ帳にドロップします
- 4.17 画像ファイルをペイントにドロップします
- 4.18 ExcelファイルとCSVファイルをExcelにドロップして開く
- 4.19 メモ帳の指定したメニュー項目を無効化する
- 4.20 DLLを使ってメモ帳にメッセージを送信する
- 4.21 メモ帳のステータスバー情報を取得
- 4.22 ペイントを開いてズームを最小値に設定する
- 4.23 ペイントで設定できるズーム倍率を取得
- 4.24 ウィンドウのサイズ位置・サイズを設定
- 4.25 ウィンドウのタイトルバーを点滅させる
- 4.26 メモ帳のマウス入力とキーボード入力を一時的に無効化する
- 5 参考文献
アプリを起動します。第二引数(同期フラグ)にTRUEを指定した場合は呼び出したアプリが終了するまで処理を待機し、ウィンドウIDの代わりに終了コードを受け取ります。 終了コード は呼び出された側のUWSファイルのEXITEXIT文から受け取ることができます。
- 構文
- Integer = EXEC( exe名, 同期フラグ, X, Y, 幅, 高さ )
- 引数
- exe名 (String)必須
- 起動したいアプリ名
- 同期フラグ (Boolean = False)省略可
- FALSE
- 待たない(デフォルト)
- TRUE
- そのアプリが終了するまで待つ
- X (Integer)省略可
- Window位置X
- Y (Integer)省略可
- Window位置Y
- 幅 (Integer)省略可
- Window幅
- 高さ (Integer)省略可
- Window高さ
- 戻り値
- そのWindowを識別するIDを返す
終了待ちが指定された場合は、そのアプリの終了コードを返す
注:ストアアプリ、Explorer等の別プロセスを呼ぶものは、期待どおりに戻値を返さない事がある
使い方
アプリのパスを指定
C:\Program Files (x86)\UWSC\UWSC.exeを起動しウィンドウIDを出力します。起動するアプリのパスを指定します。
PRINT EXEC("C:\Program Files (x86)\UWSC\UWSC.exe")
- 結果
1
notepad.exeを起動します。パスが通っているアプリであればファイル名だけでも起動することができます。
EXEC("notepad.exe")
第一引数に指定できるのはexe名のみなので、拡張子(.exe)は記述しなくても問題ありません。
EXEC("notepad")
メモ帳を(x, y) = (0, 0)の位置で起動します。
EXEC("notepad", FALSE, 0, 0)
メモ帳を(x, y) = (0, 0)の位置、幅600、高さ400で起動します。
EXEC("notepad", FALSE, 0, 0, 600, 400)
コマンドライン引数
コマンドライン引数を渡すにはEXEC("exe名 引数1 [引数2] …")のように記述します。
大抵の場合、exe名に指定されたアプリで引数1のファイルが開かれます。
以下はメモ帳でsample.txtを開きます。
sample.txtは実行するUWSファイルと同じディレクトリにあります。
EXEC("notepad sample.txt")
ペイントでimage.pngを開く場合は以下のように記述します。
EXEC("mspaint image.png")
exe名や引数にスペースが含まれる場合はその値を<#DBL>で囲みます。
PRINT EXEC("<#DBL>C:\Program Files (x86)\UWSC\UWSC.exe<#DBL> D:\Desktop\sample.uws")
UWSCのファイルを開く
UWSファイルを呼び出すにはEXEC("UWSC ファイル名.uws [引数1] [引数2] …")の形式で指定します。呼び出された側はPARAM_STR[0]で引数1、PARAM_STR[1]で引数2のようにアクセスできます。
以下はreadfile.uwsにsample.txtを引数として渡します。
PRINT EXEC("UWSC readfile.uws sample.txt", TRUE)
呼び出された側はPARAM_STRで引数にアクセスでき、PARAM_STR[0]にはsample.txtが代入されています。
EXEC関数でsample.txtを開くことができたらメッセージボックスで内容を表示し、 終了コード として0を、ファイルが存在しないなど開くことができなかった場合は1をEXEC関数の戻り値として返します。
DIM FID = FOPEN(PARAM_STR[0], F_READ)
IFB FID <> -1 THEN
MSGBOX(FGET(FID, F_ALLTEXT))
FCLOSE(FID)
EXITEXIT 0
ELSE
EXITEXIT 1
ENDIF
起動したいプログラム(exe)のパスの探し方
アプリを起動している状態で、タスクマネージャーを起動。[プロセス]からパスを探したいアプリを選択・右クリックし[プロパティ]を開くと、[セキュリティ]タブのオブジェクト名に記載されているパスをexe名として指定できます。
タスクマネージャーは[スタート]を右クリックし、表示されたメニューから[タスク マネージャー]をクリックで起動できます。
EXECで使用できるコマンド
コマンド | アプリケーション |
---|---|
acrord32 | Adobe Reader |
calc | 電卓 |
charmap | 文字コード表 |
cmd | コマンドプロンプト |
control | コントロールパネル |
dxdiag | DirectX診断ツール |
eudcedit | 外字エディタ |
eventvwr | イベントビューア |
excel | Microsoft Excel |
explorer | エクスプローラ |
magnify | 拡大鏡 |
mmc | Microsoft 管理コンソール |
msconfig | システム設定ユーティリティ |
mspaint | ペイント |
mstsc | リモート デスクトップ接続 |
notepad | メモ帳 |
nslookup | NSLOOKUP |
outlook | Outlook |
pbrush | ペイント |
powerpnt | Microsoft PowerPoint |
regedit | レジストリ エディター |
regedt | Registry Editor Utility |
sndvol | 音量ミキサー |
taskmgr | タスクマネージャー |
winver | Windows のバージョン情報 |
winword | Microsoft Word |
wordpad | ワードパッド |
write | ワードパッド |
プログラム実行例
メモ帳の右クリックメニューを表示させる
DIM ID = EXEC("notepad")
CTRLWIN(ID, ACTIVATE)
KBD(VK_APPS, CLICK, 1000)
パソコンの音量を上げる
パソコンの音量を上げます。Windows2000以降のOSの場合は仮想キーの操作で音量を上げ、Windows 2000より前のOSの場合はボリューム調整ツールを操作することで音量を上げます。
IFB KINDOFOS() >= 12 THEN
KBD(VK_VOLUME_UP)
ELSE
ID = EXEC("SNDVOL32.exe /t")
SETSLIDER(ID, GETSLIDER(ID, 1) - 10)
ENDIF
パソコンの音量を下げる
パソコンの音量を下げます。Windows2000以降のOSの場合は仮想キーの操作で音量を下げ、Windows 2000より前のOSの場合はボリューム調整ツールを操作することで音量を下げます。
IFB KINDOFOS() >= 12
KBD(VK_VOLUME_DOWN)
ELSE
ID = EXEC("SNDVOL32.exe /t")
SETSLIDER(ID, GETSLIDER(ID, 1) + 10)
ENDIF
電卓を操作し計算をする
電卓を操作します。
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)
メモ帳を起動し、アクティブにする
ACW(EXEC("notepad"))
メモ帳のメニューバーを取得
メモ帳のメニューバーにあるすべてのメニュー項目を取得します。
メニュー項目をクリックするには[createLink url="/script/function/clkitem/"]を使います。
DIM ID = EXEC("notepad")
FOR item IN GETITEM(ID, ITM_MENU)
PRINT item
NEXT
CTRLWIN(ID, CLOSE)
ファイル\新規
ファイル\新しいウィンドウ
ファイル\開く
ファイル\上書き保存
ファイル\名前を付けて保存
ファイル\ページ設定
ファイル\印刷
ファイル\メモ帳の終了
編集\元に戻す
編集\切り取り
編集\コピー
編集\貼り付け
編集\削除
編集\Bing で検索
編集\検索
編集\次を検索
編集\前を検索
編集\置換
編集\行へ移動
編集\すべて選択
編集\日付と時刻
書式\右端で折り返す
書式\フォント
表示\ズーム\拡大
表示\ズーム\縮小
表示\ズーム\既定の倍率に戻す
表示\ステータス バー
ヘルプ\ヘルプの表示
ヘルプ\フィードバックの送信
ヘルプ\バージョン情報
ペイントを起動
DIM ID = EXEC("mspaint")
// CTRLWIN(ID, CLOSE)
電卓(ストアアプリ)を起動
EXEC("calc")
DIM ID = GETID("電卓")
// CTRLWIN(ID, CLOSE)
メモ帳に本文を入力し[名前を付けて保存]ダイアログボックスを開いて保存する
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
既定ブラウザで指定したURLを開く
EXEC("cmd /c start=http://www.google.com")
ペイントを起動しウィンドウの位置とサイズを設定
DIM ID = EXEC("mspaint")
ACW(ID, 0, 0, G_SCREEN_W / 2, G_SCREEN_H / 2)
仮想キーで文章を入力
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.
メッセージボックスで処理分岐
IF MSGBOX("メモ帳を起動しますか?", BTN_YES OR BTN_NO) = BTN_YES THEN EXEC("notepad")
メモ帳を幅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)
テキストファイルをメモ帳にドロップします
C:\Program Files (x86)\UWSC\Readme.txtをメモ帳にドラッグ&ドロップして開きます。
DIM ID = EXEC("notepad")
DROPFILE(ID, "C:\Program Files (x86)\UWSC\", "Readme.txt")
画像ファイルをペイントにドロップします
D:\Desktop\sample.pngをペイントにドラッグ&ドロップして開きます。
DIM ID = EXEC("mspaint")
DROPFILE(ID, "D:\Desktop\", "sample.png")
ExcelファイルとCSVファイルをExcelにドロップして開く
CREATEOLEOBJで起動したExcelにファイルをドロップするとなぜか落ちるから、EXECで起動。
EXEC("C:\Program Files\Microsoft Office\Office15\EXCEL.EXE")
DIM ID = GETID("Excel", "XLMAIN")
DROPFILE(ID, "D:\Desktop\", "sample.xlsx", "sample.csv")
メモ帳の指定したメニュー項目を無効化する
[ファイル]のメモ帳の終了をグレー表示でクリックできないようにする。
DEF_DLL GetSubMenu(HWND, int): HWND: user32.dll
DEF_DLL EnableMenuItem(HWND, UINT, UINT): DWORD: user32.dll
CONST MF_BYPOSITION = $400
CONST MF_GRAYED = $1
DIM ID = EXEC("notepad")
DIM hwnd = GetSubMenu(GETCTLHND(ID, GET_MENU_HND), 0)
PRINT EnableMenuItem(hwnd, 9, MF_BYPOSITION + MF_GRAYED)
他の項目は以下の表を参照。
値は、(GetSubMenu第ニ引数)と(EnableMenuItem第二引数)を表しています。
例えばフォントの場合、2-1なので以下のように指定します。
[syntaxHighlight]GetSubMenu(GETCTLHND(ID, GET_MENU_HND), 2) EnableMenuItem(hwnd, 1, MF_BYPOSITION + MF_GRAYED)[/syntaxHighlight]値 | 項目 |
---|---|
0-0 | 新規 |
0-1 | 新しいウィンドウ |
0-2 | 開く |
0-3 | 上書き保存 |
0-4 | 名前を付けて保存 |
0-6 | ページ設定 |
0-7 | 印刷 |
0-9 | メモ帳の終了 |
値 | 項目 |
---|---|
1-11 | 置換 |
1-14 | すべて選択 |
1-15 | 日付と時刻 |
値 | 項目 |
---|---|
2-0 | 右端で折り返す |
2-1 | フォント |
値 | 項目 |
---|---|
3-0 | ズーム |
3-1 | ステータスバー |
値 | 項目 |
---|---|
4-0 | ヘルプの表示 |
4-1 | フィードバックの送信 |
4-3 | バージョン情報 |
DLLを使ってメモ帳にメッセージを送信する
DEF_DLL FindWindowA(string, string): long: user32.dll
DEF_DLL FindWindowExA(long, long, string, string): long: user32.dll
DEF_DLL SendMessageA(long, long, long, string): long: user32.dll
EXEC("notepad")
hNotePad = FindWindowA("Notepad", NULL)
hEdit = FindWindowExA(hNotePad, 0, "Edit", NULL)
PRINT SendMessageA(hEdit, 12, 0, "送信するメッセージ")
メモ帳のステータスバー情報を取得
DIM ID = EXEC("notepad")
FOR i = 0 TO 5
PRINT i + "<#TAB>" + GETSTR(ID, i, STR_STATUS)
NEXT
0
1
2 1 行、1 列
3 100%
4 Windows (CRLF)
5 UTF-8
ペイントを開いてズームを最小値に設定する
DIM ID = EXEC("mspaint")
PRINT GETSLIDER(ID, SLD_POS)
PRINT SETSLIDER(ID, 0)
ペイントで設定できるズーム倍率を取得
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%
ウィンドウのサイズ位置・サイズを設定
DEF_DLL MoveWindow(hwnd, long, long, long, long, long): long: user32
DIM ID = EXEC("mspaint")
MoveWindow(IDTOHND(ID), 0, 50, 800, 400, FALSE)
ウィンドウのタイトルバーを点滅させる
DEF_DLL FlashWindow(hwnd, long): long: user32.dll
DIM hwnd = IDTOHND(EXEC("notepad"))
FOR i = 1 TO 3
PRINT FlashWindow(hwnd , TRUE)
SLEEP(3.000)
NEXT
メモ帳のマウス入力とキーボード入力を一時的に無効化する
DEF_DLL EnableWindow(hwnd, bool): long: user32.dll
DIM hwnd = IDTOHND(EXEC("notepad"))
PRINT EnableWindow(hwnd, FALSE)
SLEEP(3.000)
PRINT EnableWindow(hwnd, TRUE)
参考文献
関連記事
- ACW関数 (スクリプト関数)
- 指定したIDのウィンドウの位置・サイズを変更します。IDのみを指定した場合、そのウィンドウをアクティブにします。
- MONITOR関数 (スクリプト関数)
- MONITOR関数は、指定したモニタ番号・取得項目の情報を取得します。取得項目には、X座標・Y座標・幅・高さ・モニター名があります。引数なしの場合はモニターの数を返します。
- STATUS関数 (スクリプト関数)
- ウィンドウの各種状態を取得します。タイトル・クラス名・X座標・Y座標・幅・高さなどを取得することができます。
- getBitmap関数 (自作関数)
- 引数に指定したビットマップ画像のサイズ・幅・高さ・ビットの深さを配列で返します。
- PEEKCOLOR関数 (スクリプト関数)
- PEEKCOLOR関数は、指定座標の色を取得する関数です。