EXECエグゼック関数

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

Contents

アプリを起動します。第二引数(同期フラグ)にTRUEを指定した場合は呼び出したアプリが終了するまで処理を待機し、ウィンドウIDの代わりに終了コードを受け取ります。 終了コード は呼び出された側のUWSファイルのEXITEXIT文から受け取ることができます。

構文
  1. 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を出力します。起動するアプリのパスを指定します。

UWSC
PRINT EXEC("C:\Program Files (x86)\UWSC\UWSC.exe")
結果
プレーンテキスト
1

notepad.exeを起動します。パスが通っているアプリであればファイル名だけでも起動することができます。

UWSC
EXEC("notepad.exe")

第一引数に指定できるのはexe名のみなので、拡張子(.exe)は記述しなくても問題ありません。

UWSC
EXEC("notepad")

メモ帳を(x, y) = (0, 0)の位置で起動します。

UWSC
EXEC("notepad", FALSE, 0, 0)

メモ帳を(x, y) = (0, 0)の位置、幅600、高さ400で起動します。

UWSC
EXEC("notepad", FALSE, 0, 0, 600, 400)

コマンドライン引数

コマンドライン引数を渡すにはEXEC("exe名 引数1 [引数2] …")のように記述します。

大抵の場合、exe名に指定されたアプリで引数1のファイルが開かれます。

以下はメモ帳でsample.txtを開きます。

sample.txtは実行するUWSファイルと同じディレクトリにあります。

UWSC
EXEC("notepad sample.txt")

ペイントでimage.pngを開く場合は以下のように記述します。

UWSC
EXEC("mspaint image.png")

exe名や引数にスペースが含まれる場合はその値を<#DBL>で囲みます。

UWSC
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]引数1PARAM_STR[1]引数2のようにアクセスできます。

以下はreadfile.uwssample.txtを引数として渡します。

UWSC
PRINT EXEC("UWSC readfile.uws sample.txt", TRUE)

呼び出された側はPARAM_STRで引数にアクセスでき、PARAM_STR[0]にはsample.txtが代入されています。

EXEC関数sample.txtを開くことができたらメッセージボックスで内容を表示し、 終了コード として0を、ファイルが存在しないなど開くことができなかった場合は1EXEC関数の戻り値として返します。

readfile.uws
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名として指定できます。

タスクマネージャーは[スタート]を右クリックし、表示されたメニューから[タスク マネージャー]をクリックで起動できます。

.png 右クリックメニュー.png EXCEL.EXEのプロパティ.png

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 ワードパッド

プログラム実行例

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

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

KBD(VK_APPS, CLICK, 1000)
解説

パソコンの音量を上げる

パソコンの音量を上げます。Windows2000以降のOSの場合は仮想キーの操作で音量を上げ、Windows 2000より前のOSの場合はボリューム調整ツールを操作することで音量を上げます。

UWSC
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の場合はボリューム調整ツールを操作することで音量を下げます。

UWSC
IFB KINDOFOS() >= 12
	KBD(VK_VOLUME_DOWN)
ELSE
	ID = EXEC("SNDVOL32.exe /t")
	SETSLIDER(ID, GETSLIDER(ID, 1) + 10)
ENDIF
解説

電卓を操作し計算をする

電卓を操作します。

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
ACW(EXEC("notepad"))
使用関数

メモ帳のメニューバーを取得

メモ帳のメニューバーにあるすべてのメニュー項目を取得します。

メニュー項目をクリックするには[createLink url="/script/function/clkitem/"]を使います。

UWSC
DIM ID = EXEC("notepad")

FOR item IN GETITEM(ID, ITM_MENU)
	PRINT item
NEXT

CTRLWIN(ID, CLOSE)
結果
プレーンテキスト
ファイル\新規
ファイル\新しいウィンドウ
ファイル\開く
ファイル\上書き保存
ファイル\名前を付けて保存
ファイル\ページ設定
ファイル\印刷
ファイル\メモ帳の終了
編集\元に戻す
編集\切り取り
編集\コピー
編集\貼り付け
編集\削除
編集\Bing で検索
編集\検索
編集\次を検索
編集\前を検索
編集\置換
編集\行へ移動
編集\すべて選択
編集\日付と時刻
書式\右端で折り返す
書式\フォント
表示\ズーム\拡大
表示\ズーム\縮小
表示\ズーム\既定の倍率に戻す
表示\ステータス バー
ヘルプ\ヘルプの表示
ヘルプ\フィードバックの送信
ヘルプ\バージョン情報
解説

ペイントを起動

UWSC
DIM ID = EXEC("mspaint")
// CTRLWIN(ID, CLOSE)
使用関数
解説

電卓(ストアアプリ)を起動

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

// CTRLWIN(ID, CLOSE)
解説

メモ帳に本文を入力し[名前を付けて保存]ダイアログボックスを開いて保存する

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

既定ブラウザで指定したURLを開く

UWSC
EXEC("cmd /c start=http://www.google.com")
使用関数

ペイントを起動しウィンドウの位置とサイズを設定

UWSC
DIM ID = EXEC("mspaint")
ACW(ID, 0, 0, G_SCREEN_W / 2, G_SCREEN_H / 2)
使用関数
解説

仮想キーで文章を入力

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

メッセージボックスで処理分岐

UWSC
IF MSGBOX("メモ帳を起動しますか?", BTN_YES OR BTN_NO) = BTN_YES THEN EXEC("notepad")
使用関数

メモ帳を幅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)
使用関数
解説

テキストファイルをメモ帳にドロップします

C:\Program Files (x86)\UWSC\Readme.txtをメモ帳にドラッグ&ドロップして開きます。

UWSC
DIM ID = EXEC("notepad")
DROPFILE(ID, "C:\Program Files (x86)\UWSC\", "Readme.txt")
使用関数

画像ファイルをペイントにドロップします

D:\Desktop\sample.pngをペイントにドラッグ&ドロップして開きます。

UWSC
DIM ID = EXEC("mspaint")
DROPFILE(ID, "D:\Desktop\", "sample.png")
使用関数

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

メモ帳の指定したメニュー項目を無効化する

[ファイル]のメモ帳の終了をグレー表示でクリックできないようにする。

UWSC
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を使ってメモ帳にメッセージを送信する

UWSC
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, "送信するメッセージ")
解説

メモ帳のステータスバー情報を取得

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

ペイントを開いてズームを最小値に設定する

UWSC
DIM ID = EXEC("mspaint")

PRINT GETSLIDER(ID, SLD_POS)
PRINT SETSLIDER(ID, 0)

ペイントで設定できるズーム倍率を取得

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%
解説

ウィンドウのサイズ位置・サイズを設定

UWSC
DEF_DLL MoveWindow(hwnd, long, long, long, long, long): long: user32

DIM ID = EXEC("mspaint")

MoveWindow(IDTOHND(ID), 0, 50, 800, 400, FALSE)

ウィンドウのタイトルバーを点滅させる

UWSC
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

メモ帳のマウス入力とキーボード入力を一時的に無効化する

UWSC
DEF_DLL EnableWindow(hwnd, bool): long: user32.dll

DIM hwnd = IDTOHND(EXEC("notepad"))

PRINT EnableWindow(hwnd, FALSE)
SLEEP(3.000)

PRINT EnableWindow(hwnd, TRUE)
使用関数

参考文献

  1. ファイル名を指定して実行ダイアログから起動するプログラム一覧:Windows(ウィンドウズ)の使い方

関連記事

ACW関数 (スクリプト関数)
指定したIDのウィンドウの位置・サイズを変更します。IDのみを指定した場合、そのウィンドウをアクティブにします。
MONITOR関数 (スクリプト関数)
MONITOR関数は、指定したモニタ番号・取得項目の情報を取得します。取得項目には、X座標・Y座標・幅・高さ・モニター名があります。引数なしの場合はモニターの数を返します。
STATUS関数 (スクリプト関数)
ウィンドウの各種状態を取得します。タイトル・クラス名・X座標・Y座標・幅・高さなどを取得することができます。
getBitmap関数 (自作関数)
引数に指定したビットマップ画像のサイズ(px)・幅(px)・高さ(px)・ビットの深さ(bpp)を配列で返します。
PEEKCOLOR関数 (スクリプト関数)
PEEKCOLOR関数は、指定座標の色を取得する関数です。