Windows OSのPCの再起動、シャットダウン、レジュームを検知する方法を教えてください。

レジストリの値の変化や、WindowsのAPIやプログラム言語の利用等で、上記のイベントを検知する方法はありますか?

例えば、再起動の場合、XPだと起動日時が取れますので、それを保存しておいて比較すると再起動されたことがわかります。
また、レジストリのRunキーを利用するのもありかと思います。
色々な方法を知りたいです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2007/07/20 09:07:13
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:ardarim No.1

回答回数897ベストアンサー獲得回数145

ポイント20pt

スタートアップ、シャットダウン、ログオン、ログオフについては、それぞれスクリプトを登録することで任意の処理を行うことができます。

スタートアップ、シャットダウン、ログオン、およびログオフのスクリプトを使用する

Windows Server 2003の説明ですが、基本的に2000やXPでも仕組みは同じです。


サスペンド・レジュームですが、例えば1分間隔で時刻をチェックするようなスレッドを作って、前回チェックしたときから1分以上経過してたらその間はサスペンドされていたと推測できると思います。

id:a6e

ありがとうございます!

2007/07/15 22:00:37
id:felix2007 No.2

回答回数600ベストアンサー獲得回数4

id:a6e

2007/07/16 00:57:38
id:memo77 No.3

回答回数238ベストアンサー獲得回数20

ポイント35pt

.net2005以降ならこれですね。

http://msdn2.microsoft.com/ja-jp/library/microsoft.win32.systeme...(VS.80).aspx


再起動したときの前回の終了状況とかが簡単に取れるネタがあれば私も知りたいです。

現在PCの使用状況をコントロールするようなアプリを作ってて、ちょうど同じところを探ってました。


今日はロックしたりロック状態を拾ったりするクラスを作成したりで一日が過ぎた・・・

http://www31.atwiki.jp/memo77/pages/36.html

id:a6e

ありがとうございます!

2003なのですが参考になりました。

SystemEventsメンバを色々試してみます。

2007/07/17 09:46:52
id:T_SKG No.4

回答回数206ベストアンサー獲得回数18

ポイント35pt

ご免なさい、自分で試してはおりません。


NSDN内の記事に「モビリティ WPF アプリケーションで電源状態を認識する」

「システムの電源状態変更の通知」 というものがありました。

http://msdn.microsoft.com/msdnmag/issues/07/07/PowerAware/defaul...


この記事の末尾の参考リンク一覧も、参考になると思います。


リンクから辿った、WM_POWERBROADCAST メッセージ の説明です。

http://msdn2.microsoft.com/ja-jp/library/aa373247.aspx


Windows98なら、Visual Basic 6.0 に添付されている ActiveX の一つ Sysinfo.OCX を使うと

サスペントあるいは休止状態から復帰したことが簡単に取れたので使ったことがあります、

しかしWindows2000以降は駄目なようです。


Sysinfo.OCX の新版に相当するもの、MSの開発ツールのどこかにあっても良いと思うのですが。


MSDNのLibraryでは、Sysinfo.OSX のドキュメントを見つけられなかったので、

代わりのURLを書いて置きます。


アイデア+テクニック=200%


●システム情報イベントを得るSysInfo.OCX

知られていないActiveXコントロール

http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9804/idea/

id:a6e

複数の情報ありがとうございます。

2007/07/18 13:16:53

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません