HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0219
aliceプロセスの監視4未解決


alice

リンク

2010/2/19(Fri) 19:31:43|NO.30739

プロセスAが終了した場合にプロセスBが特定の動作をする
プロセスBが外部から終了された場合に再起動する

この二つを満たすプログラムの作り方を教えてください。



この記事に返信する


KA

リンク

2010/2/19(Fri) 20:26:21|NO.30744

>>プロセスAが終了した場合にプロセスBが特定の動作をする
>>プロセスBが外部から終了された場合に再起動する

・・・良く分かりません、具体的に書きましょう。

”プロセス”=”ソフト”とし、以下AとBとします。

1:まずAを起動する。(Bも起動するの?)
2:Aが終了したら、(Bが起動?)Bが何かする。
3:Bが終了したら、(A?B?)再起動する。
4:Bが”外部から終了”と、わざわざ書いているので、Bが自動で
  終了したときは何もしない。

”タイムアップで自動終了するまでは、お互い起動させあう”と言う様な
使い方でしょうか?



腱鞘炎

リンク

2010/2/19(Fri) 21:21:27|NO.30745

えっと、プロセスAもBもHSPであればサンプルを。
予め同じディレクトリに「chk」というファイルがあるとして。

プロセスA

onexit *exit *exit chk = "1" notesel chk notesave "chk"//終了するとchkにデータが書き込まれる end

プロセスB

notesel chk repeat noteload "chk" if chk = "1" : break//もしchkにデータが書き込まれていたら抜ける wait 50 loop chk = "" notesel chk notesave "chk" dialog "プロセスAが終了しました。" stop
こんな感じでしょうか?



tsuka

リンク

2010/2/25(Thu) 18:46:54|NO.30832

えっと。解決されていないようなので、Win32APIを使った方法を提示します。


#uselib "user32.dll" #func FindWindowEx "FindWindowExA" sptr, sptr, sptr, sptr #func GetWindowThreadProcessId "GetWindowThreadProcessId" sptr, sptr #uselib "kernel32.dll" #func OpenProcess "OpenProcess" sptr, sptr, sptr #func GetExitCodeProcess "GetExitCodeProcess" sptr, sptr #func CloseHandle "CloseHandle" sptr #define STILL_ACTIVE 0x000103 #define PROCESS_ALL_ACCESS 0x1F0FFF sdim wndName, 256 pos 0, 0 mes "監視するプロセスのウィンドウのタイトル" pos 3, 20 input wndName, 200, 17 pos 3, 40 button "監視開始。", *start font msGothic, 10 pos 3, 80 stop *start gosub *searchWindow repeat wait 50 gosub *getExitCode loop stop *searchWindow FindWindowEx 0, 0, 0, wndName if (stat == 0) { mes "ウィンドウが見つかりませんでした。" stop } else { hTarget = stat } dim piTarget GetWindowThreadProcessId hTarget, varptr(piTarget) OpenProcess PROCESS_ALL_ACCESS, 0, piTarget hpTarget = stat mes "ウィンドウが見つかり、準備が出来ました。" mes "監視を開始します。" return *getExitCode dim exitCode GetExitCodeProcess hpTarget, varptr(exitCode) if (exitCode != STILL_ACTIVE) { //0が返りますが、終了してしまっているため、関数が失敗、ということです。 mes "監視プロセスが終了しました。" stop } return *exit CloseHandle hpTarget end



tsuka

リンク

2010/2/25(Thu) 19:11:49|NO.30833

二つ目の、プロセスBが外部から終了させられた場合〜ですが。
上のスクリプトを使って、プロセスBを監視するプロセスCを作ればいいと思います。(プロセスBが自分で終了する場合は、プロセスBがプロセスCを終了させてあげればいいと思います。)
アンチウィルスソフトなどはこれを実装していて、監視するプロセスを一つ用意しています。



ONION software Copyright 1997-2023(c) All rights reserved.