FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9233
Вход
Пример использования WMI

Возможности (кратко) 1) Получение списков запущеных процессов 2) Получение данных по оборудованию (sn model ...) 3) Получение данных об установленном SoftWare + много чего еще + возможность получения данных с удаленного компьютера сети.


 
Прислал: Петров Андрей   Категория: Инструменты разработчика


Пример использования WMI

Здравствуйте все.

Захотелось добавить в решения очень полезную вещь - WMI. Странно почему-то ее мло кто использовал из тех кто на этом сайте бывает на форуме. Может это решение изменит положение :-)

Возможности (кратко)
1) Получение списков запущеных процессов
2) Получение данных по оборудованию (sn model ...)
3) Получение данных об установленном SoftWare
+ много чего еще
+ возможность получения данных с удаленного компьютера сети.

Более подробно:
1) Спсобы работы
Я видел 2 - один из них работает мягко говоря странно. Вот он:

1.1)Коннектимся к объекту winmgmts с параметрами. Я если честно вижу такое применение GETObject впервые.

strComputer = "."
objWMIService = GETOBJECT("winmgmts:{impersonationLevel=impersonate}!\\"+strComputer+"\root\cimv2")

Где strComputer - имя сетевого компьютера. "." - означает текущий компьютер.

Далее идет рабоита с objWMIService. Язык WMI очень похож на SQL (скорее всего это он и есть) поэтому не пугайтесь.

colSettings = objWMIService.ExecQuery("Select * from Win32_Processor",,48)

Здесь colsettings - объект с набором информации и методами !!! Короче то что нам и нужно
Самое важное здесь Win32_Processor - данные о процессоре(ах). Вся соль заключается именно в этом слове! Суть в том что данным на компьютере соответствует свое название Win32_XXX

Например :
Данные о работающих процессах Win32_Process
Данные о винчестере Win32_DiskDrive
и т.д.

К концу решения Вы сами сможете определить что чему соответствует.

Ну и вытягивание данных из colSettings

colItems = objWMIService.ExecQuery("Select * from Win32_VideoController",,48)
For Each objItem in colItems
? "VideoMfr: ", objItem.AdapterCompatibility
? "VideoRAM: ", objItem.AdapterRAM
? "VideoAdapter: ", objItem.Name
? "VideoProcessor: ", objItem.VideoProcessor
Next

Как я уже писал выше colSettings - набор объектов со свойствами. Здась представлены некоторые свойства объекта Win32_VideoController

Вот и все. Просто и красиво.

1.2) Второй способ отличается только подключением. Его мне подсказал Vit*.

m.strcomputer='.'
loSWbemLocator = CREATEOBJECT("WbemScripting.SWbemLocator")
loSWbemService = loSWbemLocator.ConnectServer(strcomputer)
colSettings = loSWbemService.ExecQuery("Select * From Win32_DiskDrive Where InterfaceType='IDE'",,48)
FOR EACH ObjItem IN colSettings
? ObjItem.PNPDeviceID
? get_sn(ObjItem.PNPDeviceID)
NEXT

Короче суть таже самая что и в первом варианте. Но этот вариант работает практически всегда в отличие от первого. Т.е. у меня были глюки с переносом программы с одного компьютера на другой На одном все работает а на другом не хочет - выдет ошибку. А второй вариант работал у меня всегда.

2) Об описании WMI
Все описание идет в поставке с Windows - как я понял. Т.е. если у Вас русский Windows то и описание на русском. СУПЕР!!!

Чтобы определить что чему соответствует скачайте WMITools и запустите WMI Object Browser. Он сначала представит
Вам номера версий каких-то.
Далее выдастся строчка connect to Namespace (root\cimv2) Здесь можно поставить имя компьютера с которого хотим получить данные
Например \\work6\root\cimv2
Жмем OK
Получаем окошко с заданием имени пользователя и пароля. Жмем OK. Если Вы получили окошко "Отказано в доступе" - Вы не администратор и НЕКОТОРЫЕ данные Вам не доступны. Но не все...
Получаем окошко в IE написанное на VBScript, помоему.

Далее один (или 2) элемент класса Win32_ComputerSystem
Раскрываем его и ищем Win32_SystemDevices - это список всего оборудования компа.
Раскрываем его и ищем например Win32_DiskDrive - это список всех жестких дисков со свойствами...

3) Помощь

Выбираем нужный объект и щелкаем на вопросительный знак в правом верхнем углу. А вот и описание всех свойств на РУССКОМ.

4) Немного об своих нароботках
4.1) SN винчестера
Меня тут запрегли на военной кафедре написать прогу по учету компов. К ним приезжает ФСБ и устанавливает норму секретности. Но за эту норму надо бабок выложить. Чтобы этого не делать надо представить список компов с описанием...
В описании надо указывать SN Model и т.д. всего к чему можно прицепить жучек.

Ну так вот, о чем это я. А да проблема в том что серийники просто так не найдешь даже через WMI.
Можно найти на
Память (только он практически всегда не задан)
Процессор (расшифрованная информация ASM -> CPUID)
И чего - то там еще.

Я накопал что можно найти и SN винчестера. Т.к. больше я нигде не нашел этой информации в Inet то раньше думал что можно это сделать только при помощи обращений к портам винчестера. Кстати привожу в архиве пример на Pascal-е
Задавал вопросы на форуме но увы.

Ну так вот все оказалось тупо до безобразия. SN хранится в свойстве PNPDeviceID класса Win32_DiskDrtive

Привожу функцию его получения которую использовал выше в примере

FUNCTION get_sn
LPARAMETERS str
PRIVATE x,k
m.x=RAT('\',m.str)
m.k=''
IF m.x#0
m.str=SUBSTR(m.str,m.x+1)
if at('&',m.str)=0
DO WHILE !EMPTY(m.str)
m.k=m.k+CHR(hextobyte(SUBSTR(m.str,3,2)))+CHR(hextobyte(SUBSTR(m.str,1,2)))
m.str=SUBSTR(m.str,5)
ENDDO
RETURN ALLTRIM(m.k)
endif
ENDIF
RETURN ''

FUNCTION hextobyte
LPARAMETERS str
PRIVATE a,k,r
m.str=UPPER(m.str)
m.a=SUBSTR(m.str,1,1)
m.k=ASC(m.a)-IIF(m.a<='9',ASC('0'),ASC('A')-10)
m.a=SUBSTR(m.str,2,1)
RETURN m.k*16+ASC(m.a)-IIF(m.a<='9',ASC('0'),ASC('A')-10)

Вот и все. Круто.

4.2) О свойствах.
В большинстве объектов с которыми я работал из win32_systemdevices есть одинаковвые свойства

Availability
Name
Caption
DeviceID
PNPdeviceID
status

О них можно почитать в свойствах объектов.

5) Благодарности

Спасибо Vit* что помог разобраться с глюками объектов соединения!

6) Необходимо для работы

Да совсем забыл сказать что WMI работает только начиная с Windows 2000 помоему

Для работы с другими Windows есть файл wmicore.exe

Скачать WMITools и WMICore можно с Microsoft. Ну и в крайнем случае пишите скину. Но они большие !!!
WMITools ~ 5 MB

7) Для чего это надо вообще :-)
Мне нужно было для проекта по сбору информации о компах + печать карточек на комп с информацией
А еще для привязки проги к железу. Чтоб не утащили на другой комп.

Спасибо. Надеюсь я внушил Вам чувство уверенности в WMI. Всем удачи.
 
Сделайте оценку этого решения Плохо Удовлетворительно Так себе Хорошо Отлично Текущая оценка: (4.542) Вложение [2.28]kb
Дополнения пользователей
Пример использования WMI
[+][?]
Андрей
04.01.04 16:34:28

Насчет серийника винчестера я погорячился. Он выводится не на всех компьютерах. А вот пример в
архиве выводит SN всегда. Ну по крайней мере у меня так.
Youri Shutenko
02.02.04 13:48:30

>>Язык WMI очень похож на SQL (скорее всего это он и есть) поэтому не пугайтесь.
Небольшая путаница -  запросы к свойствам классов WMI строятся на наборе ANSI SQL. WMI - это не
язык, а одна из систем управления ресурсами.

>>Все описание идет в поставке с Windows - как я понял. Т.е. если у Вас русский Windows то и
описание на русском. СУПЕР!!!
WMI SDK идет на английском. Я пока не видел MS трансляций на другие языки.

>>Да совсем забыл сказать что WMI работает только начиная с Windows 2000 помоему

Не совсем так. Многие сервисы доступны и на других реализациях MS Windows однако в большинстве
своем требуют дополнительной установки.


Здесь у меня вполне достаточное описание:
http://kodu.neti.ee/~juri4/vfpplus/wmi_01_ru.htm
Андрей
03.02.04 14:23:31

>> Небольшая путаница -  запросы к свойствам классов WMI строятся на наборе ANSI SQL. WMI - это не
язык, а одна из систем управления ресурсами.

Возможно.

>> Не совсем так. Многие сервисы доступны и на других реализациях MS Windows однако в большинстве
своем требуют дополнительной установки.

Я написал ниже что для остальных необходим WmiCore.

>> WMI SDK идет на английском. Я пока не видел MS трансляций на другие языки.

Что Вы имеете ввиду под трансляцией? Что именно транслируется? Сам хелп я в свою очередь не видел
на английском. Пробовал на Win 2000 (4 компьютера, установка естественно с разных дистрибутивов)

Насчет Вашей ссылки. Я ее первый раз увидел когда Вы ее написали здесь. Спасибо.
Андрей
14.02.04 14:08:09

Для тех кто не хочет искать вот ссылки
WMITools -
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=6430F853-1120-48DB-8CC5-F2ABDC3ED314

WMICore -
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=AFE41F46-E213-4CBF-9C5B-FBF236E0E875

И соответственно на файлы:

WMITools.exe -
http://download.microsoft.com/download/.NetStandardServer/Install/V1.1/NT5XP/EN-US/WMITools.exe

WMICore - http://download.microsoft.com/download/platformsdk/wmicore/1.5/W9XNT4/EN-US/wmicore.EXE
[Дополнить]



© 2000-2017 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика