プロが教える店舗&オフィスのセキュリティ対策術

I フィルター(有害サイトブロックソフト)って知っていますか?あのソフトは、2つのプログラムから成っていて、片方のプロセスを終了させるともう片方のプロセスが起動し、互いに監視しあっているので簡単には終了できません。

そのようなこと(つまり、簡単に終了させることができないようにプロセス2つで監視し合っている)をC言語で行いたいのですが、プロセスを監視するとか全然わかりません。

とっても初心者なので、できる限り詳しく、ソースコードなどもあればとてもうれしいのですが・・・

手間のかかる質問ですが、どうぞ回答してくださるかたよろしくお願いします。

A 回答 (2件)

Windowsの場合、WMIを使ってプロセスを監視できます。



'Excelが稼動しているか調べるスクリプト
Dim A,B,C,D
Set A=CreateObject("WbemScripting.SWbemLocator")
Set B=A.ConnectServer()
C="Select * from Win32_Process WHERE Caption='Excel.exe'"
Set D=B.ExecQuery(C)
If D.Count=0 Then
    MsgBox "Excelは稼動していません"
Else
    MsgBox "Excelが稼動しています"
End If

で、これをC言語でやるととても難しくなります。
全部書けないので、さわりだけやりますと、
Set A=CreateObject("~") は以下のようにします。

#include <windows.h>
int main(int a,char *v[]) {

IDispatch *l;
HRESULT r;
CLSID d;
r = CLSIDFromString(L"WbemScripting.SWbemLocator",&d);
if ( !r ) {
    CoInitialize(NULL);
    r = CoCreateInstance(d,NULL,CLSCTX_SERVER,
                  IID_IDispatch,(LPVOID*)&l);
    if ( !r ) {
        以下正常時の処理

どうですか、面倒でしょう。プロパティだのメソッドなんか
ピリオドで名前書けば済む話ではありません。
Cでやる時は名前からプロパティやメソッドのDISPIDを
取得し、これにパラメータ(必ずVARIANT型)を指定して
Invokeメソッドを実行します。また使用後はReleaseで、
メモリ空間を解放しないと、厄介なことになります。
スクリプトですと10行くらいですが、Cでやると200行は
かかるでしょうね。
続きをどうしても見たい場合はまた補足してください。

こんなことなら、スクリプトをシェル起動して戻り値を
見たほうが速い?そうです。その通りです。
スクリプトを起動するならCreateProcessを使います。

この回答への補足

お礼に対する補足というか訂正ですが、WMIとかいてありました…また変なこと言ってすいません。

補足日時:2011/07/28 07:21
    • good
    • 0
この回答へのお礼

そうですね、そうします!!200行ですか…大変だぁ…

これからはしたい動作を一番やりやすい言語で書いて、それを起動する方法を使えるようにします!!

ちなみに一番上はVBSですよね?C以外のことには疎いのですが…まぁ頑張ります!!

お礼日時:2011/07/28 07:17

プロセスの状態を知るには、OSの機能を使う必要があります。


規格としての「C言語」には含まれていません。

OSの機能を使うので、当り前ですがOSによって使う関数や約束事が違います。
お使いのOSのAPIやシステムコールのマニュアルを読んで探してください。場合によってはサンプルコードが載っています。


ただ、プロセス制御は、やりかたを間違えるととんでもないことになりやすいです。例えば、生存していることの判定に失敗して、再起動させようとして、プロセスを作りまくってしまう、とか。
「とっても初心者」などと言っているような人なら、もっと基礎を身に付けてからやった方がよいでしょう。
    • good
    • 0
この回答へのお礼

たしかに、もうちょっと知識をつけてからでないととんでもないことになりそうですね。

一応Cのコンソールアプリケーションならいろいろ作れる実力?はありますが、プロセス制御などはじめてだったので超初心者と書かせていただきました。回答、ありがとうございました!!

お礼日時:2011/07/28 07:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!