- ベストアンサー
他のアプリケーションの起動と終了のログをとりたい。
題名の通りアプリケーションの起動と終了をとるログを とりたいと考えています。多数のPCの画面をみたり 今起動しているアプリの認識そして強制終了など、またPCの シャットダウンなどをここの人たちのアドバイスのおかげで できるようになり感謝しています。じつはこの題名で過去ログに あったのを拝見いたしましたが自分には少し理解ができず、 またリンク先もなくてソースすらなくどうしたらいいのか こまっています。なにとぞ良い知恵を拝借したく書き込みいたしました よろしくお願いします。 過去ログはこれです http://oshiete1.goo.ne.jp/qa110171.html
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
★アドバイス ・過去ログについてはメッセージをフックして起動を監視しても全ての起動を フックでは検出できないと書かれています。そこでタイマーや別スレッドなどを 使ってプロセスを列挙して変化があったら起動(終了)を検出すればよい。との事。 ・プロセスの列挙はNT系なら EnumProcesses() 関数で行えます。 9x系にも対応するには Process32First()、Process32Next() 関数で行えいます。 全ての Windows バージョンで使えるようにするにはバージョンをチェックして Windows NT なら EnumProcesses() 関数、それ以外なら Process32First() 系関数を 使えば良さそうです。 ・監視にはタイマーか別スレッドを用意して1秒単位でプロセスを列挙していきます。 そして前回との変化をチェックします。メッセージフックではやったことがありませんが、 タスクマネージャみたいにある決まった間隔で全プロセスの列挙を行えば良いでしょう。 ・なるべく早くに相違を見つけるための工夫が必要になりそうです。 列挙したデータをバランス木構造で管理すれば検索も高速になると思います。 ただし、バランス木を実行するのに手間取るかもしれませんが頑張って下さい。 なお、検索するときのキーは一意の値であるプロセスIDを使えば良いでしょう。 ・以上。参考に。 参考資料: http://homepage2.nifty.com/DSS/PT/HTML/Win/enumapp.htm http://www7a.biglobe.ne.jp/~lshen/EternalWindows/Special/DLL/DLL04.html http://blog.goo.ne.jp/masaki_goo_2006/e/649b4637b28d8fff98b08aee26ab20e8 http://www.atmarkit.co.jp/flinux/rensai/fs02/fs02c.html 参考質問: http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200512/05120047.txt
その他の回答 (2)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★訂正。 間違い⇒ただし、バランス木を実行するのに手間取るかもしれませんが頑張って下さい。 正しい⇒ただし、バランス木を実装するのに手間取るかもしれませんが頑張って下さい。 ※『実行』ではなく『実装』でした。
- redfox63
- ベストアンサー率71% (1325/1856)
回答ではありませんがナレッジベースの検索はナレッジベースのホームページで文書番号を検索してみましょう 以前のサポートページのURLと現在のURLの命名規則が変更になっています サポートページURL http://support.microsoft.com/ JP175/0/30 とあったのなら 175030といった文書番号を検索する事になります http://support.microsoft.com/kb/175030/ja こちらがご希望のページかと ・・・
お礼
ありがとうございます。 リンクをたどってもなかった事があったので困っていました。 これで調べることができます。 ありがとうございました。
補足
詳しいご説明ありがとうございます。 プロセス列挙はタスクバーのみ必要だったので Enumwindows関数をつかい列挙しています。 またバランス木のアルゴリズム構成が自分のスキル不足で できないと感じて線形探索でやっています。 ですがいまだにできておりませんが・・・ 何とかやってみようと思います。 ありがとうございました。