EXEC

構文
  1. Integer = EXEC( exe名, [同期フラグ, X, Y, 幅, 高さ] )
引数
exe名
起動したいアプリ名
同期フラグ
FALSE
待たない(デフォルト)
TRUE
そのアプリが終了するまで待つ
X
Window位置X
Y
Window位置Y
Window幅
高さ
Window高さ
戻値
そのWindowを識別するIDを返す
終了待ちが指定された場合は、そのアプリの終了コードを返す
注:ストアアプリ、Explorer等の別プロセスを呼ぶものは、期待どおりに戻値を返さない事がある

起動したいプログラム(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 ワードパッド

プログラム実行例

パソコンの音量を上げる

IFB KINDOFOS() >= 12 THEN
	KBD(VK_VOLUME_UP)
ELSE
	ID = EXEC("SNDVOL32.exe /t")
	SETSLIDER(ID, GETSLIDER(ID, 1) - 10)
ENDIF
  1. KINDOFOS
  2. KBD
  3. EXEC
  4. SETSLIDER
  5. GETSLIDER
解説
  1. 1-6行目
    IFB KINDOFOS() >= 12 THEN
    	KBD(VK_VOLUME_UP)
    ELSE
    	ID = EXEC("SNDVOL32.exe /t")
    	SETSLIDER(ID, GETSLIDER(ID, 1) - 10)
    ENDIF
    OSがWindows2000以降ならば、音量を上げる。Windows2000よりも前ならば、「SNDVOL32.exe /t」でボリュームコントロールの音量機能のみを起動し、スライダーを調整することで音量を上げる。

パソコンの音量を下げる

IFB KINDOFOS() >= 12
	KBD(VK_VOLUME_DOWN)
ELSE
	ID = EXEC("SNDVOL32.exe /t")
	SETSLIDER(ID, GETSLIDER(ID, 1) + 10)
ENDIF
  1. KINDOFOS
  2. KBD
  3. EXEC
  4. SETSLIDER
  5. GETSLIDER

メモ帳のメニューを取得・出力

DIM ID = EXEC("notepad")

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

CTRLWIN(ID, CLOSE)
  1. EXEC
  2. GETITEM
  3. CTRLWIN
結果
ファイル\新規
ファイル\新しいウィンドウ
ファイル\開く
ファイル\上書き保存
ファイル\名前を付けて保存
ファイル\ページ設定
ファイル\印刷
ファイル\メモ帳の終了
編集\元に戻す
編集\切り取り
編集\コピー
編集\貼り付け
編集\削除
編集\Bing で検索
編集\検索
編集\次を検索
編集\前を検索
編集\置換
編集\行へ移動
編集\すべて選択
編集\日付と時刻
書式\右端で折り返す
書式\フォント
表示\ズーム\拡大
表示\ズーム\縮小
表示\ズーム\既定の倍率に戻す
表示\ステータス バー
ヘルプ\ヘルプの表示
ヘルプ\フィードバックの送信
ヘルプ\バージョン情報
解説
  1. 1行目
    DIM ID = EXEC("notepad")
    
    メモ帳を起動し、IDを取得。
  2. 3-5行目
    FOR item IN GETITEM(ID, ITM_MENU)
    	PRINT item
    NEXT
    
    メニューを配列で取得し、出力。
  3. 7行目
    CTRLWIN(ID, CLOSE)
    
    メモ帳を閉じる。

ペイントを起動

DIM ID = EXEC("mspaint")
//CTRLWIN(ID, CLOSE)
  1. EXEC
  2. CTRLWIN
解説
  1. 1行目
    DIM ID = EXEC("mspaint")
    
    ペイントを起動し、IDを取得する。
  2. 2行目
    //CTRLWIN(ID, CLOSE)
    
    ペイントを終了する。

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

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

// CTRLWIN(ID, CLOSE)
  1. EXEC
  2. GETID
  3. CTRLWIN
解説
  1. 1行目
    EXEC("calc")
    
    電卓を起動。
  2. 2行目
    DIM ID = GETID("電卓")
    
    電卓のIDを取得。EXEC関数は起動したときに戻値としてIDを返すが、ストアアプリなど一部のアプリはIDを返してくれないので起動後にGETID関数で取得します。
  3. 4行目
    // CTRLWIN(ID, CLOSE)
    電卓を閉じる。

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

EXEC("cmd /c start=http://www.google.com")
  1. EXEC

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

DIM ID = EXEC("mspaint")
ACW(ID, 0, 0, G_SCREEN_W / 2, G_SCREEN_H / 2)
  1. EXEC
  2. ACW
解説
  1. 1行目
    DIM ID = EXEC("mspaint")
    
    EXEC関数で「ペイント」を起動し、IDを取得。
  2. 2行目
    ACW(ID, 0, 0, G_SCREEN_W / 2, G_SCREEN_H / 2)
    
    ペイントの位置を(x, y) = (0, 0)に、幅を画面幅の半分、高さを画面高の半分に設定する。

仮想キーで文章を入力

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)
  1. EXEC
  2. CTRLWIN
  3. SCKEY
結果
This is a pen.

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

IF MSGBOX("メモ帳を起動しますか?", BTN_YES OR BTN_NO) = BTN_YES THEN EXEC("notepad")
  1. MSGBOX
  2. EXEC

メモ帳を幅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)
  1. EXEC
  2. CTRLWIN

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

「D:\Desktop\sample.txt」をメモ帳にドラッグ&ドロップして開きます。

DIM ID = EXEC("notepad")
DROPFILE(ID, "D:\Desktop\", "sample.txt")
  1. EXEC
  2. DROPFILE

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

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

DIM ID = EXEC("mspaint")
DROPFILE(ID, "D:\Desktop\", "sample.png")
  1. EXEC
  2. DROPFILE

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")
  1. EXEC
  2. GETID
  3. DROPFILE

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

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

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なので以下のように指定します。

GetSubMenu(GETCTLHND(ID, GET_MENU_HND), 2)
EnableMenuItem(hwnd, 1, MF_BYPOSITION + MF_GRAYED)
項目
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 バージョン情報
  1. user32.GetSubMenu
  2. user32.EnableMenuItem
  3. EXEC
  4. GETCTLHND

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, "送信するメッセージ")
  1. user32.FindWindowA
  2. user32.FindWindowExA
  3. user32.SendMessageA
  4. EXEC

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

DIM ID = EXEC(“notepad”)

FOR i = 0 TO 5
	PRINT i + "<#TAB>" + GETSTR(ID, i, STR_STATUS)
NEXT
  1. EXEC
  2. GETSTR
結果
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)
  1. EXEC
  2. GETSLIDER
  3. SETSLIDER

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

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)
  1. EXEC
  2. SETSLIDER
  3. GETSTR
  4. CLKITEM
  5. GETSLIDER
  6. CTRLWIN
結果
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)
  1. user32.MoveWindow
  2. EXEC

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

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
  1. user32.FlashWindow
  2. IDTOHND
  3. EXEC
  4. SLEEP

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

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. user32.EnableWindow
  2. IDTOHND
  3. EXEC