Juri Shutenko Personal Homepage. Visual FoxPro.

WMI - Windows Management Instrumentation. Введение

Windows® Management Instrumentation (WMI) представляет собой компонент операционной системы Microsoft® Windows® и является реализацией Web-Based Enterprise Management (WBEM). WMI использует индустриальный стандарт Common Information Model (CIM) для отображанеия систем, приложений, сетей, устройств и других обслуживаемых компонентов.
 

Чем может быть полезен этот инструмент для нас, разработчиков программного обеспечения? Очень многим. Но по порядку.
Что представляют собой обслуживаемые объекты в WMI?
Это логические или физические компоненты предприятия, такие как жеткие диски, сетевые рутеры, системы баз данных или компоненты операционных систем. Обслуживаемые объекты общаются с WMI через провайдера.
 
Как получить доступ к обслуживаемым объектам из программы Visual FoxPro?
Это достаточно просто и традиционно - создать объект, который будет извлекать информацию о состоянии соответствующих объектов.
 
Общий синтаксис с использованием моникера "winmgmts" приведен ниже:

loWMIService = GetObject("winmgmts:" + ;
   "{impersonationLevel=impersonate}!\\" + lcComputer + "\root\cimv2")

где lcComputer представляет собой имя компьютера в сети. Если вы желаете получить данные об объектах вашего локального компьютера, используйте в качестве его имени точку, то есть:

lcComputer="."

Для получения информации об обслуживаемом объекте необходимо выполнить запрос, основанный на классе WMI.(Их больше 630, но число установленных в системе, зависит от реализации операционной системы).
Синтаксис запроса составляется следующим образом:

<имя объекта/коллекции объектов> = loWMIService.ExecQuery ;
("Select * from <имя класса WMI>")

где имя объекта/коллекции объектов представляет собой стандартную VFP переменную, например: loPrinters или loSharedDisks
 
Например, я хочу получить данные о сетевом адаптере, установленном на моем компьютере. Для этого достаточно выполнить следующую программу:

LOCAL lcComputer, loWMIService,loItemCollection
lcComputer       = "."
loWMIService     = GetObject("winmgmts:\\" + lcComputer + "\root\cimv2")
loItemCollection = loWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration",,48)
For Each loItem in loItemCollection
IF !ISNULL(loItem.IPAddress)
   ? "Caption: " + loItem.Caption
   ? "DatabasePath: " + loItem.DatabasePath
   ? "Description: " + loItem.Description
   ? "Index: " + STR(loItem.Index)
   For i = 0 To ALEN(loItem.IPAddress,2)
      ? "IP address:" + loItem.IPAddress(i)
   Next
   ? "MACAddress: " + ;
      IIF(!IsNull(loItem.MACAddress),loItem.MACAddress,"Not defined for this type of adapters!")
   ? "ServiceName: " + loItem.ServiceName
   ? "SettingID: " + loItem.SettingID
ENDIF
Next

Если не установить фильтр по наличию IP адреса, система выдаст вам информацию о всех адаптерах, в том числе и софтерных

Заменим имя локального компьютера на имя сетевого компьютера и исполним вышеприведенный код. Ну? Не вставая со своего любимого кресла(стула,дивана и так далее) мы получаем информацию о нужном нам адаптере.
 
Сказанное абзацем выше представляет собой демонстрацию лишь малой толики информации, которую можно получить используя это замечательное средство.

Селектор для быстрого перехода на сайты, связанные с Visual FoxPro.