Возможности (кратко)
1) Получение списков запущеных процессов
2) Получение данных по оборудованию (sn model ...)
3) Получение данных об установленном SoftWare
+ много чего еще
+ возможность получения данных с удаленного компьютера сети.
Захотелось добавить в решения очень полезную вещь - WMI. Странно почему-то ее мло кто использовал
из тех кто на этом сайте бывает на форуме. Может это решение изменит положение :-)
Возможности (кратко)
1) Получение списков запущеных процессов
2) Получение данных по оборудованию (sn model ...)
3) Получение данных об установленном SoftWare
+ много чего еще
+ возможность получения данных с удаленного компьютера сети.
Более подробно:
1) Спсобы работы
Я видел 2 - один из них работает мягко говоря странно. Вот он:
1.1)Коннектимся к объекту winmgmts с параметрами. Я если честно вижу такое применение GETObject
впервые.
Где 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 ''
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. Всем удачи.
Насчет серийника винчестера я погорячился. Он выводится не на всех компьютерах. А вот пример в
архиве выводит 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