VBAでPCの起動や終了のイベント発生時刻を取得する

イベントビューアでPCの開始と終了、スリープの開始と復帰が分かる

イベントビューアのシステムを見ると、PCの開始時刻や終了時刻を確認できます。スリープの開始と復帰も同様に確認できます。

VBAでこれらの時刻を取得することが可能です。

事前設定

以下のマクロはWindows Management Instrumentation (WMI)を利用しています。

事前にVBA画面のツールメニュー→参照設定で「Microsoft WMI Scriptiong V1.2 Library」を選択する必要があります。

イベントログからPCの開始・終了時刻やスリープの開始・復帰時刻を取得するマクロ

以下の関数はイベントログからPCの開始・終了時刻やスリープの開始・復帰時刻を取得します。

イベントログの取得にはWindows Management Instrumentation (WMI)を利用しています。

実際の用途ではタイムカードのような使い方で日単位で開始時刻と終了時刻を取得したい場合や、PCの動作管理をするために単純に出力したい場合なども用途として考えられるため、ここでは取得方法を主に紹介します。

コード説明

17、18行目でイベントログのSystemから、イベントIDが6005(PC起動)、6006(PC終了)、7001(スリープ開始)、7002(スリープ復帰)のイベントを抽出する条件文を書いています。

あとはその条件に一致したイベントを全て取得し、1イベントごとにイベントIDと日時を取得して出力します。

上にも書きましたが、イベントIDで開始か終了かの判定を行うことで、勤務表のようなフォーマットへの出力も可能になります。

イベントログで取得する時刻はOSによって協定世界時か日本標準時かが異なります。

Windows10はUTC(協定世界時)、Windows7含めそれ以前はJST(日本標準時)が取得されます。

37行目はWindows10の場合はそのままでいいですが、それより過去のOSの場合はコメントアウトしてください。

実行結果

このマクロは抽出する日時範囲を指定していないため、全てのイベントログが対象になります。そのため終わるまでに結構時間が掛かります。

実行すると以下のようにイミディエイトウィンドウに出力されます。

実際に使う場合はここで取得している日時を指定セルに貼り付けたりすることになると思います。

関連記事

サブコンテンツ

このページの先頭へ