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

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

Panasonic Let'snoteを長年愛用しています、その理由はMy Let'snoteで…
インクを買うよりもしかしたら安い?インクジェット複合機HP Photosmart 5510
白いご飯や日本酒にもとても合うにしんのきりこみがマイブームです

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)一応MCP(Microsoft Certified Professional)、MCA(Microsoft Certified Associate)所有してたりします…

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

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

∧ ページの先頭へ…