WMI Fun !! 〜 WMI に興味がある方・システム管理者は必見です! 〜
 WMI Step|WMI Sample|WMI Reference|WMI Library|Enquete|About WMI Fun !!
 My Let'snote|Personal|Insomnia|Link

WMI Fun !! > WMI Step > WMI でイベントを取得してみよう

このエントリーをはてなブックマークに追加
ATM 利用時の入出金手数料が最大 7 回/月無料、楽天銀行
WMI スクリプトの実行結果を VBS を利用してメールで送信する方法を公開しています
パソコンに負荷のかからないウィルス対策なら ESET パーソナル セキュリティ

WMI でイベントを取得してみよう - WMI Step

Topics

今まではプロパティを取得・設定したりメソッドを実行していたりしまいたが、これだけでは芸がないと思ったのでこのステップではイベントの取得方法を紹介したいと思います。
今回は VBS を使用したサンプルを紹介しますが基本的には VB でも問題なく使用可能です。 (単に VB でやると私の環境では固まることがまれにあったので、今回は VBS で書いているだけだったりします…。)



Sample Code

Option Explicit

Dim PrcEvt
Dim Prc
Dim Locator
Dim Service
Dim MesStr

Set Locator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.ConnectServer

Set Prc = Service.ExecNotificationQuery _
  ("SELECT * FROM __InstanceCreationEvent " _
  & "WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'")

Set PrcEvt = Prc.NextEvent

If PrcEvt.TargetInstance.Name = "NOTEPAD.EXE" Then
  MsgBox "メモ帳が起動しました。OK を押すとメモ帳を終了します。"
  PrcEvt.TargetInstance.Terminate
End If


Set PrcEvt = Nothing
Set Prc = Nothing
Set Locator = Nothing
Set Service = Nothing



Comment

では実行してみましょう。
実行するとこのスクリプトはあるイベントが発生するまで待機して待ちづける事になります。
これを実現しているのは

Set Prc = Service.ExecNotificationQuery _
  ("SELECT * FROM __InstanceCreationEvent " _
  & "WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'")

Set PrcEvt= Prc.NextEvent

になります。
ExecNotificationQuery メソッドが WQL で指定した条件での通知を待つためのオブジェクトを作成しています。このメソッドを実行すると SWbemEventSource 型が帰ってきます。
この型には NextEvent メソッドが用意されていて WQL で指定したクエリーのイベントが発生するまでプログラムがそこで待つことになります。
今回は Win32_Process を使用したサンプルで何かアプリケーションを実行してプロセスが作成するイベントが発生するまで待つ形になります。

WQL で指定している WITHIN 句はポーリングする間隔 (秒) です。待ち続けている間ここで指定したポーリングの間隔でプロセスが作成されたか否かをチェックします。
__instancecreationevent はインスタンスが作成された際に発生するイベントを取得することを示しています。
TargetInstance isa 'Win32_Process' という形で明示しておく事によりイベント発生時にはTargetInstance を経由して Win32_Process の各種値の取得が可能です。

最後にイベントが発生した際に起動されたプロセスが「NOTEPAD.EXE」であればメッセージボックスを表示して勝手に終了させてしまいます。
メモ帳が起動したかどうか確認するために PrcEvt.TargetInstance.Name という記述を行っていますがこれは、イベントが発生した際の情報が Win32_Process クラスの実装のとおり PrcEvt.TargetInstance で参照できるようになるため可能になります。


ご意見・ご要望・ご感想をこちらのアンケートからお待ちしています
WMI に関して調べているけど探し物が見つからない…という方は Search Result から検索してみましょう!!

MCP (Microsoft Certified Professional)、 MCA (Microsoft Certified Associate)CompTIA A+
一応 MCP (Microsoft Certified Professional)、MCA (Microsoft Certified Associate)、
CompTIA A+ を所有してたりします…

- WMI Fun !! -
http://www.wmifun.net/
Microsoft 社のテクノロジーである WMI (Windows Management Instrumentation) の使い方を
Visual Basic を使ってのんびり公開しています
WMI は Windows 7 や Windows 8、Windows 10 で便利に使えますよ!
また VB や VBA、.Net (VB・C#) などの開発環境以外でも Win32/Win64 API に依存しないので WMIC や
WSH (VBS・JS)・PowerShell などスクリプト言語・コマンドラインから有効に活用が出来ます
Windows ベースの社内 IT システムに関する資産管理、アセットマネジメントや監視業務の効率化、
インベントリ情報収集系システムツール開発に WMI はお勧めです

This website is created by Toh.
Copyright(C) 1997-2016 WMI Fun !! All rights reserved.
WMI Fun !! へのリンクはご自由に…相互リンクに関するお問い合わせはアンケートページからお願いします

∧ ページの先頭へ…