1С и Windows Script Host (WSH) и Windows Management Instrumentation (WMI). ОТ ТЕОРИИ К ПРАКТИКЕ. Часть III. Реестр




Описание возможностей Windows Script Host и Windows Management Instrumentation.
Подборка "скриптовых" функций и процедур.
Работа с реестром.

Предыдущие:

1С и WSH и WMI. ОТ ТЕОРИИ К ПРАКТИКЕ. Часть I: //infostart.ru/public/165702/
1С и WSH и WMI. ОТ ТЕОРИИ К ПРАКТИКЕ. Часть II: //infostart.ru/public/166391/

Практическая реализация:

Обработка 1С:Системный Администратор (WSH&WMI): //infostart.ru/public/172189/


ТЕОРИЯ


Microsoft Windows Script Host (WSH) — сервер сценариев Windows.

Используется в качестве инструмента разработки и выполнения специальных сценариев для операционной системы Windows.
Сценарии WSH пишутся на специализированных языках: Microsoft Visual Basic Script Edition (VBScript) или Microsoft JScript.
Свойства и методы объектов Microsoft WSH доступны также в приложениях, способных выступить в роли OLE-клиента.

WSH позволяет работать с:

    — Файловой системой;
    — Ресурсами локальной сети;
    — Реестром;
    — Специальными папками и ярлыками Windows;
    — Процессами. Запускать и контролировать их выполнение.

WSH позволяет взаимодействовать с Microsoft ActiveX:

    — ActiveX Data Object (ADO) — Доступ к базам данных;
    — Active Directory Service Interface (ADSI) — Службы каталогов;
    — Windows Management Instrumentation (WMI) — Инструментарий управления Windows.

Подробно свойства и методы объектов MS Windows Script Host изложены в файле Automation.chm, доступном в ссылках на скачивание.

Windows Management Instrumentation (WMI) — инструментарий управления Windows.

WMI — это одна из базовых технологий для централизованного наблюдения и управления компьютерной инфраструктуры под управлением платформы Windows.
WMI – это расширенная и адаптированная компанией Microsoft реализация стандарта WBEM (WebBased Enterprise Management) компании DMTF Inc.
Основа WBEM — Common Information Model (CIM), реализующая объектно-ориентированный подход к представлению компонентов системы.

WMI позволяет работать с:
    — Системой;
    — Приложениями;
    — Оборудованием;
    — Сетями;
    др. управляемыми компонентами.

Подробно о Windows Management Instrumentation (англ.): http://msdn.microsoft.com/en-us/library/windows/desktop/aa394572%28v=vs.85%29.aspx


ПРАКТИКА


// Корневые ключи реестра и их сокращения:
// HKEY_CURRENT_USER — HKCU
// HKEY_LOCAL_MACHINE — HKLM
// HKEY_CLASSES_ROOT — HKCR
// HKEY_USERS — HKEY_USERS
// HKEY_CURRENT_CONFIG — HKEY_CURRENT_CONFIG


Список процедур и функций: ЗарегистрироватьФайлDLL() — Ф., позволяющая зарегистрировать файл типа DLL. УстановленаПрограмма() — Ф., позволяющая проверить установлена/не установлена программа. Computer_Programs_Product() — Ф., позволяющая получить информацию об установленных программах лок./уд. компьютере (WMI). Computer_Programs_Registry() — Ф., позволяющая получить информацию об установленных программах лок./уд. компьютере (REGISTRY). ИзменитьСтартовуюСтраницуInternetExplorer() — Ф., позволяющая изменить стартовую страницу Internet Explorer лок. компьютера. RegRead() — Ф. чтения значения ключа или группы из системного реестра. RegWrite() — Ф. создания в системном реестре ключа или группы. RegDelete() — Ф. удаления ключа или группы из системного реестра. Computer_RegistryInformation() — Ф., позволяющая получить информацию о реестре лок./уд. компьютера, в т.ч. дату установки Windows. Computer_Description() — Ф., позволяющая записать в описание лок./уд. компьютера имя доменапользователя, работающего на нем.— WindowsInfo() — Ф., позволяющая получить информацию об установленной Windows на лок. компьютере.get_windows_key_via_reg_wmi.vbs. VBS-Срипт.  Получение серийного номера Windows.


// Функция, позволяющая зарегистрировать файл типа DLL.
//
// ВАЖНО:

//
// Windows User Account Control (UAC) в ОС Vista и выше
// может помешать регистрации DLL.
//
// В этом случае необходимо:
// Вручную зарегистрировать фалй от имени «Администратора»:
// «C:Documents and SettingsAll Users1С_COMObjectX.DLL»
// Отключать UAC не рекомендуется.
//
// Возвращает:
//     В случае успеха — COMОбъект.
//     Иначе — Неопределено.
// Параметры:
//     ИмяКаталогаDLL — Относительно переменной среды %ALLUSERSPROFILE%.
//     ИмяФайлаDLL — Короткое имя файла DLL.
//     ИмяМакетаDLL — Имя двоичного макета объекта, в котором находится файл DLL.
//     ИмяCOMОбъекта — Имя создаваемого COMОбъекта.
//
&НаСервере
Функция ЗарегистрироватьФайлDLL(ИмяКаталогаDLL = «1С_COMObject» , ИмяФайлаDLL = «X.DLL», ИмяМакетаDLL = «XY», ИмяCOMОбъекта = «XYZ»)
    
    ЭтотОбъект = РеквизитФормыВЗначение(«Объект»);
    
    ALLUSERSPROFILE = Неопределено;
    Попытка
        WshShell = Новый COMОбъект(«WScript.Shell»);
        WshSysEnv = WshShell.Environment(«Process»);
        ALLUSERSPROFILE = WshSysEnv.Item(«ALLUSERSPROFILE»);
    Исключение
         Сообщить(НСтр(«ru = ‘»+ОписаниеОшибки()+«‘»), СтатусСообщения.Внимание);
         Возврат Неопределено;
    КонецПопытки;

    КаталогDLL = Новый Файл(ALLUSERSPROFILE + «» + ИмяКаталогаDLL);
    Если НЕ КаталогDLL.Существует() Тогда
        Попытка
            СоздатьКаталог(КаталогDLL.ПолноеИмя);
        Исключение
            Сообщить(НСтр(«ru = ‘»+ОписаниеОшибки()+«‘»), СтатусСообщения.Внимание);
            Возврат Неопределено;
        КонецПопытки;
    КонецЕсли;
    
    ИмяФайлаDLL = КаталогDLL.ПолноеИмя + «» + ИмяФайлаDLL;
    ФайлDLL = Новый Файл(ИмяФайлаDLL);
    Если НЕ ФайлDLL.Существует() Тогда
        Попытка
            МакетDLL = ЭтотОбъект.ПолучитьМакет(ИмяМакетаDLL);
            МакетDLL.Записать(ФайлDLL.ПолноеИмя);
        Исключение
            Сообщить(НСтр(«ru = ‘»+ОписаниеОшибки()+«‘»), СтатусСообщения.Внимание);
            Возврат Неопределено;
        КонецПопытки;
    КонецЕсли;
    
    Попытка
        // «/s» — «тихий» режим REGsvr32: Окна сообщений не отображаются.
        // 0 — Без окна WshShell.
        // Истина — Дождаться завершения.
        WshShell = Новый COMОбъект(«WScript.Shell»);
        WshShell.Run(«REGsvr32 /s « + ИмяФайлаDLL, 0, Истина);
    Исключение
        //Сообщить(НСтр(«ru = ‘»+ОписаниеОшибки()+»‘»), СтатусСообщения.Внимание);
        ЗапуститьПриложение(«REGsvr32 /s « + ИмяФайлаDLL, , Истина);
    КонецПопытки;
    
    // Проверка регистрации.
    НовыйCOMОбъект = ПолучитьНовыйCOMОбъект(ИмяCOMОбъекта);
    
    Возврат НовыйCOMОбъект;

КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ПолучитьНовыйCOMОбъект(ИмяCOMОбъекта)
    
    Попытка
        НовыйCOMОбъект = Новый COMОбъект(ИмяCOMОбъекта);
        Возврат НовыйCOMОбъект;
    Исключение
        Возврат Неопределено;
    КонецПопытки;
    
    Возврат Неопределено;
    
КонецФункции


// Функция, позволяющая проверить установлена/не установлена программа.
// Проверяет путь в системном реестре и существование запускаемого файла для программы,
// установку которой на компьютере необходимо проверить.

// Используется функция GetFileInfo, описанная в Части II.
//
&НаКлиентеНаСервереБезКонтекста
Функция УстановленаПрограмма(Программа = «LibreOffice»)
 

    Файл = Неопределено;
    Если Программа = «LibreOffice» Тогда
        Файл = RegRead(«HKLMSoftwareLibreOfficeLibreOffice3.6Path»);
    Иначе
        // Файл = …
    КонецЕсли;
    
    Если Файл = Неопределено Тогда
        Возврат Ложь;
    КонецЕсли;
    
    ПрограммаЗапуска = GetFileInfo(Файл);
    
    Если НЕ ПрограммаЗапуска = Неопределено Тогда
        // … Дополнительная проверка при необходимости имени, размера, ….
        Возврат Истина;

    КонецЕсли;
    
    Возврат Ложь;
    
КонецФункции


// Функция, позволяющая получить информацию об установленных программах локальном/удаленном компьютере.
// Параметры:
//    Computer — Имя компьютера.
// Возвращаемое значение:
//    Таблица значений.
//
// Примечания:
// 1. Только программы, установленные с помощью Windows Installer.
// 2. Полнота информации в Windows 2000/XP/2003 ограничена.
// 3. Может не работать на 64-битных ОС.
// 4. Медленнее чтения из регистра.
//

// При запуске на  на компьютере под управлением Windows Server 2003 возможна ошибка чтения данных,
// т.к. поставщик объекта Win32_Product по умолчанию в Windows Server 2003 не устаналивается
.
// Установка:
// Панель управления — Установка и уделение программ — Установка компонентов Windows — Средства наблюдения и управления:

// Компонента: «Поставщик установщика Windows через WMI»
.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
// Подробности на странице: //infostart.ru/public/165702/
//

&НаСервереБезКонтекста
Функция Computer_Programs_Product(Computer = «.»)
    
    Win32_ProductInfo = Новый ТаблицаЗначений;
    Win32_ProductInfo.Колонки.Добавить(«Caption»);
    Win32_ProductInfo.Колонки.Добавить(«Description»);
    Win32_ProductInfo.Колонки.Добавить(«HelpLink»);
    Win32_ProductInfo.Колонки.Добавить(«HelpTelephone»);
    Win32_ProductInfo.Колонки.Добавить(«IdentifyingNumber»);
    Win32_ProductInfo.Колонки.Добавить(«InstallDate»);
    Win32_ProductInfo.Колонки.Добавить(«InstallLocation»);
    Win32_ProductInfo.Колонки.Добавить(«InstallSource»);
    Win32_ProductInfo.Колонки.Добавить(«InstallState»);
    Win32_ProductInfo.Колонки.Добавить(«Language»);
    Win32_ProductInfo.Колонки.Добавить(«LocalPackage»);
    Win32_ProductInfo.Колонки.Добавить(«Name»);
    Win32_ProductInfo.Колонки.Добавить(«PackageCache»);
    Win32_ProductInfo.Колонки.Добавить(«PackageCode»);
    Win32_ProductInfo.Колонки.Добавить(«PackageName»);
    Win32_ProductInfo.Колонки.Добавить(«ProductID»);
    Win32_ProductInfo.Колонки.Добавить(«RegCompany»);
    Win32_ProductInfo.Колонки.Добавить(«RegOwner»);
    Win32_ProductInfo.Колонки.Добавить(«SKUNumber»);
    Win32_ProductInfo.Колонки.Добавить(«Transforms»);
    Win32_ProductInfo.Колонки.Добавить(«URLInfoAbout»);
    Win32_ProductInfo.Колонки.Добавить(«URLUpdateInfo»);
    Win32_ProductInfo.Колонки.Добавить(«Vendor»);
    Win32_ProductInfo.Колонки.Добавить(«Version»);
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект(«winmgmts:\» + Computer + »
ootcimv2″
);
        Win32_Product = WinMGMT.ExecQuery(«SELECT * FROM Win32_Product»);
        
        Для Каждого Product ИЗ Win32_Product Цикл
            ProductInfo = Win32_ProductInfo.Добавить();
            ProductInfo.Caption = ПолучитьЗначениеВПопытке(Product, «Caption»);
            ProductInfo.Description = ПолучитьЗначениеВПопытке(Product, «Description»);
            ProductInfo.HelpLink = ПолучитьЗначениеВПопытке(Product, «HelpLink»);
            ProductInfo.HelpTelephone = ПолучитьЗначениеВПопытке(Product, «HelpTelephone»);
            ProductInfo.IdentifyingNumber = ПолучитьЗначениеВПопытке(Product, «IdentifyingNumber»);
            InstallDate = ПолучитьЗначениеВПопытке(Product, «InstallDate»);
            Попытка
                ProductInfo.InstallDate = Дата(Лев(InstallDate,8));
            Исключение
                ProductInfo.InstallDate = InstallDate;
            КонецПопытки;
            ProductInfo.InstallLocation = ПолучитьЗначениеВПопытке(Product, «InstallLocation»);
            ProductInfo.InstallSource = ПолучитьЗначениеВПопытке(Product, «InstallSource»);
            InstallState = ПолучитьЗначениеВПопытке(Product, «InstallState»);
            Если InstallState = 6 Тогда
                ProductInfo.InstallState = «Bad Configuration»;
            ИначеЕсли InstallState = 2 Тогда
                ProductInfo.InstallState = «Invalid Argument»;
            ИначеЕсли InstallState = 1 Тогда
                ProductInfo.InstallState = «Unknown Package»;
            ИначеЕсли InstallState = 1 Тогда
                ProductInfo.InstallState = «Advertised»;
            ИначеЕсли InstallState = 2 Тогда
                ProductInfo.InstallState = «Absent»;
            ИначеЕсли InstallState = 5 Тогда
                ProductInfo.InstallState = «Installed»;
            Иначе
                ProductInfo.InstallState = «Invalid State»;
            КонецЕсли;
            Language = ПолучитьЗначениеВПопытке(Product, «Language»);
            Если Language = «1033» Тогда
                ProductInfo.Language = «Английский»;
            ИначеЕсли Language = «1049» Тогда
                ProductInfo.Language = «Русский»;
            ИначеЕсли Language = «0» Тогда
                ProductInfo.Language = «»;
            Иначе
                ProductInfo.Language = Language;
            КонецЕсли;
            ProductInfo.LocalPackage = ПолучитьЗначениеВПопытке(Product, «LocalPackage»);
            ProductInfo.Name = ПолучитьЗначениеВПопытке(Product, «Name»);
            ProductInfo.PackageCache = ПолучитьЗначениеВПопытке(Product, «PackageCache»);
            ProductInfo.PackageCode = ПолучитьЗначениеВПопытке(Product, «PackageCode»);
            ProductInfo.PackageName = ПолучитьЗначениеВПопытке(Product, «PackageName»);
            ProductInfo.ProductID = ПолучитьЗначениеВПопытке(Product, «ProductID»);
            ProductInfo.RegCompany = ПолучитьЗначениеВПопытке(Product, «RegCompany»);
            ProductInfo.RegOwner = ПолучитьЗначениеВПопытке(Product, «RegOwner»);
            ProductInfo.SKUNumber = ПолучитьЗначениеВПопытке(Product, «SKUNumber»);
            ProductInfo.Transforms = ПолучитьЗначениеВПопытке(Product, «Transforms»);
            ProductInfo.URLInfoAbout = ПолучитьЗначениеВПопытке(Product, «URLInfoAbout»);
            ProductInfo.URLUpdateInfo = ПолучитьЗначениеВПопытке(Product, «URLUpdateInfo»);
            ProductInfo.Vendor = ПолучитьЗначениеВПопытке(Product, «Vendor»);
            ProductInfo.Version = ПолучитьЗначениеВПопытке(Product, «Version»);
        КонецЦикла;
        
    Исключение
    КонецПопытки;

    Win32_ProductInfo.Сортировать(«Name»);
    
    Возврат Win32_ProductInfo;
    
КонецФункции

&НаСервереБезКонтекста
Функция ПолучитьЗначениеВПопытке(хОбъект, хРеквизит)
    
    Попытка
        Возврат хОбъект[хРеквизит];
    Исключение
        Возврат Неопределено;
    КонецПопытки;
    
    Возврат Неопределено;
    
КонецФункции


// Функция, позволяющая получить информацию об установленных программах локальном/удаленном компьютере.
// Параметры:
//    Computer — Имя компьютера.
// Возвращаемое значение:
//    Таблица значений.
//
// Примечания:
// 1. Полнота информации [в сравнении с функцией Computer_Programs_Product()]:
//        — Количество программ больше, т.к. нет ограничения на «Только программы, установленные с помощью Windows Installer».
//        — Количество данных о конкретной программе меньше, но основная информация доступна.
// 2. Поддержка 64-битных ОС (из-за отсутствия 64-битной Windows — не проверялось).
// 3. Быстрее, чем при использовании WMI: (
«SELECT * FROM Win32_Product»).
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
// Подробности на странице: //infostart.ru/public/165702/
//

&НаСервереБезКонтекста
Функция Computer_Programs_Registry(Computer = «.»)
    
    Win32_ProductInfo
= Новый ТаблицаЗначений;
    Win32_ProductInfo.Колонки.Добавить(«Caption»);
    Win32_ProductInfo.Колонки.Добавить(«Description»);
    Win32_ProductInfo.Колонки.Добавить(«HelpLink»);
    Win32_ProductInfo.Колонки.Добавить(«HelpTelephone»);
    Win32_ProductInfo.Колонки.Добавить(«IdentifyingNumber»);
    Win32_ProductInfo.Колонки.Добавить(«InstallDate»);
    Win32_ProductInfo.Колонки.Добавить(«InstallLocation»);
    Win32_ProductInfo.Колонки.Добавить(«InstallSource»);
    Win32_ProductInfo.Колонки.Добавить(«InstallState»);
    Win32_ProductInfo.Колонки.Добавить(«Language»);
    Win32_ProductInfo.Колонки.Добавить(«LocalPackage»);
    Win32_ProductInfo.Колонки.Добавить(«Name»);
    Win32_ProductInfo.Колонки.Добавить(«PackageCache»);
    Win32_ProductInfo.Колонки.Добавить(«PackageCode»);
    Win32_ProductInfo.Колонки.Добавить(«PackageName»);
    Win32_ProductInfo.Колонки.Добавить(«ProductID»);
    Win32_ProductInfo.Колонки.Добавить(«RegCompany»);
    Win32_ProductInfo.Колонки.Добавить(«RegOwner»);
    Win32_ProductInfo.Колонки.Добавить(«SKUNumber»);
    Win32_ProductInfo.Колонки.Добавить(«Transforms»);
    Win32_ProductInfo.Колонки.Добавить(«URLInfoAbout»);
    Win32_ProductInfo.Колонки.Добавить(«URLUpdateInfo»);
    Win32_ProductInfo.Колонки.Добавить(«Vendor»);
    Win32_ProductInfo.Колонки.Добавить(«Version»);
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект(«winmgmts:\» + Computer + »
ootdefault:StdRegProv»
);
        
        HKCU = 2147483649;
        HKLM = 2147483650;
        
        HKCUPath = «SOFTWAREMicrosoftWindowsCurrentVersionUninstall»;
        HKLMPath32 = «SOFTWAREMicrosoftWindowsCurrentVersionUninstall»;
        HKLMPath64 = «SOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionUninstall»;
        
        Computer_Programs_Registry_Key(WinMGMT, HKCU, HKCUPath   , Win32_ProductInfo);
        Computer_Programs_Registry_Key(WinMGMT, HKLM, HKLMPath32, Win32_ProductInfo);
        Computer_Programs_Registry_Key(WinMGMT, HKLM, HKLMPath64, Win32_ProductInfo);
        
    Исключение
    КонецПопытки;
    
    Win32_ProductInfo.Сортировать(«Name»);
    
    Возврат Win32_ProductInfo;
    
КонецФункции
    
&НаСервереБезКонтекста
Функция Computer_Programs_Registry_Key(WinMGMT, HK, HKPath, Win32_ProductInfo)
    
    Win32_Product = Новый Массив;
    Попытка
        WinMGMT.EnumKey(HK, HKPath, Win32_Product);
        Если Win32_Product = NULL Тогда
            Возврат Неопределено;
        КонецЕсли;
    Исключение
        Возврат Неопределено;
    КонецПопытки;
    
    Для Каждого Product ИЗ Win32_Product Цикл
        Name = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «DisplayName»);
        Version = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «DisplayVersion»);
        ProductID = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «ProductGuid»);
        ParentName = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «ParentDisplayName»);
        NameString = Win32_ProductInfo.Найти(Name, «Name»);
        Если Name = Неопределено ИЛИ (НЕ NameString = Неопределено И NameString.Version = Version) Тогда
            Продолжить;
        КонецЕсли;
        ProductInfo = Win32_ProductInfo.Добавить();
        ProductInfo.Caption = Name;
        ProductInfo.Description = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «Description»);
        Если НЕ ЗначениеЗаполнено(ProductInfo.Description) Тогда
            ProductInfo.Description = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «Comments»);
        КонецЕсли;
        Если НЕ ЗначениеЗаполнено(ProductInfo.Description) Тогда
            ProductInfo.Description = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «Readme»);
        КонецЕсли;
        Если НЕ ЗначениеЗаполнено(ProductInfo.Description) Тогда
            ProductInfo.Description = Name;
        КонецЕсли;
        ProductInfo.HelpLink = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «HelpLink»);
        ProductInfo.HelpTelephone = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «HelpTelephone»);
        Если НЕ ЗначениеЗаполнено(ProductID) Тогда
            IdentifyingNumber = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «UninstallString»);
            Если НЕ ЗначениеЗаполнено(IdentifyingNumber) Тогда
                IdentifyingNumber = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «ModifyPath»);
            КонецЕсли;
            Если ЗначениеЗаполнено(IdentifyingNumber) Тогда
                ПозицияЛевойСкобки = Найти(IdentifyingNumber, «{«);
                ПозицияПравойСкобки = Найти(IdentifyingNumber, «}»);
                Если ПозицияЛевойСкобки > 0 И ПозицияПравойСкобки > 0 Тогда
                    ProductInfo.IdentifyingNumber = Сред(IdentifyingNumber, ПозицияЛевойСкобки, ПозицияПравойСкобкиПозицияЛевойСкобки+1);
                КонецЕсли;
            КонецЕсли;
        Иначе
            ProductInfo.IdentifyingNumber = ProductID;
        КонецЕсли;
        InstallDate = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «InstallDate»);
        Попытка
            ProductInfo.InstallDate = Дата(Лев(InstallDate,8));
        Исключение
            ProductInfo.InstallDate = InstallDate;
        КонецПопытки;
        ProductInfo.InstallLocation = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «InstallLocation»);
        ProductInfo.InstallSource = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «InstallSource»);
        ProductInfo.InstallState = Неопределено;
        ProductInfo.Language = Неопределено;
        ProductInfo.LocalPackage = Неопределено;
        ProductInfo.Name = Name;
        ProductInfo.PackageCache = Неопределено;
        ProductInfo.PackageCode = Неопределено;
        ProductInfo.PackageName = Неопределено;
        ProductInfo.ProductID = ProductID;
        ProductInfo.RegCompany = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «RegCompany»);
        ProductInfo.RegOwner = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «RegOwner»);
        ProductInfo.SKUNumber = Неопределено;
        ProductInfo.Transforms = Неопределено;
        ProductInfo.URLInfoAbout = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «URLInfoAbout»);
        ProductInfo.URLUpdateInfo = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «URLUpdateInfo»);
        ProductInfo.Vendor = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «Publisher»);
        ProductInfo.Version = Version;
    КонецЦикла;
    
КонецФункции

&НаСервереБезКонтекста
Функция ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKXXPath, Win32_ProductInfo, Product, KeyName)
    
    Попытка
        Value = Неопределено;
        WinMGMT.GetStringValue(HK, HKXXPath + Product, KeyName, Value);
        Если Value = NULL ИЛИ СтрДлина(Value) = 0 Тогда
            Возврат Неопределено;
        Иначе
            Возврат Value;
        КонецЕсли;
    Исключение
        Возврат Неопределено;
    КонецПопытки;
    
    Возврат Неопределено;
       
КонецФункции


// Функция, позволяющая изменить стартовую страницу Internet Explorer локального компьютера.
// Для бухгалтеров — одно, для менеджеров — другое, …
//

&НаКлиентеНаСервереБезКонтекста
Функция ИзменитьСтартовуюСтраницуInternetExplorer(НоваяСтраница)
    
    ТекущаяСтраница = RegRead(«HKCUSOFTWAREMicrosoftInternet ExplorerMainStart Page»);
    Сообщить(«Предыдущая стартовая страница IE: « + ТекущаяСтраница);
    
    RegWrite(«HKCUSOFTWAREMicrosoftInternet ExplorerMainStart Page», НоваяСтраница, «REG_SZ»);
    
    ТекущаяСтраница = RegRead(«HKCUSOFTWAREMicrosoftInternet ExplorerMainStart Page»);
    Сообщить(«Новая стартовая страница IE: « + ТекущаяСтраница);
    
КонецФункции


// Функция чтения значения ключа или группы из системного реестра.
// Возвращаемые значения типа:
// REG_SZ — строка.
// REG_DWORD — целое число.
// REG_BINARY — массив целый чисел
// REG_EXPAND_SZ — строка.
// REG_MULTI_SZ — массив строк.

&НаКлиентеНаСервереБезКонтекста
Функция RegRead(Путь = «HKLMSoftwareNokia»)
    
    Значение = Неопределено;
    
    Попытка
        WshShell = Новый COMОбъект(«WScript.Shell»);
        Значение = WshShell.RegRead(Путь);
    Исключение
    КонецПопытки;
    
    Возврат Значение;
    
КонецФункции


// Функция создания в системном реестре ключа или группы.
//
&НаКлиентеНаСервереБезКонтекста
Функция RegWrite(Путь = «HKLMSoftwareNokia», Ключ = «Nokia_», Тип = «REG_SZ»)
    
    Значение = Неопределено;
    
    Попытка
        WshShell = Новый COMОбъект(«WScript.Shell»);
        WshShell.RegWrite(Путь, Ключ, Тип);
    
        Значение = WshShell.RegRead(Путь);
    Исключение
    КонецПопытки;
    
    Если НЕ Значение = Неопределено Тогда
        Возврат Истина;
    КонецЕсли;
    
    Возврат Ложь;

КонецФункции


// Функция удаления ключа или группы из системного реестра.
//
&НаКлиентеНаСервереБезКонтекста
Функция RegDelete(Путь = Неопределено)
    
    Если Путь = Неопределено Тогда
        Возврат Ложь;
    КонецЕсли;
    
    Значение = Неопределено;
    Попытка
        WshShell = Новый COMОбъект(«WScript.Shell»);
        WshShell.RegDelete(Путь);
        
        Значение = WshShell.RegRead(Путь);
    Исключение
    КонецПопытки;
    
    Если Значение = Неопределено Тогда
        Возврат Истина;
    КонецЕсли;
    
    Возврат Ложь;
    
КонецФункции


// Функция, позволяющая получить информацию о реестре локального/удаленного компьютера, в т.ч. дату установки Windows.
// Параметры:
//    Computer — Имя компьютера.
// Возвращаемое значение:
//    Структура.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
// Подробности на странице: //infostart.ru/public/165702/
//
&НаСервереБезКонтекста

Функция Computer_RegistryInformation(Computer = «.»)
    
    WinRegistryInfo = Новый Структура(«Name,Description,InstallDate,CurrentSize,MaximumSize»);
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект(«winmgmts:\» + Computer + »
ootcimv2″
);

        Win32_Registry = WinMGMT.ExecQuery(«SELECT * FROM Win32_Registry»);
        
        Для Каждого Registry ИЗ Win32_Registry Цикл
            WinRegistryInfo.Name = Registry.Name;
            WinRegistryInfo.Description = Registry.Description;
            // Дата установки Windows.
            Попытка
                WinRegistryInfo.InstallDate = Дата(Лев(Registry.InstallDate,14));
            Исключение
            КонецПопытки;
            WinRegistryInfo.CurrentSize = Registry.CurrentSize;
            WinRegistryInfo.MaximumSize = Registry.MaximumSize;
        КонецЦикла;
        
    Исключение
    КонецПопытки;
    
    Возврат WinRegistryInfo;

КонецФункции


// Функция, позволяющая записать в описание локального/удаленного компьютера имя доменапользователя, работающего на нем.
// Описание компьютера отображается в качестве комментария в сетевом окружении.
// Изменяет параметр реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParameterssrvcomment
// Применено WMI, т.к.:
// Изменения параметра в реестре требует перезагрузки компьютера для вступления в силу изменения,
// а при использовании WMI — изменения сразу вступают в силу.
//
// Параметры:
//    Computer — Имя компьютера.
// Возвращаемое значение:
//    Нет.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
// Подробности на странице: //infostart.ru/public/165702/
//
&НаСервереБезКонтекста
Функция Computer_Description(Computer = «.»)
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект(«winmgmts:\» + Computer + »
ootcimv2″
);

        
        Win32_ComputerSystem = WinMGMT.ExecQuery(«SELECT * FROM Win32_ComputerSystem»);
        
        Для Каждого ComputerSystem ИЗ Win32_ComputerSystem Цикл
            NewDescription = ComputerSystem.UserName;
        КонецЦикла;
        
        Win32_OS = WinMGMT.InstancesOf(«Win32_OperatingSystem»);
        
        Для Каждого OS ИЗ Win32_OS Цикл
            OS.Description = NewDescription;
            OS.Put_();
        КонецЦикла;
        
    Исключение
    КонецПопытки;
    
КонецФункции


// Функция, позволяющая получить информацию об установленной Windows на локальном компьютере.
// Параметры:
//    НЕТ.
// Возвращаемое значение:
//    Структура.
//
&НаСервереБезКонтекста
Функция WindowsInfo()
    
    Path = «HKLMSOFTWAREMicrosoftWindows NTCurrentVersion»;
    WINInfo = Новый Структура(«BuildLab,CSDVersion,CurrentBuildNumber,CurrentVersion,ProductId,ProductName,RegisteredOrganization,RegisteredOwner,SystemRoot»);
    
    Попытка
        WshShell = Новый COMОбъект(«WScript.Shell»);
        WINInfo.BuildLab = WshShell.RegRead(Path+«BuildLab»);
        WINInfo.CSDVersion = WshShell.RegRead(Path+«CSDVersion»);
        WINInfo.CurrentBuildNumber = WshShell.RegRead(Path+«CurrentBuildNumber»);
        WINInfo.CurrentVersion = WshShell.RegRead(Path+«CurrentVersion»);
        WINInfo.ProductId = WshShell.RegRead(Path+«ProductId»);
        WINInfo.ProductName = WshShell.RegRead(Path+«ProductName»);
        WINInfo.RegisteredOrganization = WshShell.RegRead(Path+«RegisteredOrganization»);
        WINInfo.RegisteredOwner = WshShell.RegRead(Path+«RegisteredOwner»);
        WINInfo.SystemRoot = WshShell.RegRead(Path+«SystemRoot»);
    Исключение
    КонецПопытки;

    Возврат WINInfo;
    
КонецФункции

 


VBS-Срипт. Получение серийного номера Windows.

‘ Получение серийного номера Windows.
‘ Нижеследующий текст необходимо записать в файл, например с именем get_windows_key_via_reg_wmi.vbs

‘ Командная строка: get_windows_key_via_reg_wmi.vbs
‘ где — Имя удаленного компьютера.
По-умолчанию (без параметра) скрипт выполняется относительно локального компьютера.

‘ Методы считывания: Утилита REG.EXE  и WMI. Необходимые настройки.
‘ При считывании из реестра используется утилита REG.EXE.
‘ При этом на целевом (удаленном) компьютере должна быть запущена служба «Удаленный реестр».
‘ Если невозможно прочитать значение ключа удаленного реестра, используется WMI.
‘ При этом на целевом компьютере должен быть настроен WMI для удаленного доступа. см. подробности: //infostart.ru/public/172189

‘ Windows x32/x64. Особенности использования. Известные проблемы (условие: настройки произведены).
‘ Рекомендованный способ применения: Локально с правами администратора.
‘ Получение серийного номера удаленно.
‘ При удаленном получении серийного номера результат не всегда положительный.
‘ Исходный ПК x64, Целевой ПК x64 — результат положительный.
‘ Исходный ПК x64, Целевой ПК x32 — результат положительный.
‘ Исходный ПК x32, Целевой ПК x32 — результат положительный.
‘ Исходный ПК x32, Целевой ПК x64 — REG — отрицательный, WMI — положительный результат.
‘ Пояснение:
‘ При считывании из x32-Клиента в следствии отображения x64-Ключей на x32-Ключи происходит обращение к ветке реестра:
‘ HKLMSOFTWAREWOW6432NodeMicrosoftWindows NTCurrentVersionDigitalProductID
‘ Ключ DigitalProductID в разделе HKLMSOFTWAREWOW6432NodeMicrosoftWindows NTCurrentVersion по-умолчанию отсутствует.

‘ Примечание:
‘ Проверка существования компьютера в сети и его доступности не осуществляется.

On Error Resume Next

const HKLM = &H80000002
const KEY_QUERY_VALUE = &H1

Set WshShell = CreateObject(«WScript.Shell»)

Set WshArg = WScript.Arguments
If WshArg.Count > 0 Then
    isLocalHost = FALSE
    CompName = WshArg(0)
    If CompName = «.» Then
        isLocalHost = TRUE
        CompName = WshShell.ExpandEnvironmentStrings(«%computername%»)
    End If
Else
    isLocalHost = TRUE
    CompName = WshShell.ExpandEnvironmentStrings(«%computername%»)
End If

PathFile = WshShell.CurrentDirectory & «»
FileNameOUT = PathFile & «WinSKey_» & UCase(CompName) & «.txt»

Set FSO = CreateObject(«Scripting.FileSystemObject»)
Set objFileOUT = FSO.OpenTextFile(FileNameOUT, 2, TRUE)
objFileOUT.Write «PC: » & UCase(CompName) & vbNewLine

‘ Windows x64.
‘ При считывании из x32-Клиента в следствии отображения x64-Ключей на x32-Ключи происходит обращение к ветке реестра:
‘ HKLMSOFTWAREWOW6432NodeMicrosoftWindows NTCurrentVersionDigitalProductID
‘ Ключ DigitalProductID в разделе HKLMSOFTWAREWOW6432NodeMicrosoftWindows NTCurrentVersion по-умолчанию отсутствует.

If isLocalHost Then
    ‘ Извлечение данных из реестра на локальном компьютере.
    sSubKeyName = «HKLMSOFTWAREMicrosoftWindows NTCurrentVersion»
    ProductName = WshShell.RegRead(sSubKeyName & «ProductName»)
    DigitalProductId = WshShell.RegRead(sSubKeyName & «DigitalProductId»)

    WinProductSN = ConvertToKey(DigitalProductId)

    objFileOUT.Write «OS: » & ProductName & vbNewLine
    objFileOUT.Write «REG: » & WinProductSN & vbNewLine
Else
    ‘ На целевом (удаленном) компьютере должна быть запущена служба «Удаленный реестр».
    sSubKeyName = «\» & CompName & «hklmsoftwaremicrosoftwindows ntcurrentversion»

    ProductName = RegReadKey(sSubKeyName, «ProductName», FSO, PathFile, «EXEC-RUN»)
    If NOT IsEmpty(ProductName) Then
        objFileOUT.Write «OS: » & ProductName & vbNewLine
    End If
    
    DigitalProductId = RegReadKey(sSubKeyName, «DigitalProductID», FSO, PathFile, «EXEC-RUN»)
    If IsEmpty(DigitalProductId) Then
        ReadRegistry = FALSE
        objFileOUT.Write «REG: Error read » & sSubKeyName & «DigitalProductId.» & vbNewLine
    Else
        ReadRegistry = TRUE
        DigitalProductId = StringToArrayByte(DigitalProductId)

        WinProductSN = ConvertToKey(DigitalProductId)

        objFileOUT.Write «REG: » & WinProductSN & vbNewLine
    End If

    ‘ На целевом компьютере должна быть настроен WMI для удаленного доступа. см. подробности: //infostart.ru/public/172189
    Set WinMGMT = GetObject(«winmgmts:{impersonationLevel=impersonate}!\» & CompName & »
ootdefault:StdRegProv»)

    If Err.Number <> 0 Then
        objFileOUT.Write «WMI: Error= » & Err.Number & «: Error create WinMGMT. » & Err.Description & vbNewLine
        objFileOUT.Close
        WScript.Quit 1
    End If

    sSubKeyName = «SOFTWAREMicrosoftWindows NTCurrentVersion»
    intRes = WinMGMT.CheckAccess(HKLM, sSubKeyName, KEY_QUERY_VALUE, bGranted)
    If intRes <> 0 Then
        objFileOUT.Write «WMI: Error=» & intRes & «: Failed verification of rights to read the » & sSubKeyName & vbNewLine
        objFileOUT.Close
        WScript.Quit 1
    End If

    If bGranted Then
        If IsEmpty(ProductName) Then
            intRes = WinMGMT.GetStringValue(HKLM, sSubKeyName, «ProductName», ProductName)
            If IsEmpty(ProductName) Then
                ProductName = «Windows-?»
            Else
                objFileOUT.Write «OS: » & ProductName & vbNewLine
            End If
        End If
        intRes = WinMGMT.GetBinaryValue(HKLM, sSubKeyName, «DigitalProductId», DigitalProductId)
        If intRes <> 0 Then
            objFileOUT.Write «WMI: Error=» & intRes & «: Error read HKLM» & sSubKeyName & «DigitalProductId.» & vbNewLine
            objFileOUT.Close
            WScript.Quit 1
        End If
    Else
        objFileOUT.Write «WMI: No permission to read the registry key HKLM» & sSubKeyName & vbNewLine
        objFileOUT.Close
        WScript.Quit 1
    End If

    WinProductSN = ConvertToKey(DigitalProductId)

    objFileOUT.Write «WMI: » & WinProductSN & vbNewLine
End If

objFileOUT.Close
WScript.Quit 0

Function RegReadKey(sSubKeyName, sKeyName, FSO, PathFile, RunExec)
    Dim ObjExec, FileTMP, objFileTMP, intRes, sOUT, IsBreak, ArrOUT, LineKEY, ArrKEY, i, KeyVALUE

    FileTMP = PathFile & sKeyName & «.txt»
    If RunExec = «EXEC» Then    
        Set ObjExec = WshShell.Exec(«%comspec% /c reg.exe query » & chr(34) & sSubKeyName & chr(34) & » /v » & sKeyName)
        sOUT = NUL
        IsBreak = FALSE
        Do While TRUE    ‘ Бесконечный цикл.
            ‘ Проверяем, достигнут ли конец выходного потока.
            If (Not ObjExec.StdOut.AtEndOfStream) Then
                ‘ Считываем полностью выходной поток.
                sOUT = sOUT + ObjExec.StdOut.ReadAll
            End If
            If IsBreak Then
                Exit Do    ‘ Выходим из цикла.
            End If
            ‘ Проверяем, не завершилось ли выполнение команды.
            If ObjExec.Status=1 Then
                IsBreak = TRUE
            Else
                WScript.Sleep 100    ‘ Приостанавливаем сценарий на 0,1 сек.
            End If
        Loop
        ArrOUT = Split(sOUT, vbCrLf)    ‘ Формируем массив из выходного потока.
        LineKEY = ArrOUT(2)        ‘ Строка, содержащая ключ.
    Else
        intRes = WshShell.Run(«%comspec% /c reg.exe query » & chr(34) & sSubKeyName & chr(34) & » /v » & sKeyName & » > » & chr(34) & FileTMP & chr(34), 0, TRUE)
        If intRes = 0 Then
            Set objFileTMP = FSO.OpenTextFile(FileTMP, 1, TRUE)
            objFileTMP.SkipLine
            objFileTMP.SkipLine
            lineKEY = objFileTMP.ReadLine    ‘ Строка, содержащая ключ.
            objFileTMP.Close
            FSO.DeleteFile(FileTMP)
        Else
            FSO.DeleteFile(FileTMP)
            RegReadKey = NUL
        End If
    End If
    lineKEY = Trim(Replace(lineKEY, »  «, » «))
    ArrKEY = Split(lineKEY)
    KeyVALUE = NUL
    For i = 4 TO UBound(ArrKEY)
        KeyVALUE = KeyVALUE & » » & ArrKEY(i)
    Next
    KeyVALUE = Trim(KeyVALUE)
    RegReadKey = KeyVALUE
End Function

Function StringToArrayByte(byVal regKeySTR)
    Dim newElem, strArr(164)
    ii = -1
    For i = 1 To Len(regKeySTR) Step 2
        ii = ii+1
        newElem = Mid(regKeySTR, i, 2)
        strArr(ii) = StrToByte(newElem)
    Next
    StringToArrayByte = strArr
End Function

Function StrToByte(byval text)
    Dim S1, S2, Value1, Value2

    S1 = Mid(text, 1, 1)
    S2 = Mid(text, 2, 1)

    If S1 = «A» Then Value1 = 160 End If
    If S1 = «B» Then Value1 = 176 End If
    If S1 = «C» Then Value1 = 192 End If
    If S1 = «D» Then Value1 = 208 End If
    If S1 = «E» Then Value1 = 224 End If
    If S1 = «F» Then Value1 = 240 End If

    If S1 = «0» OR S1 = «1» OR S1 = «2» OR S1 = «3» OR S1 = «4» OR S1 = «5» OR S1 = «6» OR S1 = «7» OR S1 = «8» OR S1 = «9» Then Value1 = CInt(S1)*16#k8SjZc9Dxk1 End If

    If S2 = «A» Then Value2 = 10 End If
    If S2 = «B» Then Value2 = 11 End If
    If S2 = «C» Then Value2 = 12 End If
    If S2 = «D» Then Value2 = 13 End If
    If S2 = «E» Then Value2 = 14 End If
    If S2 = «F» Then Value2 = 15 End If

    If S2 = «0» OR S2 = «1» OR S2 = «2» OR S2 = «3» OR S2 = «4» OR S2 = «5» OR S2 = «6» OR S2 = «7» OR S2 = «8» OR S2 = «9» Then Value2 = CInt(S2) End If

    StrToByte = CByte(Value1+Value2)
End Function

Function ConvertToKey(regKeyHEX8)
    Const KeyOffset = 52
    isWin8 = (regKeyHEX8(66) 6) And 1
    regKeyHEX8(66) = (regKeyHEX8(66) And &HF7) Or ((isWin8 And 2) * 4)
    j = 24
    Chars = «BCDFGHJKMPQRTVWXY2346789»    ’24 Symbol used in the product keys, Windows and Office.
    Do
        Cur = 0
        y = 14
        Do
            Cur = Cur * 256
            Cur = regKeyHEX8(y + KeyOffset) + Cur
            regKeyHEX8(y + KeyOffset) = (Cur 24)
            Cur = Cur Mod 24
            y = y -1
        Loop While y >= 0
        j = j -1
        winKeyOutput = Mid(Chars, Cur + 1, 1) & winKeyOutput
        Last = Cur
    Loop While j >= 0
    If (isWin8 = 1) Then
        keypart1 = Mid(winKeyOutput, 2, Last)
        insert = «N»
        winKeyOutput = Replace(winKeyOutput, keypart1, keypart1 & insert, 2, 1, 0)
        If Last = 0 Then winKeyOutput = insert & winKeyOutput
    End If
    a = Mid(winKeyOutput, 1, 5)
    b = Mid(winKeyOutput, 6, 5)
    c = Mid(winKeyOutput, 11, 5)
    d = Mid(winKeyOutput, 16, 5)
    e = Mid(winKeyOutput, 21, 5)
    ConvertToKey = a & «-» & b & «-» & c & «-» & d & «-» & e
End Function
‘ Файл get_windows_key_via_reg_wmi.vbs доступен для скачивания в ссылках к обработке Системный администратор: //infostart.ru/public/172189

МА! С уважением к сообществу МА!


26 Comments

  1. TrinitronOTV

    тоже присоединюсь к сообществу: большое спасибо за данную публикацию, полезная информация

    Reply
  2. Поручик

    (0) Ради трёх функций надо выделять в отдельную публикацию? Ты случайно не рейтинг с манями нарабатываешь?

    Reply
  3. Поручик

    (0) Кстати, Automation.chm ты сам делал?

    Reply
  4. StepByStep

    (2) Поручик,

    1-я часть — То, чем сам пользуюсь, что заинтересовало.

    2-я часть — Тематическая — «Работа с Файловой системой».

    3-я часть — Тематическая — «Работа с Реестром».

    Надо было конечно сразу — по темам, было бы структурировано, что кажется более логично.

    Но теперь — что сделано — то сделано.

    Reply
  5. StepByStep

    (3) Поручик,

    Automation.chm взял готовым, где взял — теперь уже и не помню.

    Reply
  6. SeiOkami

    StepByStep, Спасибо большое за интересные статьи, но всё же и вправду объединить их в одну статью было бы лучше. А то как то даже не прилично выглядит)

    И всё же плюс =)

    Reply
  7. sstar90

    Спасибо за статью. Плюс

    Reply
  8. tvixeg

    интересует как с помощью WSH можно одновременно изменить размер управляемой формы и перетащить ее верх за границу экрана, сделав таким образом рабочий стол на весь экран. Встречал тут обработку которая может или перетащить за границу экрана, или изменить размер, а одновременно не может. Исходников там нет все зашито в dll.

    Reply
  9. StepByStep

    (8) tvixeg,

    WSH — Это сценарии команд, запускаемые интерпретаторами:

    — Wscript.exe (если надо, выводит диалоговое окно);

    — Cscript.exe (никаких диалоговых окон не выводит).

    Wscript.exe — Используется по умолчанию в Windows.

    WSH Имеет минимум возможностей по работе с окнами:

    — Запустить программу в скрытом/минимальном/стандартном/текущим размером окна.

    — Создать ярлык, запускающий программу в максимальном/стандартном/свернутым окном.

    — Минимизировать/Отменить минимизацию окон открытых приложений.

    — Определить количество открытых окон проводника.

    — Расположить окна каскадом.

    — Вывести окно сообщений.

    — Активизировать окно интересующего приложения.

    Reply
  10. iceflash

    (8) tvixeg,

    То, о чем вы говорите делается посредством вызовов Win API функций

    Reply
  11. mzelensky

    мне очень понравилось!

    Reply
  12. AlexBar

    Подскажите, как получить из сетевого окружения все компы сети? Доступные домены, IP и имена каждого компа, принадлежность к домену?

    Reply
  13. StepByStep

    (12) AlexBar,

    Данная часть «WSH. ОТ ТЕОРИИ К ПРАКТИКЕ» посвящена реестру.

    Интересующая Вас функция «СетевоеОкружение()» добавлена мной сегодня в Часть I, в сборной, так сказать, «солянке».

    Спасибо.

    Reply
  14. StepByStep

    Добавлена новая Функция ЗарегистрироватьФайлDLL().

    Reply
  15. jmw

    (3) Порутчик, Automation.chm лежит на Скрипт кодинг-е

    http://www.script-coding.com/

    Reply
  16. StepByStep

    Добавлены 2 новых функции:

    1. RegistryInformation:

    Функция, позволяющая получить информацию о реестре локального/удаленного компьютера,

    а также дату установки Windows.

    2. DescriptionComputer:

    Функция, позволяющая записать в описание компьютера (локального/удаленного) имя доменапользователя, работающего на нем.

    Описание компьютера отображается в качестве комментария в сетевом окружении.

    Reply
  17. StepByStep

    Добавлена новая функция WindowsInfo:

    Функция, позволяющая получить информацию об установленной Windows на локальном компьютере.

    Reply
  18. StepByStep

    Добавлена новая функция Computer_Programs():

    Функция, позволяющая получить информацию об установленных программах локальном/удаленном компьютере.

    Reply
  19. AlexO

    (5)

    теперь уже и не помню.

    я знаю, где взял 🙂

    Reply
  20. StepByStep

    Функция Computer_Programs() заменена на Computer_Programs_Product().

    Добавлена новая функция Computer_Programs_Registry().

    Функции, позволяющие получить информацию об установленных программах локальном/удаленном компьютере.

    Reply
  21. amon_ra

    (4) спасибо за статью. Интересует функция ЗарегистрироватьФайлDLL() от имени администратора можно ли зарегать компоненту и что бы uac не появлялась?

    Reply
  22. StepByStep

    (21) amon_ra,

    Нативную внешнюю компоненту ?

    Reply
  23. StepByStep

    20.10.2013.

    Добавлен vbs-Срипт. Получение серийного номера Windows.

    Reply
  24. Ovrfox

    Привет всем

    Использование * в запросах иногда приводит к существенным временным затратам

    Например время исполнения запроса — несколько секунд, а именнованного несколько милисекунд

    Win32_ComputerSystem = WinMGMT.ExecQuery(«SELECT * FROM Win32_ComputerSystem»);
    
    Для Каждого ComputerSystem ИЗ Win32_ComputerSystem Цикл
    NewDescription = ComputerSystem.UserName;
    КонецЦикла;

    Win32_ComputerSystem = WinMGMT.ExecQuery(«SELECT UserName FROM Win32_ComputerSystem»);
    
    Для Каждого ComputerSystem ИЗ Win32_ComputerSystem Цикл
    NewDescription = ComputerSystem.UserName;
    КонецЦикла;
    Reply
  25. StepByStep

    (24) Ovrfox,

    СПАСИБО.

    Reply
  26. ybatiaev

    Добрый день!

    Подскажите! Не могу понять!

    Запускаю Процесс = WshShell.Exec(СтрокаКоманды), где в переменную СтрокаКоманды уже вписана строка создания архива.

    В строке запуска присутствует путь создания архива и он является хранилищем(!). Он вида 192.168.0.100, 192.168.0.101 и т.п.

    На некоторых терминалках это запускается(в домене), на некоторых нет(не в домене).

    Ругается ан ошибки.

    1. В отладчике поймал следующую «Ошибка при вызове метода контекста (GetOwner): Произошла исключительная ситуация (SWbemObjectEx): Not found». GetOwner делается для процесса.

    2. если в командную строку включить параметр «/OUT Имя лог файла», то в лог выводится следующее

    «Ошибка при выполнении файловой операции ‘\192.168.0.1001cHANDSИмяБазыИмяБазы 2018-05-14 14-12-35.n1’. 1326(0x0000052E): Вход в систему не произведен: имя пользователя или пароль не опознаны.» (с локальными путями нормально)

    А, если запустить из под CMD эту строку запуска — всё отрабатывает «на ура»

    Все папки хранилища доступны на этом терминальном сервере, все пути реальные и проверены. Доступ ВЕЗДЕ правильный.

    Т.е. как бы из под меня с командной строки всё работает, а вот из под EXEC ругается на нелогин. Значит или запускается под другим пользователем. Под каким я не пойму.

    Помогите пожалуйста разобраться.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *