Skip to content

Instantly share code, notes, and snippets.

@EvilBeaver
Created May 31, 2016 17:21
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save EvilBeaver/82c9aa10ddcfde575a7ba13f0d8979f2 to your computer and use it in GitHub Desktop.
Save EvilBeaver/82c9aa10ddcfde575a7ba13f0d8979f2 to your computer and use it in GitHub Desktop.
Associate 1script files in Windows
// Привязка файлов *.os к oscript.exe
// Запуск скриптов *.os из командной строки без указания расширения
// (с) awa, 2015
#Использовать tempfiles
Процедура Главная()
СистемнаяИнформация = Новый СистемнаяИнформация;
ОС = НРег(СистемнаяИнформация.ВерсияОС);
Если Найти(ОС, "windows") = 0 Тогда
Сообщить("Данный скрипт предназначен для запуска только на Windows");
Возврат;
КонецЕсли;
ПривязатьСкрипты();
ВключитьЗапускСкриптовБезРасширения();
ВременныеФайлы.Удалить();
КонецПроцедуры
Процедура ПривязатьСкрипты()
Перем КодВозврата;
СообщениеОбОшибке = "!!! Не удалось привязать файлы *.os к oscript.exe";
СтрокаЗапуска = "REG ADD HKCR\.os /ve /d OneScriptFile /f";
ЗапуститьПриложение(СтрокаЗапуска, , Истина, КодВозврата);
Если КодВозврата <> 0 Тогда
Сообщить(СообщениеОбОшибке);
Возврат;
КонецЕсли;
СтрокаЗапуска = "REG ADD HKCR\OneScriptFile /ve /d ""OneScript file"" /f";
ЗапуститьПриложение(СтрокаЗапуска, , Истина, КодВозврата);
Если КодВозврата <> 0 Тогда
Сообщить(СообщениеОбОшибке);
Возврат;
КонецЕсли;
СтрокаЗапуска = "REG ADD HKCR\OneScriptFile\shell\open\command /ve /d ""\""" + КаталогПрограммы() + "\oscript.exe\"" \""%1\"" %*"" /f";
ЗапуститьПриложение(СтрокаЗапуска, , Истина, КодВозврата);
Если КодВозврата <> 0 Тогда
Сообщить(СообщениеОбОшибке);
Возврат;
КонецЕсли;
Сообщить("Файлы *.os привязаны к oscript.exe");
КонецПроцедуры
Процедура ПривязатьСкрипты_СтарыйВариант()
ТекстРегФайла =
"Windows Registry Editor Version 5.00
|
|[HKEY_CLASSES_ROOT\.os]
|@=""OneScriptFile""
|
|[HKEY_CLASSES_ROOT\OneScriptFile]
|@=""OneScript file""
|
|[HKEY_CLASSES_ROOT\OneScriptFile\shell]
|
|[HKEY_CLASSES_ROOT\OneScriptFile\shell\open]
|
|[HKEY_CLASSES_ROOT\OneScriptFile\shell\open\command]
|@=""\""" + СтрЗаменить(КаталогПрограммы(), "\", "\\") + "\\oscript.exe\"" \""%1\"" %*""
|
|[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.os\UserChoice]
|
|[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.os\OpenWithProgids]
|""OneScriptFile""=hex(0):
|";
РегФайл = ВременныеФайлы.НовоеИмяФайла("reg");
ЗаписьТекста = Новый ЗаписьТекста(РегФайл, КодировкаТекста.UTF16);
ЗаписьТекста.Записать(ТекстРегФайла);
ЗаписьТекста.Закрыть();
ЗаписьТекста = Неопределено;
СтрокаЗапуска = "regedit.exe /s """ + РегФайл + """";
ЗапуститьПриложение(СтрокаЗапуска, , Истина);
КонецПроцедуры
Процедура ВключитьЗапускСкриптовБезРасширения()
Перем КодВозврата;
СообщениеОбОшибке = "!!! Не удалось включить запуск скриптов";
ВременныйФайл = ВременныеФайлы.НовоеИмяФайла("txt");
СтрокаЗапуска = "cmd.exe /c REG QUERY ""HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"" /v PATHEXT > """ + ВременныйФайл + """";
ЗапуститьПриложение(СтрокаЗапуска, , Истина, КодВозврата);
Если КодВозврата <> 0 Тогда
Сообщить(СообщениеОбОшибке);
Возврат;
КонецЕсли;
ЧтениеТекста = Новый ЧтениеТекста(ВременныйФайл, КодировкаТекста.OEM);
Стр = ЧтениеТекста.Прочитать();
ЧтениеТекста.Закрыть();
МассивСтрок = СтрРазделить(Стр, Символы.ВК + Символы.ПС, Ложь);
Стр = МассивСтрок[1];
МассивСтрок = СтрРазделить(Стр, " ", Ложь);
Стр = МассивСтрок[2];
МассивСтрок = СтрРазделить(Стр, ";", Ложь);
Для каждого Элемент Из МассивСтрок Цикл
Если ВРег(Элемент) = ".OS" Тогда
Сообщить("Запуск скриптов по имени без расширения уже был включен...");
Возврат;
КонецЕсли;
КонецЦикла;
Стр = Стр + ";.OS";
СтрокаЗапуска = "REG ADD ""HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"" /v PATHEXT /d """ + Стр + """ /f";
ЗапуститьПриложение(СтрокаЗапуска, , Истина, КодВозврата);
Если КодВозврата <> 0 Тогда
Сообщить(СообщениеОбОшибке);
Возврат;
КонецЕсли;
Сообщить("Запуск скриптов по имени без расширения включен (необходимо перезвгрузить компьютер)!");
КонецПроцедуры
Главная();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment