Я хотел бы, чтобы этот скрипт работал с “файлами и папками” и избегал всплывающего окна.

Вопрос или проблема

// 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 предназначен для создания ярлыков на файлы и папки в меню "Быстрый запуск". Однако, как указано в запросе, необходимо адаптировать его таким образом, чтобы он также работал непосредственно с файлами и папками, избегая лишних всплывающих окон с запросами на подтверждение. В данной статье мы опишем необходимые изменения и коды, чтобы добиться этого результата.

Основные изменения

  1. Удаление всплывающих окон: Мы уберем функции, которые запрашивают у пользователя подтверждение установки и удаления скрипта, тем самым упрощая использование.

  2. Поддержка папок: Скрипт будет модифицирован для обработки папок так же, как и файлов, что обеспечит более гибкое управление.

Пример обновленного кода

Ниже представлен обновленный код скрипта с комментариями по внесенным изменениям:

// 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); // Создание ярлыка для указанного файла или папки
}

Пояснение изменений

  1. Убраны функции askOperation: Вместо подтверждений установки или удаления, теперь скрипт автоматически устанавливает объект " Быстрый запуск" при изменении аргументов.

  2. Обработка входных аргументов: Теперь при запуске скрипта с аргументом будет создан ярлык как для файлов, так и для папок, без необходимости взаимодействия с пользователем.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...