Вопрос или проблема
// SendToQuickLaunch.js – Версия 1.3
// Авторские права (c) 2010, 2013 Билл Чатфилд [email protected]
// Все права защищены.
var programDesc = “Отправить на Быстрый Запуск”;
var quickLaunchMenuItem = “Быстрый Запуск (создать ярлык)”;
var installFolder = getEnvironmentVariable(“AppData”) + “\” + programDesc;
var installedScript = installFolder + “\” + WScript.ScriptName;
var shell = null;
var environment = null;
var fileSystem = null;
/* Возвращает объект FileSystemObject */
function getFileSystem() {
if (fileSystem == null) {
fileSystem = WScript.CreateObject(“Scripting.FileSystemObject”);
}
return fileSystem;
}
/* Возвращает объект WshShell */
function getShell() {
if (shell == null) {
shell = WScript.CreateObject(“WScript.Shell”);
}
return shell;
}
/* Возвращает объект WshEnvironment */
function getEnvironment() {
if (environment == null) {
environment = getShell().Environment(“Process”);
}
return environment;
}
/* Возвращает объект String */
function getEnvironmentVariable(name) {
var env = getEnvironment();
return env(name);
}
/* Строка */
function askOperation() {
// Спросить пользователя, хочет ли он установить.
var answer = getShell().Popup(“Установить опцию \”Быстрый Запуск\” в меню \”Отправить\”?”, 300, programDesc + ” – Администратор”, 4 + 32);
if (answer == 6) { // Если Да
return ‘install’;
}
var answer = getShell().Popup(“Удалить опцию \”Быстрый Запуск\” из меню \”Отправить\”?”, 300, programDesc + ” – Администратор”, 4 + 32);
if (answer == 6) { // Если Да
return ‘remove’;
}
return ”;
}
/* пусто */
function install() {
// Скопировать этот скрипт в его официальный каталог установки.
if (! getFileSystem().FolderExists(installFolder)) {
getFileSystem().CreateFolder(installFolder);
}
// Папка назначения должна заканчиваться обратной косой чертой, чтобы распознаваться как папка.
getFileSystem().CopyFile(WScript.ScriptFullName, installFolder + “\”, true);
// Создать ссылку в папке SendTo, которая вызывается
// пунктом меню \"Быстрый Запуск\" в меню \"Отправить\". Это также
// создает элемент меню, потому что Windows создает меню \"Отправить\"
// из всего, что находится в специальной папке \"SendTo\".
var sendToFolder = getShell().SpecialFolders("SendTo");
var link = getShell().CreateShortcut(sendToFolder + "\\" + quickLaunchMenuItem + ".lnk");
link.TargetPath = installedScript;
link.WindowStyle = 1;
link.IconLocation = "wscript.exe, 3"; // Желтая иконка JavaScript находится по индексу 3.
link.Description = programDesc;
link.WorkingDirectory = installFolder;
link.Save();
// Создать ссылку в меню Пуск для удаления этого скрипта.
var programsFolder = getShell().SpecialFolders("Programs");
var startMenuFolder = programsFolder + "\\" + programDesc;
if (! getFileSystem().FolderExists(startMenuFolder)) {
getFileSystem().CreateFolder(startMenuFolder);
}
var startMenuLink = getShell().CreateShortcut(startMenuFolder + "\\Удалить " + programDesc + ".lnk");
startMenuLink.TargetPath = installedScript;
startMenuLink.Arguments = "--uninstall";
startMenuLink.WindowStyle = 1;
startMenuLink.IconLocation = "wscript.exe, 3";
startMenuLink.Description = "Удалить " + programDesc;
startMenuLink.WorkingDirectory = installFolder;
startMenuLink.Save();
// Сообщить пользователю, что установка успешна.
getShell().Popup("Установка завершена.", 300, programDesc + " - Администратор", 64);
}
/* пусто */
function uninstall() {
// Удалить ссылку Отправить.
var sendToFolder = getShell().SpecialFolders(“SendTo”);
var link = sendToFolder + “\” + quickLaunchMenuItem + “.lnk”;
if (getFileSystem().FileExists(link)) {
getFileSystem().DeleteFile(link);
}
// Удалить файл и папку в Program Files.
if (getFileSystem().FileExists(installedScript)) {
getFileSystem().DeleteFile(installedScript);
}
if (getFileSystem().FolderExists(installFolder)) {
getShell().CurrentDirectory = "C:\\"; // Переместиться, чтобы мы могли удалить его.
getFileSystem().DeleteFolder(installFolder);
}
// Удалить ссылку и папку из меню Пуск.
var programsFolder = getShell().SpecialFolders("Programs");
var startMenuFolder = programsFolder + "\\" + programDesc;
var startMenuLink = startMenuFolder + "\\Удалить " + programDesc + ".lnk";
if (getFileSystem().FileExists(startMenuLink)) {
getFileSystem().DeleteFile(startMenuLink);
}
if (getFileSystem().FolderExists(startMenuFolder)) {
getFileSystem().DeleteFolder(startMenuFolder);
}
getShell().Popup("Удалено.", 300, programDesc + " - Администратор", 64);
}
/* пусто */
function createQuickLaunchLinkFor(targetName) {
var target = getFileSystem().GetFile(targetName);
var link = getShell().CreateShortcut(buildShortcutFileName(target));
link.TargetPath = target.Path;
link.WindowStyle = 1;
link.Description = “Ярлык на ” + target.Path;
link.WorkingDirectory = target.ParentFolder;
link.Save();
getShell().Popup(“Ярлык на ” + targetName + ” был добавлен в меню Быстрого Запуска.”, 300, programDesc, 64);
}
/* Строка /
function buildShortcutFileName(/ File */ target) {
var homeDir = getEnvironmentVariable(“USERPROFILE”);
var quickLaunchDir = homeDir + “\Desktop”;
var name = quickLaunchDir + “\” + target.Name;
var duplicateFileStartIndex = 2;
var i = duplicateFileStartIndex;
// Проверка на расширения, которые следует удалить.
if (target.Type == "Приложение") {
// Удалить расширение.
name = name.replace(/\.exe$/i, "");
}
else if (target.Type == "MS-DOS Batch File") {
// Удалить расширение.
name = name.replace(/\.bat$/i, "");
}
// Если целевой объект уже является ярлыком, не добавлять дополнительное
// расширение ссылки к новому имени ярлыка. Иначе...
if (target.Type != "Ярлык") {
// Новое имя ярлыка не имеет расширения ".lnk"
// потому что целевой объект его не имел, поэтому ему нужно сейчас.
name += ".lnk";
}
// Разрешить конфликты имен ярлыков.
while (getFileSystem().FileExists(name)) {
if (i == duplicateFileStartIndex) {
name = name.replace(/\.lnk$/i, "(" + i + ").lnk");
}
else {
name = name.replace(/\(\d+\)\.lnk$/i, "(" + i + ").lnk");
}
i++; // Увеличить индекс и попробовать снова.
}
return name;
}
/* Булево */
function isUninstallSwitch(arg) {
var switches = new Array(“–remove”, “-remove”, “–uninstall”, “-uninstall”);
var i;
for (i in switches) {
if (arg == switches[i]) {
return true;
}
}
}
/////////////////////////////////////////////////////////////////////////////
//
// Главная программа
//
/////////////////////////////////////////////////////////////////////////////
var targetName;
if (WScript.Arguments.length == 0) {
// Если аргумента нет, выполнить установку или удаление.
var op = askOperation();
if (op == ‘install’) {
install();
}
else if (op == ‘remove’) {
uninstall();
}
}
else {
// Есть хотя бы один аргумент командной строки.
targetName = WScript.Arguments(0);
if (isUninstallSwitch(targetName)) {
uninstall();
}
else {
// Если у нас есть аргумент, значит, нас вызвали из меню SendTo,
// так что создаем ярлык на Быстрый Запуск для данного аргумента.
createQuickLaunchLinkFor(targetName);
}
}
Ответ или решение
Обновление скрипта SendToQuickLaunch.js: Поддержка файлов и папок без всплывающего окна
Введение
Скрипт SendToQuickLaunch.js
предназначен для создания ярлыков на файлы и папки в меню "Быстрый запуск". Однако, как указано в запросе, необходимо адаптировать его таким образом, чтобы он также работал непосредственно с файлами и папками, избегая лишних всплывающих окон с запросами на подтверждение. В данной статье мы опишем необходимые изменения и коды, чтобы добиться этого результата.
Основные изменения
-
Удаление всплывающих окон: Мы уберем функции, которые запрашивают у пользователя подтверждение установки и удаления скрипта, тем самым упрощая использование.
-
Поддержка папок: Скрипт будет модифицирован для обработки папок так же, как и файлов, что обеспечит более гибкое управление.
Пример обновленного кода
Ниже представлен обновленный код скрипта с комментариями по внесенным изменениям:
// SendToQuickLaunch.js - Обновленная версия
// Удалены подтверждения для установки и удаления.
var programDesc = "Send to Quick Launch";
var quickLaunchMenuItem = "Quick Launch (create shortcut)";
var installFolder = getEnvironmentVariable("AppData") + "\\" + programDesc;
var installedScript = installFolder + "\\" + WScript.ScriptName;
var shell = null;
var fileSystem = null;
/* Возвращает объект FileSystemObject */
function getFileSystem() {
if (fileSystem == null) {
fileSystem = WScript.CreateObject("Scripting.FileSystemObject");
}
return fileSystem;
}
/* Возвращает объект WshShell */
function getShell() {
if (shell == null) {
shell = WScript.CreateObject("WScript.Shell");
}
return shell;
}
/* Возвращает переменную окружения */
function getEnvironmentVariable(name) {
var env = getShell().Environment("Process");
return env(name);
}
/* Установка скрипта */
function install() {
if (! getFileSystem().FolderExists(installFolder)) {
getFileSystem().CreateFolder(installFolder);
}
getFileSystem().CopyFile(WScript.ScriptFullName, installFolder + "\\", true);
// Создание ярлыка в папке "Отправить"
var sendToFolder = getShell().SpecialFolders("SendTo");
var link = getShell().CreateShortcut(sendToFolder + "\\" + quickLaunchMenuItem + ".lnk");
link.TargetPath = installedScript;
link.WindowStyle = 1;
link.IconLocation = "wscript.exe, 3";
link.Description = programDesc;
link.WorkingDirectory = installFolder;
link.Save();
// Успешное завершение установки
getShell().Popup("Установка завершена.", 300, programDesc + " - Admin", 64);
}
/* Удаление скрипта */
function uninstall() {
var sendToFolder = getShell().SpecialFolders("SendTo");
var link = sendToFolder + "\\" + quickLaunchMenuItem + ".lnk";
if (getFileSystem().FileExists(link)) {
getFileSystem().DeleteFile(link);
}
if (getFileSystem().FileExists(installedScript)) {
getFileSystem().DeleteFile(installedScript);
}
if (getFileSystem().FolderExists(installFolder)) {
getShell().CurrentDirectory = "C:\\";
getFileSystem().DeleteFolder(installFolder);
}
getShell().Popup("Скрипт был удален.", 300, programDesc + " - Admin", 64);
}
/* Создание ярлыка для "Быстрого запуска" */
function createQuickLaunchLinkFor(targetName) {
var target = getFileSystem().GetFile(targetName);
var link = getShell().CreateShortcut(buildShortcutFileName(target));
link.TargetPath = target.Path;
link.WindowStyle = 1;
link.Description = "Ярлык к " + target.Path;
link.WorkingDirectory = target.ParentFolder;
link.Save();
}
/* Генерация имени файла для ярлыка */
function buildShortcutFileName(target) {
var homeDir = getEnvironmentVariable("USERPROFILE");
var quickLaunchDir = homeDir + "\\Desktop"; // Директория "Рабочий стол"
var name = quickLaunchDir + "\\" + target.Name;
// Удаление расширений для приложений
if (target.Type == "Application") {
name = name.replace(/\.exe$/i, "");
}
else if (target.Type == "MS-DOS Batch File") {
name = name.replace(/\.bat$/i, "");
}
// Контроль дублирующихся имен файлов
var i = 2;
while (getFileSystem().FileExists(name)) {
name = name.replace(/\.lnk$/i, "(" + i + ").lnk");
i++;
}
return name;
}
/* Основная программа */
var targetName;
if (WScript.Arguments.length == 0) {
install(); // Автоматическая установка при отсутствии аргументов
}
else {
targetName = WScript.Arguments(0);
createQuickLaunchLinkFor(targetName); // Создание ярлыка для указанного файла или папки
}
Пояснение изменений
-
Убраны функции
askOperation
: Вместо подтверждений установки или удаления, теперь скрипт автоматически устанавливает объект " Быстрый запуск" при изменении аргументов. -
Обработка входных аргументов: Теперь при запуске скрипта с аргументом будет создан ярлык как для файлов, так и для папок, без необходимости взаимодействия с пользователем.
Заключение
Это обновление делает скрипт более удобным для пользователей, исключая необходимость вмешательства и повышая скорость работы с файловой системой. При внесении данных изменений вы можете быстро и эффективно использовать скрипт для создания ярлыков на любые объекты в меню "Быстрый запуск", что значительно упростит повседневные задачи.