• ベストアンサー

対象のアプリケーションが終了するまで起動し続ける

semisemiの回答

  • ベストアンサー
  • semisemi
  • ベストアンサー率72% (8/11)
回答No.1

起動中のプロセス名の一覧を取得して、その中に「notepad.exe」(メモ帳の場合)が存在するかどうかを確認することで、監視してはどうでしょう? 試しにコードを書いてみました。 あんまりうまくは書けてないですが参考にしてみてください。 コンパイルする時には、 psapi.lib をリンクしてやる必要があります。 実行してみるとわかりますが、わりとCPUパワーを食います。 少しくらいのタイムラグが許容できるなら continue の直前に Sleep(100) とか入れるとマシになるかもしれません。 //////////// #include <stdio.h> #include <string.h> #include <windows.h> #include <psapi.h> #define MAX_STR 500 #define MAX_ARRAY 1024 int main() { DWORD procIdList[MAX_ARRAY]; DWORD retSize; int nProc; int i; char procName[MAX_STR]; HANDLE hProcess; HMODULE hMod; //メモ帳を起動してやる WinExec("notepad.exe", SW_SHOWNORMAL); //無限ループでメモ帳が起動中か監視する for (;;) { //プロセスIDの一覧を取得 if (!EnumProcesses(procIdList, sizeof(procIdList), &retSize)) { printf("EnumProcesses関数が失敗\n"); return 1; } nProc = retSize / sizeof(DWORD); //printf("%d個のプロセス\n", nProc); for (i = 0; i < nProc; i++) { strcpy(procName, ""); hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, procIdList[i]); if (hProcess != NULL) { //プロセス名の取得 if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &retSize)) { GetModuleBaseName(hProcess, hMod, procName, MAX_STR / sizeof(char)); } } //メモ帳が起動中かどうか確認する if (strcmp(procName, "notepad.exe") == 0) { //メモ帳を確認 break; } } CloseHandle(hProcess); if (i != nProc) { //iがnProcと同じ数になっているようならメモ帳は見つからなかった printf("メモ帳が起動しています。\n"); continue; } else { printf("メモ帳を確認できません。終了します。\n"); break; } } return 0; } //end of main

参考URL:
http://support.microsoft.com/kb/175030/ja

関連するQ&A

  • 対象のアプリケーションが終了するまで起動し続ける

    WaitForSingleObjectを使って対象のアプリケーションが終了するまで 無限ループして対象のアプリケーションが終了したら無限ループを 抜ける事はできるでしょうか?あまりWaitForSingleObjectを理解していないので 意味がわからない質問かもしれませんが、よろしくお願いします。

  • スレッドの終了の仕方

    こんばんわ 今スレッドを使ったプログラムを組んでいるのですが、_beginthreadexで起動したスレッド(無限ループ)二つをある条件の時にmainで終了させたいのですが、_endthreadでは特定のスレッドを終了させるようなパラメータが無いみたいなのでどうしていいかわかりません。CloseHandleだけでも終了させることができるのでしょうか??何かいい方法は無いでしょうか? windowsプログラム初心者なので分かりにくい質問で申し訳ないです。

  • 処理KEY入力で終了させる方法

    今、学習でC言語を使いCPUのアドレスのデータを表示させるプログラムを組んでいます。 表示させるのは出来たのですが、表示させるたびに、プログラムが終わってしまうので、何回も入力するのがわずらわしい状態です。 例えば、連続でデータが半永久的に表示され、何かKEYを押すだけでそのデータ表示を強制終了 させることは可能でしょうか? ソースは、簡単なのですが、 #include<stdio.h> #define Dout 0x03ff int main { int i; DATA=inp(Dout); printf("DATA:%d\n",DATA); return(0); } while(1)で、無限ループをし、CTRL+Cなどで、抜ける方法はあると思うのですが、それ以外の方法で、プログラムを組むことは可能でしょうか?

  • あるプログラム実行中に別のプログラムを起動したい

    とあるC言語で出来たa.outというプログラム実行中に、b.outというプログラムを実行するプログラム「c.c」を作成したいのですが、どのようにプログラミングすればよいでしょうか? a.outは無限ループするような十分に実行時間の長いプログラムです。 ちなみに、c.cはシェルスクリプト「c.sh」でも構いません。

  • コンソールアプリケーションの終了方法

    コンソールアプリケーションをC言語(Visual-C++6.0)にて開発予定です。このアプリケーションは画面を使わないのでコンソールアプリケーションにする予定です。このプログラムは常駐プロセスにし、コマンドで起動停止を行うようにする予定です。プログラムの起動はバッチファイルを作成し、そこから実行しようと考えていますが、プログラムを停止させるバッチファイルのイメージがわきません。unixの場合は、当該プロセスにSIGTERMを送信する等の方法が考えられるのですが、windowsで常駐のコンソールアプリケーションを停止させるには、どのような方法があるのでしょうか。ご存じの方ありましたら、教えてください。停止させる方法は、外部から常駐プロセスに停止である旨の何らかの事象を送り、それを常駐プロセスがキャッチし、自ら停止することを想定しています。(有無をいわさず殺すことは考えていません) 実行環境:windows2003を想定 開発言語:VC++6.0でC言語

  • visual C++ 2008での無限ループの対応

    最近C言語でのプログラミングを始めたのですが、visual C++ 2008で実行をしたときプログラムが無限ループになっていた場合どすれば元にもどるのでしょうか?ご存知の方がおられましたら対処方法を教えてください。お願い致します。

  • 自分のアプリケーションがプロセス終了したときのイベントを検出したいので

    自分のアプリケーションがプロセス終了したときのイベントを検出したいのですが、どうすれば良いですか? プログラム言語はC#です。 よろしくおねがいします。

  • アプリケーションの起動画面中に終了したい

    こんにちは ドックからアプリケーションをクリックして起動するときに、焦っていると間違えて隣のアイコンをクリックしてしまったりします。 フォトショップやイラストレーターをクリックしてしまうと起動完了するまでに時間がかかるので、あの起動画面の時に終了する方法があれば教えて欲しいです。 今はアプリケーションの強制終了でむりやり終了しているのですが、パソコンにとってはあまりいい方法ではないですよね?

    • ベストアンサー
    • Mac
  • PC起動時に、「自動で プログラム起動→プログラム終了」 の方法

    PC起動後、あるプログラムで1回目のプログラム起動では動作が安定せず、プログラム終了の後、2回目以降のプログラム起動で安定するという現象があります。原因不明です。 そこで、PC起動時に「自動で プログラム起動→プログラム終了」として、次のプログラム起動(作業者からは実質1回目の起動)でプログラムが安定するようにしたいのですが、いい方法はありませんか? 自動でプログラム起動だけなら、スタートアップでいいのは分かるのですが・・・。よろしくお願いします。

  • キーボード入力によるループの終了

    C言語で、キーボードから何も入力が無い場合は、同じ処理を一定の時間で続けていき、キーボードから入力(例えばスペースを入力)があった場合のみ、ループを抜ける(処理を終了する)というプログラムを組みたいと思っているのですが、どのようなソース文にすればよいでしょうか。 どなたかよろしくお願いします。