# exec

アプリケーションを起動する。

    exec <command line> [<show> [<wait> [<current directory>]]]

## 解説

コマンドライン文字列 <command line> に従い、アプリケーションを起動する。

## パラメータ

文字列 <show> (オプション デフォルト="show")
  以下の文字列を指定することができる。
  - hide
  - minimize
  - maximize
  - show
整数値 <wait> (オプション デフォルト=0) (バージョン 4.63以降)
  1 の場合は、起動したアプリケーションが終了するまで待つ。アプリケーションの終了コードが result システム変数に格納される。
  1 以外の場合は、アプリケーションを起動してマクロに制御が返る。
文字列 <current directory> (オプション デフォルト="") (バージョン 4.78以降)
  カレントディレクトリを指定することができる。

## 返り値

システム変数 <result>
  バージョン 4.63 から 4.102
    <wait> が 1 の場合のみ、アプリケーションの終了コードが格納される。
  バージョン 4.103 以降
    <wait> が 1 の場合

    値 | 意味
    --- | ---
    -1 | アプリケーションの実行に失敗した。
    -1 以外 | アプリケーションの終了コード

    <wait> が 1 以外の場合

    値 | 意味
    --- | ---
    -1 | アプリケーションの実行に失敗した。
    0 | アプリケーションの実行に成功した。

## 例

    ; 「メモ帳」を起動
    exec 'notepad readme.txt'

    ; 「メモ帳」を最大化表示で起動
    exec 'notepad readme.txt' 'maximize'

    ; 「メモ帳」をカレントディレクトリ指定で起動
    exec 'notepad readme.txt' 'show' 0 'c:\usr'

    ; バッチファイルを起動する
    tmp='cmd /c c:\upload.bat '
    strconcat tmp username1
    strconcat tmp ' '
    strconcat tmp userpass1
    strconcat tmp ' '
    strconcat tmp address
    messagebox tmp 'exec'
    exec tmp

    ; ディレクトリを作る
    getenv "USERPROFILE" userprof
    getdate logdir "log-%Y%m%d"
    sprintf2 cmd 'cmd /c mkdir "%s\My Documents\%s"' userprof logdir
    exec cmd "HIDE"

## 注

64bit Windows 上でマクロを実行している場合、WOW64 に対応したアプリケーションを起動すると思わぬ動作をすることがある。
ttpmacro.exe は 32bit なので、32bit のアプリケーションが起動する。アプリケーションによっては 64bit OS 上で 32bit のプロセスが起動されると、64bit のプロセスを起動し直すことがある。
このため <wait> を指定しても、マクロが起動した 32bit のアプリケーションはすぐに終了してしまうため、意図せず次のマクロコマンドに進んでしまうことがある。
この現象を回避するには、以下のように sysnative エイリアスを用いてネイティブのシステムディレクトリのアプリケーションを起動する。

    ; 失敗する
    exec 'mstsc /v 192.0.2.0 /w 1024 /h 768 /admin' 'show' 1

    ; 成功する
    exec 'C:\windows\sysnative\mstsc /v 192.0.2.0 /w 1024 /h 768 /admin' 'show' 1