
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で質問しましょう!
似たような質問が見つかりました
- Windows 10 バッチファイルでのエクスプローラー終了 1 2022/05/30 14:32
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- 政治 私は文部科学省ヘ入り込んで投稿した私の建議文を彼らが私の依頼まましましょうか。? 2 2023/08/22 07:08
- 日本株 SBI証券HYPER SBI 2のエラー 1 2023/01/31 13:38
- その他(ソフトウェア) ソフトが異常終了します 1 2022/08/28 01:41
- インターネット広告・アフィリエイト アフェリエイトサイト 作成について 5 2022/05/13 21:31
- フリーソフト AOMEI Backupper でバックアップが取れない 2 2022/07/17 22:28
- フリーソフト タスクソフト? 1 2023/01/14 07:52
- その他(コンピューター・テクノロジー) Texについてです。 jpgファイルを貼り付けても表示されないのですが、どうしたら表示できますか? 1 2022/06/30 23:42
- iCloud AppleID サポートからのメール 3 2023/07/05 15:14
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プロセスのアタッチ・デタッチ...
-
バックグラウンドのプロセスの...
-
Process.Startの戻り値を後で取得
-
vb.netでEXCEL起動がうまくでき...
-
指定した実行中プロセスの、指...
-
親子プロセス間でのデータの受...
-
C#でのbatファイル実行結果取得
-
SQLServerサービスマネージャの...
-
他のコンピュータのプロセスを取得
-
ADOでアクセスのレコードに...
-
ロードアベレージが高いのです...
-
別プロセスをの実行パスを取得...
-
子プロセスのデバッグ方法について
-
exeファイルを終了させない。
-
GPLによるソース公開の回避方法
-
プロセスIDに対応したファイル...
-
Linuxでのスレッド間メッセージ...
-
DLLにおいて、最後のプロセスデ...
-
explorer.exeが異様にメモリを食う
-
C++のプログラムをバックグラウ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
プロセスIDの取得方法について
-
ADOでアクセスのレコードに...
-
C#でのbatファイル実行結果取得
-
タスクマネージャーのプロセス...
-
VB6.0 SHELLで起動...
-
プロセスのアタッチ・デタッチ...
-
非表示になったエクセルは?
-
怪しいプロセス教えてください。
-
sleep関数の精度について
-
【C#】別プロセスがロックか...
-
Process.Startの戻り値を後で取得
-
IISがフリーズ
-
プロセスIDからウィンドウハ...
-
Linuxでのスレッド間メッセージ...
-
Windowsでのfork方法
-
SendMessageが失敗するときがある
-
警告『 別のプロセスで使用され...
-
WSH.Runで待機できません
-
VB.NETで起動したExcelの閉じ方...
おすすめ情報