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
No.2
- 回答日時:
メモ帳はどうやって起動したものでしょうか?
単にnotepad.exeのプロセスを調べると、ユーザーが後から起動したものかもしれないし、メモ帳以外にもnotepad.exeという名前のものがあるかもしれません。
自身のプログラムで起動したメモ帳を監視したいのであれば、CreateProcessなどでメモ帳を起動したうえでプロセスハンドルを保存し、WaitForSingleObjectなどでプロセスの状態を監視するのが一般的だと思います。
この回答への補足
CreateProcessなどでメモ帳を起動するのではなく
普通に「スタート」ー>「アクセサリー」・・・・
のように普通に起動します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 バッチファイルでのエクスプローラー終了 1 2022/05/30 14:32
- Windows 10 windows10のクリーンインストールが完了出来ない 2 2022/06/04 13:33
- Windows 10 WIN11 UPdate 3 2022/09/22 08:36
- 電子書籍 WIN10で誤ってメモ帳タッチしてしまった 2 2022/12/29 21:02
- Visual Basic(VBA) VBAでOutlookを終了させたい ExcelVBAで既に起動されているOutlookを終了させる 3 2022/03/24 07:37
- フリーソフト タスクソフト? 1 2023/01/14 07:52
- その他(コンピューター・テクノロジー) Ubuntu22.04ltsですが、たまにYou Tubeを聴いたり観たりしていると、無限ループでコ 2 2023/07/21 13:19
- デスクトップパソコン windows7を使っているパソコンでの質問です。先日動作が遅く再起動かけると「windowsを起動 9 2022/06/16 21:31
- 英語 英語の相の種類 Wikipediaでは He began to talk.(起動相) He cont 1 2023/06/26 11:54
- Microsoft ASP C#からvbsを実行したい 5 2022/11/24 17:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBで実行中のEXEファイルの情報...
-
VBAでOutlookを終了させたい Ex...
-
アウトルックが起動しているか...
-
Process.Startで起動したアプリ...
-
ACCESS VBAで別のACCESS(mdb)を...
-
htmlからcgiを自動的に起動させ...
-
VBSから別のVBS起動するとき変...
-
WinSCPで画像のように puttyを...
-
エクセル起動時別プロセスで開く
-
ウィンドウを終了させたい・・・
-
プログラム2重起動処理の方法
-
AppActivateについて
-
VBSで起動したアプリが前面表示...
-
コマンドボタンをクリックする...
-
64bitで作ったEXEを32bitで起動...
-
プログラムからのブラウザ立ち上げ
-
フォームの最前面が効かない
-
Windows上のプログラム。「予め...
-
gccプログラムで複数の実行ファ...
-
VB6.0からエクセルを起動
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アウトルックが起動しているか...
-
WinSCPで画像のように puttyを...
-
VBSから別のVBS起動するとき変...
-
Windows上のプログラム。「予め...
-
VBAでOutlookを終了させたい Ex...
-
VBで実行中のEXEファイルの情報...
-
VBSで起動したアプリが前面表示...
-
Process.Startで起動したアプリ...
-
EXCEL VBAから他アプリケーショ...
-
64bitで作ったEXEを32bitで起動...
-
exeファイルを実行するとすぐに...
-
リムーバブルディスクのフォー...
-
VB6で呼び出し元の情報を取得す...
-
VBAでIEが起動しているか...
-
フォームの最前面が効かない
-
VBAでSeleniumからChromeを起動...
-
エクセル起動時別プロセスで開く
-
VBSでExcelのUserFormをエクス...
-
ACCESS VBAで別のACCESS(mdb)を...
-
別アプリの起動、終了について
おすすめ情報