środa, 21 maja 2014

Pobieranie informacji dot. systemu operacyjnego i parametrów komputera- 2/2

Zgodnie z obietnicą zaprezentuję dwa przykłady wykorzystania WMI z poziomu kodu VBA.

Przykład 1. Pobranie informacji dot. parametrów procesora:

01Sub WMI_Processor_Info()
02    
03    Dim objWMI As Object
04    Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
05    
06    Dim objQuery As Object
07    Set objQuery = objWMI.ExecQuery("Select * from Win32_Processor")
08    
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
14    Next
15 
16    Set objParam = Nothing
17    Set objQuery = Nothing
18    Set objWMI = Nothing
19    
20End Sub

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.

01Sub WMI_Processes_Info_Close()
02    
03    Dim objWMI As Object
04    Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
05    
06    Dim objQuery As Object
07    Set objQuery = objWMI.ExecQuery("Select * from Win32_Process")
08    
09    Dim objProces As Object
10    For Each objProces In objQuery
11    
12        'pobieramy informacje dot. procesów
13        Debug.Print 1, objProces.Name
14        Debug.Print 2, objProces.Caption
15        Debug.Print 3, objProces.ProcessID
16        
17        'zamykamy te, które dot. aplikacji MS Word
18        If objProces.Name = "WINWORD.EXE" Then
19            objProces.Terminate
20        End If
21    Next
22 
23    Set objProces = Nothing
24    Set objQuery = Nothing
25    Set objWMI = Nothing
26    
27End Sub

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:

01Sub WMI_Processes_Close_MSWord()
02    
03    Dim objWMI As Object
04    Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
05    
06    Dim objQuery As Object
07    Set objQuery = objWMI.ExecQuery( _
08        "Select * from Win32_Process Where Name='WINWORD.EXE'")
09    
10    Dim objProces As Object
11    For Each objProces In objQuery
12        
13        'zamykamy wszystkie aplikacje zwrócone przez zapytanie SQL
14        objProces.Terminate
15        
16    Next
17 
18    Set objProces = Nothing
19    Set objQuery = Nothing
20    Set objWMI = Nothing
21    
22End Sub

Brak komentarzy:

Prześlij komentarz