
I フィルター(有害サイトブロックソフト)って知っていますか?あのソフトは、2つのプログラムから成っていて、片方のプロセスを終了させるともう片方のプロセスが起動し、互いに監視しあっているので簡単には終了できません。
そのようなこと(つまり、簡単に終了させることができないようにプロセス2つで監視し合っている)をC言語で行いたいのですが、プロセスを監視するとか全然わかりません。
とっても初心者なので、できる限り詳しく、ソースコードなどもあればとてもうれしいのですが・・・
手間のかかる質問ですが、どうぞ回答してくださるかたよろしくお願いします。
No.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を使います。
そうですね、そうします!!200行ですか…大変だぁ…
これからはしたい動作を一番やりやすい言語で書いて、それを起動する方法を使えるようにします!!
ちなみに一番上はVBSですよね?C以外のことには疎いのですが…まぁ頑張ります!!
No.1
- 回答日時:
プロセスの状態を知るには、OSの機能を使う必要があります。
規格としての「C言語」には含まれていません。
OSの機能を使うので、当り前ですがOSによって使う関数や約束事が違います。
お使いのOSのAPIやシステムコールのマニュアルを読んで探してください。場合によってはサンプルコードが載っています。
ただ、プロセス制御は、やりかたを間違えるととんでもないことになりやすいです。例えば、生存していることの判定に失敗して、再起動させようとして、プロセスを作りまくってしまう、とか。
「とっても初心者」などと言っているような人なら、もっと基礎を身に付けてからやった方がよいでしょう。
たしかに、もうちょっと知識をつけてからでないととんでもないことになりそうですね。
一応Cのコンソールアプリケーションならいろいろ作れる実力?はありますが、プロセス制御などはじめてだったので超初心者と書かせていただきました。回答、ありがとうございました!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
VB6.0 SHELLで起動...
-
ADOでアクセスのレコードに...
-
services.exeが延々と。
-
VBでエクセルを起動し、プロ...
-
怪しいプロセス教えてください。
-
C#でのbatファイル実行結果取得
-
exeファイルを終了させない。
-
ストール監視の監視方法
-
CPUの使用率について
-
Windowsで環境変数を設定できま...
-
explorer.exeが異様にメモリを食う
-
IISがフリーズ
-
起動しているプロセスの確認
-
タスクマネージャーのプロセス...
-
sleep関数の精度について
-
プロセスIDからウィンドウハ...
-
vb.netでEXCEL起動がうまくでき...
-
WebBrowserでPDF表示でのトラブル
-
ShellExecuteが起動したプロセ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
プロセスのアタッチ・デタッチ...
-
非表示になったエクセルは?
-
C#でのbatファイル実行結果取得
-
Process.Startの戻り値を後で取得
-
タスクマネージャーのプロセス...
-
SendMessageが失敗するときがある
-
VB6.0 SHELLで起動...
-
Linuxでのスレッド間メッセージ...
-
vb.netでEXCEL起動がうまくでき...
-
explorer.exeが異様にメモリを食う
-
プロセスIDの取得方法について
-
IISがフリーズ
-
jdbcのプロセスの処理について
-
c言語でプロセスIDを調べたい
-
セマフォとmutexの違いは?
-
警告『 別のプロセスで使用され...
-
ADOでアクセスのレコードに...
-
OSPFでプロセスを分ける意義に...
-
Windowsでのfork方法
おすすめ情報