|
Чем может быть полезен этот инструмент для нас, разработчиков программного обеспечения? Очень многим. Но по порядку.
Что представляют собой обслуживаемые объекты в 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
Заменим имя локального компьютера на имя сетевого компьютера и исполним вышеприведенный код. Ну? Не вставая со своего любимого кресла(стула,дивана и так далее) мы получаем информацию о нужном нам адаптере.
Сказанное абзацем выше представляет собой демонстрацию лишь малой толики информации, которую можно получить используя это замечательное средство.
|