Сразу оговорюсь, эта реализация а-ля "дешево и сердито", т.е. три функции в глобальник и вперед, т.е. для "экстренных" случаев, в тоже время уже есть реализованный COM-Объект: //infostart.ru/public/14386/
Итак, собственно простенькие функции:
//==================================================
Функция глПолучитьЭлементКоллекцииПоНомеру(Коллекция,Номер) Экспорт Далее
Функция глПолучитьКолВоЭлементовКоллекции(Коллекция) Экспорт Далее
Функция глПолучитьCOMОбъект(СтрокаПараметров) Экспорт Далее
//==================================================
//==================================================
// Функция возвращает элемент коллекции по номеру,
// так как в 1С 7.7 нет цикла, аналогичному
// конструкции "Для каждого...Из...Цикл...КонецЦикла;",
// которая есть в 1С 8.х
Функция глПолучитьЭлементКоллекцииПоНомеру(Коллекция,Номер) Экспорт
ScrptCtrl=СоздатьОбъект("MSScriptControl.ScriptControl");
ScrptCtrl.Language="vbscript";
ScrptCtrl.AddCode("
|Function EnumerateCollection(ObjSet,Number)
| Count = 0
| For Each Obj In ObjSet
| If Count = Number Then
| Set EnumerateCollection = Obj
| Exit Function
| End If
| Count = Count + 1
| Next
|End Function
|");
Возврат ScrptCtrl.Run("EnumerateCollection",Коллекция,Номер);
КонецФункции // глПолучитьЭлементКоллекцииПоНомеру
//==================================================
//==================================================
// Функция возвращает количество элементов коллекции
// т.к. не каждый класс имеет свойство Count. Если оно
// отсутствует, то для определения количества элементов
// в коллекции применяется эта функция
Функция глПолучитьКолВоЭлементовКоллекции(Коллекция) Экспорт
ScrptCtrl=СоздатьОбъект("MSScriptControl.ScriptControl");
ScrptCtrl.Language="vbscript";
ScrptCtrl.AddCode("
|Function GetCountCollection(ObjSet)
| Count = 0
| For Each Obj In ObjSet
| Count = Count + 1
| Next
| GetCountCollection = Count
|End Function
|");
Возврат ScrptCtrl.Run("GetCountCollection",Коллекция);
КонецФункции // глПолучитьКолВоЭлементовКоллекции
//==================================================
//==================================================
// Функция возвращает СОМОбъект по моникеру или имени файла
// Фактически заменяет функцию ПолучитьCOMОбъект в версии 1С 8.х
Функция глПолучитьCOMОбъект(СтрокаПараметров) Экспорт
ScrptCtrl=СоздатьОбъект("MSScriptControl.ScriptControl");
ScrptCtrl.Language="vbscript";
ScrptCtrl.AddCode("
|Function GetCOMObject(Str)
| Set GetCOMObject = GetObject(Str)
|End Function
|");
Возврат ScrptCtrl.Run("GetCOMObject",СтрокаПараметров);
КонецФункции // глПолучитьCOMОбъект
//==================================================
Примеры использования:
//==================================================
Процедура Выполнить()
// Таким образом, например, мы можем перебрать все дисковые накопители
// (HDD) на локальном компьютере из 1С 7.7
Сообщить("==============================================");
ИмяСервера = ".";
ServicesSet = глПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\" +
ИмяСервера + "\root\cimv2");
ObjectSet = ServicesSet.ExecQuery("Select * from Win32_DiskDrive");
Для Ном = 0 По глПолучитьКолВоЭлементовКоллекции(ObjectSet)-1 Цикл
Item = глПолучитьЭлементКоллекцииПоНомеру(ObjectSet,Ном);
Сообщить("Имя: " + Item.Caption);
КонецЦикла;
Сообщить("==============================================");
// Или, например, посмотреть все свойства процессоров на локальном
// компьютере из 1С 7.7
Locator = СоздатьОбъект("WbemScripting.SWbemLocator");
ServicesSet = Locator.ConnectServer(".");
ObjectSet = ServicesSet.InstancesOf("Win32_Processor");
Для Ном = 0 По глПолучитьКолВоЭлементовКоллекции(ObjectSet)-1 Цикл
Item = глПолучитьЭлементКоллекцииПоНомеру(ObjectSet,Ном);
Сообщить("==============================================");
Для Ном2=0 По глПолучитьКолВоЭлементовКоллекции(Item.Properties_)-1 Цикл
Prop=глПолучитьЭлементКоллекцииПоНомеру(Item.Properties_,Ном2);
Сообщить(Prop.Name+" =" + Prop.Value);
КонецЦикла;
Сообщить("==============================================");
КонецЦикла;
КонецПроцедуры // Выполнить
//==================================================
На самом деле технология WMI позволяет намного больше, чем просто просмотр свойств железа, но это уже совсем другая история…
З.Ы. В обработке - готовая демонстрация изложенных подходов...