gifts2017

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

Опубликовал Андрей Лукин (frkbvfnjh) в раздел Программирование - Практика программирования

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

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

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

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

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа