ステータスバーEX の活用事例 - 他プロセスの終了を表示 2017-09-06 (Wed) 22:00

別件で作ったプロセスの終了を監視するオブジェクトを流用して、TEから起動したプロセスの終了を監視し、

それが終了したときにステータスバーEXにメッセージを表示させてみる。

以下の例では、メモ帳と電卓を起動し、おのおの終了したときにメッセージを表示する。


var PM = (function() {
var ProcMonitoring = function() {
this._Tbl = [];
this._Timer = null;
}
ProcMonitoring.prototype.GetTbl = function() {
return this._Tbl;
}
ProcMonitoring.prototype.Push = function(obj) {
this._Tbl.push(obj);
if (!this._Timer) {
this._Timer = window.setInterval(this._Monitor.bind(this), 1000);
}
}
ProcMonitoring.prototype.IsProcessStarted = function(proc) {
if (!this._WMI) this._WMI = te.CreateObject("WbemScripting.SWbemLocator").ConnectServer();
var strObj = "winmgmts:{impersonationLevel=impersonate}";
var strSql = typeof proc === "string" ? "select * from Win32_Process where Name='" + proc + "'" : "select * from Win32_Process where ProcessId='" + proc + "'";
var oProc = this._WMI.ExecQuery(strSql);
return oProc.Count;
}
ProcMonitoring.prototype._Monitor = function() {
for (var i = this._Tbl.length; i--;) {
if (!this.IsProcessStarted(this._Tbl[i].pid)) {
var evt = document.createEvent("Event");
evt.initEvent("ProcTermed", true, false);
evt.info = JSON.parse(JSON.stringify(this._Tbl[i]));
this._Tbl.splice(i, 1);
window.dispatchEvent(evt);
}
}
if (this._Tbl.length == 0 && this._Timer) {
window.clearInterval(this._Timer);
this._Timer = null;
}
}
return ProcMonitoring;
}())
var pm = new PM();
var rt = wsh.Exec('notepad.exe');
pm.Push({
pid: rt.ProcessId,
msg: "メモ帳終了",
color: "Blue"
});
rt = wsh.Exec('calc.exe');
pm.Push({
pid: rt.ProcessId,
msg: "電卓終了",
color: "Red"
});
_usr_callback = function(e) {
Addons.StatusBarEX.SetText(e.info.msg, e.info.color, 2000);
if (pm.GetTbl().length == 0) {
window.removeEventListener(e.type, arguments.callee, false);
delete _usr_callback;
}
}
window.addEventListener('ProcTermed', _usr_callback, false);

プロセス終了の監視を一秒間隔で行っているのとメッセージの表示維持時間の絡みがあるので

即時性を求めるような用途には不向き。

時間の掛かるバッチ処理なんかで使ってみるかな。

@TE64 17.9.4 Win 6.1.7601 WS 300 Admin IE 11 ja_jp
関連記事

コメントの投稿

管理者にだけ表示を許可する

注意事項
基本的にこのブログはブログ主の備忘録です。

ブログの内容にはブログ主の主観や時には正確でない情報が含まれていることもあります。書いてある内容がすべての環境にあてはまることを保証するものでもありません。

また、過去の記事は現時点で既に陳腐化していることもあります。

その辺をご理解の上で当ブログ内に書いてあることを試す場合は自己責任でお願いします。

記事内容の誤りの指摘、疑問点の回答などコメント頂けると助かります。
カレンダー
06 | 2018/07 | 08
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
ブログ内検索
カラーコードチェッカ
カラーコードの確認
入力例) #ffffff | blue
カテゴリ
最新記事
最新コメント
最新トラックバック
リンク
ブロとも申請フォーム

この人とブロともになる

メールフォーム
メールフォーム設置当初より受信できない状態になっていました。2017/11/03以前にメール送信された方、誠に申し訳ありませんでした。
必要であれば再送お願いします。

名前:
メール:
件名:
本文: