Представляю Вашему вниманию пример обработок и функций, демонстрирующих работу с реестром Windows с помощью COM-объекта WScript.Shell. Данная публикация, думаю, будет интересна в первую очередь новичкам, которым интересно, как можно работать с реестром Windows в 1С. В обработках публикации написаны функции "обертки" для COM-объекта WScript.Shell, через который и осуществляется вся работа. Также в одной из обработок есть простенькие функции по пересчету чисел из двоичной системы в десятеричную и обратно. Обе обработки сделаны под обычное приложение, но написанные функции без дополнительной доработки будут работать и в управляемом приложении. Тестировались обработки на платформе 8.3.6.
Одна из обработок демонстрирует возможность записи, чтения и удаления данных из реестра.
Во вторую обработку попытался вложить хоть какой-то практический смысл и сделал обработку по управлению видимостью дисков в проводнике.
Для вступления изменений в силу, необходимо перезагрузить Windows или проводник.
В архиве публикации находятся обе обработи. Кому интересны только сами функции, привожу текст модуля:
Функция ЧислоBINTODEC(ИсходноеЧисло) Экспорт
Результат = 0;
КоличествоЦифр = СтрДлина(ИсходноеЧисло);
Для Н = 1 По КоличествоЦифр Цикл
Значение = Число(Сред(ИсходноеЧисло, Н, 1));
Результат = Результат + ?(Значение = 0, 0, Значение * Pow(2, КоличествоЦифр - Н));
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ЧислоDECTOBIN(ИсходноеЧисло) Экспорт
Результат = "";
Значение = ИсходноеЧисло;
Пока Значение > 0 Цикл
Результат = Формат(Значение % 2, "ЧН=0") + Результат;
Значение = Цел(Значение / 2);
КонецЦикла;
Возврат ?(Результат = "", "0", Результат);
КонецФункции
Функция ДополнитьЗавершающимРазделителемПути(Путь) Экспорт
Разделитель = "\";
Результат = ?(Прав(Путь, 1) = Разделитель, Путь, Путь + Разделитель);
Возврат Результат;
КонецФункции
Функция REG_SZ() Экспорт
Возврат "REG_SZ";
КонецФункции
Функция REG_EXPAND_SZ() Экспорт
Возврат "REG_EXPAND_SZ";
КонецФункции
Функция REG_MULTI_SZ() Экспорт
Возврат "REG_MULTI_SZ";
КонецФункции
Функция REG_DWORD() Экспорт
Возврат "REG_DWORD";
КонецФункции
Функция REG_BINARY() Экспорт
Возврат "REG_BINARY";
КонецФункции
Функция REG_HKEY_CLASSES_ROOT() Экспорт
Возврат "HKEY_CLASSES_ROOT";
КонецФункции
Функция REG_HKEY_CURRENT_USER() Экспорт
Возврат "HKEY_CURRENT_USER";
КонецФункции
Функция REG_HKEY_LOCAL_MACHINE() Экспорт
Возврат "HKEY_LOCAL_MACHINE";
КонецФункции
Функция REG_HKEY_USERS() Экспорт
Возврат "HKEY_USERS";
КонецФункции
Функция REG_HKEY_CURRENT_CONFIG() Экспорт
Возврат "HKEY_CURRENT_CONFIG";
КонецФункции
Функция REG_HKCR() Экспорт
Возврат "HKCR";
КонецФункции
Функция REG_HKCU() Экспорт
Возврат "HKCU";
КонецФункции
Функция REG_HKLM() Экспорт
Возврат "HKLM";
КонецФункции
Функция ОбъектWScriptShell() Экспорт
Возврат Новый COMОбъект("WScript.Shell");
КонецФункции
Функция RegСоздатьРаздел(Путь, ЗначениеПараметраПоУмолчанию = "", ОписаниеОшибки = Неопределено) Экспорт
Попытка
ОбъектWScriptShell = ОбъектWScriptShell();
ОбъектWScriptShell.RegWrite(ДополнитьЗавершающимРазделителемПути(Путь), Строка(ЗначениеПараметраПоУмолчанию));
Возврат Истина;
Исключение
ОписаниеОшибки = ИнформацияОбОшибке().Причина.Описание; //ОписаниеОшибки();
Возврат Ложь;
КонецПопытки;
КонецФункции
Функция RegСоздатьПараметр(Путь, ИмяПараметра, ЗначениеПараметра, ТипПараметра = Неопределено, ОписаниеОшибки = Неопределено) Экспорт
Попытка
ОбъектWScriptShell = ОбъектWScriptShell();
Если ТипПараметра = Неопределено Тогда
ОбъектWScriptShell.RegWrite(ДополнитьЗавершающимРазделителемПути(Путь) + ИмяПараметра, ЗначениеПараметра);
Иначе
ОбъектWScriptShell.RegWrite(ДополнитьЗавершающимРазделителемПути(Путь) + ИмяПараметра, ЗначениеПараметра, ТипПараметра);
КонецЕсли;
Возврат Истина;
Исключение
ОписаниеОшибки = ИнформацияОбОшибке().Причина.Описание; //ОписаниеОшибки();
Возврат Ложь;
КонецПопытки;
КонецФункции
Функция RegУдалитьПараметр(Путь, ИмяПараметра, ОписаниеОшибки = Неопределено) Экспорт
Попытка
ОбъектWScriptShell = ОбъектWScriptShell();
ОбъектWScriptShell.RegDelete(ДополнитьЗавершающимРазделителемПути(Путь) + ИмяПараметра);
Возврат Истина;
Исключение
ОписаниеОшибки = ИнформацияОбОшибке().Причина.Описание; //ОписаниеОшибки();
Возврат Ложь;
КонецПопытки;
КонецФункции
Функция RegУдалитьРаздел(Путь, ОписаниеОшибки = Неопределено) Экспорт
Попытка
ОбъектWScriptShell = ОбъектWScriptShell();
ОбъектWScriptShell.RegDelete(ДополнитьЗавершающимРазделителемПути(Путь));
Возврат Истина;
Исключение
ОписаниеОшибки = ИнформацияОбОшибке().Причина.Описание; //ОписаниеОшибки();
Возврат Ложь;
КонецПопытки;
КонецФункции
Функция RegПолучитьЗначениеПараметра(Путь, ИмяПараметра, ЗначениеПоУмолчанию = Неопределено, ОписаниеОшибки = Неопределено) Экспорт
Попытка
ОбъектWScriptShell = ОбъектWScriptShell();
Результат = ОбъектWScriptShell.RegRead(ДополнитьЗавершающимРазделителемПути(Путь) + ИмяПараметра);
Исключение
ОписаниеОшибки = ИнформацияОбОшибке().Причина.Описание; //ОписаниеОшибки();
Результат = ЗначениеПоУмолчанию;
КонецПопытки;
Возврат Результат;
КонецФункции
Функция RegПолучитьЗначениеПараметраПоУмолчанию(Путь, ЗначениеПоУмолчанию = Неопределено, ОписаниеОшибки = Неопределено) Экспорт
Попытка
ОбъектWScriptShell = ОбъектWScriptShell();
Результат = ОбъектWScriptShell.RegRead(ДополнитьЗавершающимРазделителемПути(Путь));
Исключение
ОписаниеОшибки = ИнформацияОбОшибке().Причина.Описание; //ОписаниеОшибки();
Результат = ЗначениеПоУмолчанию;
КонецПопытки;
Возврат Результат;
КонецФункции
Функция RegРазделСуществует(Путь) Экспорт
Значение = RegПолучитьЗначениеПараметраПоУмолчанию(Путь, Неопределено);
Результат = (Значение <> Неопределено);
Возврат Результат;
КонецФункции
Функция RegПараметрСуществует(Путь, ИмяПараметра) Экспорт
Значение = RegПолучитьЗначениеПараметра(Путь, ИмяПараметра, Неопределено);
Результат = (Значение <> Неопределено);
Возврат Результат;
КонецФункции