1. 概要
前回、Windows起動時にNode.js(Powershell上)とUnityを起動するバッチファイルを書きましたが、アクティブウィンドウの指定ができなかったためJScriptで書き直してみました。
2. 参考サイト
3. 作業環境
- Windows 10
4. 手順
参考サイト1をベースにします。
JScriptと同じ階層にあるNodeフォルダをカレントディレクトリにします。(複数のPCでコードを共有していたので相対パスにしています。)
Nodeフォルダ内にあるapp.jsをPowershellで起動します。
引数でapp.js
を指定することでPowershellで起動するアプリを指定できます。その際\"
でそれぞれをくくります。
非アクティブにするためWS_NOTACT_NOMAL
とします。WScript.Sleep( 5000 );
で5秒待機します。今回はUnityのtest.exeファイルがデスクトップにあったので、カレントディレクトリをデスクトップに移動します。
sh.Run( "test.exe", WS_ACT_NOMAL );
でexeファイルをアクティブウィンドウで起動します。
// ウインドウスタイル
var WS_NOTVISIVLE = 0; //ウインドウは非表示
var WS_ACT_NOMAL = 1; //ウインドウはアクティブ、サイズは通常(規定値)
var WS_ACT_MIN = 2; //ウインドウはアクティブ、サイズは最小
var WS_ACT_MAX = 3; //ウインドウはアクティブ、サイズは最大
var WS_NOTACT_NOMAL = 4; //ウインドウは非アクティブ、サイズは通常
var WS_ACT_DEF = 5; //ウインドウはアクティブ、サイズは前回終了時と同じ(アプリによって動作は異なる)
var WS_NOTACT_MIN = 7; //ウインドウは非アクティブ、サイズは最小
// Shell関連の操作を提供するオブジェクトを取得
var sh = new ActiveXObject( "WScript.Shell" );
// カレントディレクトリを設定
sh.CurrentDirectory = "../Node";
// PowershellでNode起動(非アクティブ)
sh.Run("\"C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe\" \"node app.js\"", WS_NOTACT_NOMAL );
// 5秒待機
WScript.Sleep( 5000 );
// カレントディレクトリを設定
sh.CurrentDirectory = "../../../../../Desktop";
// Unity起動(アクティブ)
sh.Run( "test.exe", WS_ACT_NOMAL );
// オブジェクトを解放
sh = null;