Пример работы с реестром Windows

17.08.16

Разработка - Универсальные функции

Пример обработок и функций, демонстрирующих работу с реестром Windows с помощью COM-объекта WScript.Shell

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Работа с реестром
.zip 17,33Kb
5 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Представляю Вашему вниманию пример обработок и функций, демонстрирующих работу с реестром 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ПолучитьЗначениеПараметра(Путь, ИмяПараметра, Неопределено);
	Результат = (Значение <> Неопределено);
	
	Возврат Результат;
КонецФункции

Вступайте в нашу телеграмм-группу Инфостарт

WScript Shell реестр

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    2913    Abysswalker    7    

43

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    5773    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    47230    dimanich70    83    

167

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7058    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    58659    atdonya    31    

69

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8795    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Davurov 28.03.17 13:18 Сейчас в теме
Круто! как раз искал. Спасибо автору
frkbvfnjh; +1 Ответить
2. Nik-An 34 06.06.19 13:59 Сейчас в теме
Спасибо, отличный набор функций!
frkbvfnjh; +1 Ответить
3. frkbvfnjh 817 07.06.19 06:34 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация