Zgodnie z obietnicą zaprezentuję dwa przykłady wykorzystania WMI z poziomu kodu VBA.
Przykład 1. Pobranie informacji dot. parametrów procesora:
01 | Sub WMI_Processor_Info() |
04 | Set objWMI = GetObject( "winmgmts:\\.\root\cimv2" ) |
06 | Dim objQuery As Object |
07 | Set objQuery = objWMI.ExecQuery( "Select * from Win32_Processor" ) |
09 | Dim objParam As Object |
10 | For Each objParam In objQuery |
11 | Debug.Print 1, objParam.Name |
12 | Debug.Print 2, objParam.Caption |
13 | Debug.Print 3, objParam.Version |
16 | Set objParam = Nothing |
17 | Set objQuery = Nothing |
Warto zwrócić uwagę, że w powyższym przykładzie wystarczy podmienić zapytanie SQL aby uzyskać informacje dot. innych parametrów naszego systemu lub komputera.
Przykład 2. Pobranie informacji o otwartych procesach i zamknięcie wszystkich dot. aplikacji MS Word.
01 | Sub WMI_Processes_Info_Close() |
04 | Set objWMI = GetObject( "winmgmts:\\.\root\cimv2" ) |
06 | Dim objQuery As Object |
07 | Set objQuery = objWMI.ExecQuery( "Select * from Win32_Process" ) |
09 | Dim objProces As Object |
10 | For Each objProces In objQuery |
13 | Debug.Print 1, objProces.Name |
14 | Debug.Print 2, objProces.Caption |
15 | Debug.Print 3, objProces.ProcessID |
18 | If objProces.Name = "WINWORD.EXE" Then |
23 | Set objProces = Nothing |
24 | Set objQuery = Nothing |
Warto pamiętać, że metoda Terminate zamyka aplikację bez dodatkowych pytań o zapisanie dokumentów. Oczywiście powyższe zadanie można wykonać szybciej odpowiednio konstruując zapytanie SQL co prezentuje poniższy kod VBA:
01 | Sub WMI_Processes_Close_MSWord() |
04 | Set objWMI = GetObject( "winmgmts:\\.\root\cimv2" ) |
06 | Dim objQuery As Object |
07 | Set objQuery = objWMI.ExecQuery( _ |
08 | "Select * from Win32_Process Where Name='WINWORD.EXE'" ) |
10 | Dim objProces As Object |
11 | For Each objProces In objQuery |
18 | Set objProces = Nothing |
19 | Set objQuery = Nothing |
Brak komentarzy:
Prześlij komentarz