アプリケーション操作
ここでは、JScriptでアプリケーションの起動をする方法について紹介します。 単純に起動させることしか紹介しませんので正直、紹介はするけど覚えてもあまり使うことは思います。 次回以降に紹介するであろうキーボード操作とマウス操作と併用してようやく使えるようなしないような・・・。 キーボード操作とマウス操作で強引にアプリケーションを操作するのはオレの中ではあまりお勧めできないものです。 何故なら、実行するパソコンの性能が悪すぎたら処理が間に合わなくて、うまくいかないこともあるんですよね〜。
アプリケーションの起動
アプリケーションの起動させるには以下の関数を使用することで実現できます。
関数名 object.Run( cmd, [WinStyle], [WaitOnReturn] ); 関数説明 新しいプロセス内でプログラムを実行します。 引数 object・・・・・・WshShellオブジェクト cmd ・・・・・・・実行するコマンドラインを示す文字列。 ここに目的にアプリケーションへのパスを指定することで、 アプリケーションを起動できます。 目的のパスの後ろに半角スペースで区切って文字列を 設定することでアプリケーションへコマンドライン引数を 渡すことが出来ます。 例1・・コマンドライン引数なし object.Run( "C:/WINDOWS/system32/notepad.exe" ); 例2・・コマンドライン引数あり object.Run( "C:/WINDOWS/system32/notepad.exe C:\\Info.txt" ); 例3・・アプリケーションへのパスに半角スペースが混在しているとき object.Run( "\"C:/Program Files/sakura/sakura.exe\"" ); WinStyle・・・・・ウインドウスタイル。 プログラムのウィンドウの外観を示す整数値(省略可能)。 省略した場合は、1が規定値となります。 設定可能な値は1〜10までありますが、実際動かしてみると、 動作がよくわからないものがあったので、わかるものを以下の 表にまとめてみました。 [ウインドウスタイル]
値 | ウインドウ状態 | ウインドウサイズ | 備考 |
---|---|---|---|
0 | 非表示 | 画面が非表示となり操作不可 | |
1 | アクティブ | 通常 | 規定値 |
2 | アクティブ | 最小 | |
3 | アクティブ | 最大 | |
4 | 非アクティブ | 通常 | |
5 | アクティブ | 前回終了時と同じ | アプリごとで動作は異なる |
7 | 非アクティブ | 最小 |
[サンプルコード1]
// // アプリケーション操作 // // パスを指定してアプリケーションを起動する。 // // ウインドウスタイル 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.Run( "C:/WINDOWS/system32/notepad.exe", WS_ACT_NOMAL ); // オブジェクトを解放 sh = null;
[実行結果1]
メモ帳が起動されます。 注意事項として、パソコンの環境によって異なるパスにメモ帳のアプリケーションが格納されているので気をつけてください。
[サンプルコード2]
// // アプリケーション操作 // // アプリケーションに引数を渡して起動する。 // // ウインドウスタイル 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" ); // 「C:/TEST/Info.txt」ファイルをメモ帳で起動 sh.Run( "C:/WINDOWS/system32/notepad.exe C:/TEST/Info.txt", WS_ACT_NOMAL ); // オブジェクトを解放 sh = null;
[実行結果2]
実行前に、「C:/TEST」の階層に「Info.txt」ファイルを用意してください。 お試しとして、「Info.txt」ファイルに適当に文字列を書き込んで置いてください。 実行すると、「Info.txt」ファイルがメモ帳で開かれます。 注意事項として、パソコンの環境によって異なるパスにメモ帳のアプリケーションが格納されているので気をつけてください。
[サンプルコード3]
// // アプリケーション操作 // // アプリケーション名を指定してアプリケーションを起動する。 // // ウインドウスタイル 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.Run( "notepad.exe", WS_ACT_NOMAL ); // オブジェクトを解放 sh = null;
[実行結果3]
メモ帳が起動されます。 注意事項として、環境変数のPATHにメモ帳のアプリケーションを格納しているディレクトリへのパスが指定されていること。 特にいじってなければ設定されていますが、設定を変えてしまった方は動かない恐れがあります。
[サンプルコード4]
// // アプリケーション操作 // // 既存ファイルパスを指定して規定のアプリケーションを起動する。 // // ウインドウスタイル 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" ); // テキストファイルに指定されている規定のアプリケーションで // 「C:/TEST/Info.txt」ファイルを起動 sh.Run( "C:/TEST/Info.txt", WS_ACT_NOMAL ); // オブジェクトを解放 sh = null;
[実行結果4]
実行前に、「C:/TEST」の階層に「Info.txt」ファイルを用意してください。 お試しとして、「Info.txt」ファイルに適当に文字列を書き込んで置いてください。 実行すると、「Info.txt」ファイルに関連付けられているアプリケーションが起動します。 例として、サクラエディタで規定ファイルを開くように設定していた場合は、サクラエディタで「Info.txt」ファイルが開かれます。 注意事項として、パソコンの環境によって異なるパスにメモ帳のアプリケーションが格納されているので気をつけてください。
同期&非同期でのアプリケーションの起動
上記、アプリケーションの起動で紹介したのは単純に起動させる処理でした。 実はアプリケーションの起動の途中でも次の処理を実行してしまうのです。 そこで、ここではアプリケーションが終了するまで実行を止める等の処理を紹介します。 以下の関数とプロパティを使用することで実現できます。 Run()関数についてはアプリケーションの起動を参照してください。
関数名 object.Exec( cmd ); 関数説明 子コマンドシェルでアプリケーションを実行します。 アプリケーションから StdIn / StdOut / StdErr ストリームにアクセスできます。 引数 object・・・・・・WshShellオブジェクト cmd ・・・・・・・実行するコマンドラインを示す文字列。 ここに目的にアプリケーションへのパスを指定することで、 アプリケーションを起動できます。 目的のパスの後ろに半角スペースで区切って文字列を 設定することでアプリケーションへコマンドライン引数を 渡すことが出来ます。 例1・・コマンドライン引数なし object.Exec( "C:/WINDOWS/system32/notepad.exe" ); 例2・・コマンドライン引数あり object.Exec( "C:/WINDOWS/system32/notepad.exe C:\\Info.txt" ); 例3・・アプリケーションへのパスに半角スペースが混在しているとき object.Exec( "\"C:/Program Files/sakura/sakura.exe\"" ); 戻り値 WshScriptExecオブジェクト
関数名 object.Terminate(); 関数説明 Exec()メソッドによって開始されたプロセスを終了する。 実際には終了するようにようにスクリプトエンジンに指示を出すだけなので 実際の終了にはタイムラグが出ます。 引数 object・・・・・・WshScriptExecオブジェクト 戻り値 なし
プロパティ名 object.Status; プロパティ説明 上記、Exec()メソッドを使用して実行したプログラムのステータス情報を返します。 引数 object・・・・・・WshScriptExecオブジェクト 戻り値 上記、Exec()メソッドを使用して実行したプログラムの起動状態の整数値。 [プログラムの起動状態]
値 | 内容 |
---|---|
0 | 実行中 |
1 | 終了 |
[サンプルコード1]
// // アプリケーション操作 // // 同期でアプリケーションを起動する。 // // ウインドウスタイル 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" ); // Excelを起動する sh.Run( "\"C:/Program Files/Microsoft Office/OFFICE11/EXCEL.EXE\"", WS_ACT_MAX, true ); // Excelを終了したら表示 WScript.Echo( "Excelは終了しました。" ); // オブジェクトを解放 sh = null;
[実行結果1]
Excelが起動します。 そして、起動したExcelを終了するとメッセージボックスで「Excelは終了しました。」が表示されます。 このことから、プログラムが終了するまで処理が止まることがわかるはずです。 注意事項として、起動するパソコンにExcelがインストールしていなければ起動しません。 また、Excelが格納されているディレクトリが違う場合も起動しません。
[サンプルコード2]
// // アプリケーション操作 // // 非同期でアプリケーションを起動する。 // // ウインドウスタイル 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" ); // Excelを起動する sh.Run( "\"C:/Program Files/Microsoft Office/OFFICE11/EXCEL.EXE\"", WS_ACT_MAX, false ); WScript.Echo( "スクリプトの処理は続行されました。" ); // オブジェクトを解放 sh = null;
[実行結果2]
Excelが起動します。 そして、すぐにメッセージボックスで「Excelは終了しました。」が表示されます。 上記、サンプル1と違い、起動したExcelを終了しなくてもメッセージボックスが表示されます。 このことから、プログラムが終了するのを待たずに次の処理が実行されてしまいます。 注意事項として、起動するパソコンにExcelがインストールしていなければ起動しません。 また、Excelが格納されているディレクトリが違う場合も起動しません。
[サンプルコード3]
// // アプリケーション操作 // // アプリケーション起動している間に処理をする。 // // アプリケーション起動状態 var WSH_RUNNING = 0; // 実行中 var WSH_FINISHED = 1; // 終了 // Shell関連の操作を提供するオブジェクトを取得 var sh = new ActiveXObject( "WScript.Shell" ); // Excelを起動する var job = sh.Exec( "\"C:/Program Files/Microsoft Office/OFFICE11/EXCEL.EXE\"" ); // 実行中の間ループ var cnt = 0; while( job.Status == 0 ) { WScript.Sleep( 1000 ); // 1秒停止 cnt++; // 10秒経過したら終了 if( cnt >= 10 ) job.Terminate(); } WScript.Echo( "実行時間 = " + cnt + "秒" ); // オブジェクトを解放 sh = null;
[実行結果3]
Excelが起動します。 そして、起動したExcelを終了するとメッセージボックスでExcelが起動してから終了するまでの時間が表示されます。 今回のサンプルでは、起動したExcelが終了しなくても次の処理を実行しますが、こちらでは、起動したExcelが実行中か終了中かを判断できるため終了するまでループ処理を加えています。 この方法を使えば、アプリケーションを起動しながらスクリプト内で色々処理が出来ます。 注意事項として、起動するパソコンにExcelがインストールしていなければ起動しません。 また、Excelが格納されているディレクトリが違う場合も起動しません。
ウインドウをアクティブ状態にする
すでに存在しているウインドウをアクティブ状態にするには以下の関数を使用することで実現できます。 Run()関数についてはアプリケーションの起動を参照してください。
関数名 object.AppActivate( title ); 関数説明 アプリケーションウインドウをアクティブにする。 引数 object・・・・・・WshShellオブジェクト title ・・・・・・アプリケーションのタイトルバーに表示される タイトル文字列または、アプリケーションのプロセスID。 titleに指定した文字列に完全に一致するアプリケーションの タイトルがない場合は、アプリケーションのタイトルの先頭に titleが一致するものをアクティブにします。 タイトルの先頭と比較しても一致するものがない場合は、 アプリケーションのタイトルの最後尾にtitleが 一致するものをアクティブにします。 それでも一致するものがない場合は何もアクティブになりません。 同じタイトルのアプリケーションが複数あった場合は、 どれがアクティブ状態になるかわかりません。 戻り値 関数が正常終了したかどうかのブール値。 ウインドウをアクティブ状態に出来た場合true、 ウインドウをアクティブ状態に出来なかった場合はfalse。
関数名 WScript.Sleep( time ); 関数説明 処理を指定した時間停止します。 引数 time・・・・・・・停止する時間。(単位:ミリ秒) 戻り値 なし
[サンプルコード]
// // アプリケーション操作 // // 指定タイトルのウインドウをアクティブにする。 // // ウインドウスタイル 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.Run( "notepad.exe", WS_NOTACT_NOMAL ); // すぐアクティブにするとよくわからないので一応3秒停止 WScript.Sleep( 3000 ); // タイトルが「無題 - メモ帳」のウインドウをアクティブ状態にする sh.AppActivate( "無題 - メモ帳" ); WScript.Sleep( 1000 ); WScript.Echo( "終了" ); // オブジェクトを解放 sh = null;
[実行結果]
最初に、非アクティブ状態のメモ帳が起動します。 3秒してから、起動したメモ帳をアクティブにします。 注意事項として、パソコンによってメモ帳の新規作成時のタイトルが違う場合があるかもしれません。 その場合、アクティブ状態になりません。
別のJScriptファイルを実行
外部のJScriptファイルを実行するには以下のサンプルで実現可能です。 Run()関数については、アプリケーションの起動を参照してください。
[サンプルコード]
// // アプリケーション操作 // // 外部スクリプトファイルを実行する(呼び出す側)。 // // Shell関連の操作を提供するオブジェクトを取得 var sh = new ActiveXObject( "WScript.Shell" ); // 「wscript.exe」アプリケーションに本ファイルと同階層の「call.js」を // コマンドライン引数として渡して起動 sh.Run( "C:/WINDOWS/system32/wscript.exe call.js" ); // オブジェクトを解放 sh = null;
[Call.js]
// // アプリケーション操作 // // 外部スクリプトファイルを実行する(呼び出される側)。 // WScript.Echo( "呼び出されました!?" );
[実行結果]
実行前に、本ファイルと同階層に「Call.js」ファイルを作成する必要があります。 上記のソースコードをコピーして「Call.js」ファイルを作成してください。 実行すると、メッセージボックスで「呼び出されました!?」と表示されます。 今回のサンプルは、「wscript.exe」アプリケーションの起動時にコマンドライン引数に実行したいスクリプトファイルへのパスを設定しています。
フォルダを開く
指定したパスのフォルダをエクスプローラで開くには以下の関数を使用することで実現できます。 このサンプルを作成する上でこちらのサイトを参考にしました。
関数名 object.Open( path ); 関数説明 指定したフォルダをエクスプローラで開く。 引数 object・・・・・・ShellApplicationオブジェクト dir ・・・・・・・開くフォルダへのパスまたは、特殊フォルダに割り当てられている 定数値。(パスは「/」を使用せず「\」を使用してください) [特殊フォルダの定数の種類]
値 | 参照フォルダ |
---|---|
0 | デスクトップ(仮想) |
1 | Internet Explorer |
2 | プログラム |
3 | コントロールパネル |
4 | プリンタ |
5 | マイドキュメント |
6 | お気に入り |
7 | スタートアップ |
8 | 最近使ったファイル |
9 | 送る |
10 | ごみ箱 |
11 | スタートメニュー |
16 | デスクトップ(フォルダ) |
17 | マイコンピュータ |
18 | ネットワークコンピュータ |
19 | NetHood |
20 | フォント |
21 | テンプレート |
[サンプルコード1]
// // アプリケーション操作 // // パスを指定してエクスプローラで開く。 // // Shell関連の操作を提供するオブジェクトその2を取得 var sh = new ActiveXObject( "Shell.Application" ); // 「C:」ドライブをエクスプローラで開く sh.Open( "C:\\" ); // オブジェクトを解放 sh = null;
[実行結果1]
エクスプローラが開き、「C:」ドライブの階層が表示されます。
[サンプルコード2]
// // アプリケーション操作 // // 定数を指定してエクスプローラで開く。 // // 特殊フォルダ定数 var SSF_DESKTOP = 0; // デスクトップ(仮想) var SSF_IE = 1; // Internet Explorer var SSF_PROGRAMS = 2; // プログラム var SSF_CONTROLS = 3; // コントロールパネル var SSF_PRINTERS = 4; // プリンタ var SSF_PERSONAL = 5; // マイドキュメント var SSF_FAVORITES = 6; // お気に入り var SSF_STARTUP = 7; // スタートアップ var SSF_RECENT = 8; // 最近使ったファイル var SSF_SENDTO = 9; // 送る var SSF_BITBUCKET = 10; // ごみ箱 var SSF_STARTMENU = 11; // スタートメニュー var SSF_DESKTOPDIRECTORY = 16; // デスクトップ(フォルダ) var SSF_DRIVES = 17; // マイコンピュータ var SSF_NETWORK = 18; // ネットワークコンピュータ var SSF_NETHOOD = 19; // NetHood var SSF_FONTS = 20; // フォント var SSF_TEMPLATES = 21; // テンプレート // Shell関連の操作を提供するオブジェクトその2を取得 var sh = new ActiveXObject( "Shell.Application" ); // マイドキュメントをエクスプローラで開く sh.Open( SSF_PERSONAL ); // オブジェクトを解放 sh = null;
[実行結果2]
エクスプローラが開き、マイドキュメントが表示されます。
ネットワークドライブ操作へ | 目次 | キーボード操作へ |