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

17.08.16

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

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

Скачать файлы

Наименование Файл Версия Размер
Работа с реестром
.zip 17,33Kb
5
.zip 17,33Kb 5 Скачать

Представляю Вашему вниманию пример обработок и функций, демонстрирующих работу с реестром 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 реестр

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

18.03.2024    2683    1    John_d    8    

55

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

12.02.2024    4617    atdonya    22    

45

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

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

30.11.2023    3965    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8848    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2078    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16157    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7243    quazare    8    

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