В последней на данный момент статье цикла, посвящённого разработке HTML-приложений Internet Explorer, мы рассмотрим создание ярлыков и работу с ними.
Внимание! Перед чтением этой статьи настоятельно рекомендуется ознакомиться с предыдущими статьями цикла, посвящённого HTML-приложениям Internet Explorer.
1. Получение доступа к средствам для работы с ярлыками WSH
Для работы с ярлыками используется знакомый нам по предыдущим статьям цикла внешний объект WScript.Shell, реализуемые программой Windows Scripting Host, или WSH. (Кроме того, мы будем пользоваться ещё двумя внешними объектами, реализуемыми этой же программой; мы рассмотрим их по ходу дела.)
Как создать экземпляр объекта WScript.Shell, мы уже знаем.
var oWSS = new ActiveXObject("WScript.Shell");
2. Создание ярлыков, указывающих на файлы и папки
Сначала разберём процесс создания ярлыков, указывающих на файлы и папки.
Любой ярлык создаётся в три этапа. Рассмотрим их по очереди.
2.1. Собственно создание ярлыка
Первое, что нам нужно сделать для создания ярлыка, - это собственно создать ярлык. Для этого мы используем метод CreateShortcut объекта WScript.Shell. Вот формат его вызова:
<экземпляр объекта WScript.Shell>.CreateShortcut(
<путь к создаваемому файлу ярлыка>
);
емому файлу ярлыка>
);[/code]
Как видим, единственным параметром этому методу передаётся путь к создаваемому файлу ярлыка. Отметим, что это путь именно к самому файлу ярлыка, а не к файлу или папке, на которую он должен указывать. Путь передаётся в виде строки.
Внимание! Файл ярлыка обязательно должен иметь расширение lnk, иначе система не сможет правильно его обработать.
Внимание! Если путь к файлу ярлыка содержит несуществующие папки, то при выполнении Web-сценария возникнет ошибка.
Метод CreateShortcut возвращает экземпляр особого объекта WshShortcut, который представляет ярлык, указывающий на файл или папку.
Здесь нужно иметь в виду такой момент. Метод CreateShortcut реально не создаёт файл ярлыка. Он просто формирует в оперативной памяти структуру данных, представляющий ярлык; как отмечалось выше, этой структурой данных является экземпляр объекта WshShortcut. Он пока что не содержит ни пути к файлу или папке, на которую должен указывать ярлык, ни прочих параметров, которые этот ярлык может иметь. Это чистый лист, которые нам придётся заполнить нужным содержимым.
Внимание! Если в вызове метода CreateShortcut указать путь к существующему файлу ярлыка, метод откроет этот ярлык и вернёт в качестве результата представляющий его экземпляр объекта WshShortcut или WshURLShortcut. С помощью этого экземпляра объекта мы можем изменить параметры ярлыка. Подробнее об этом мы поговорим далее.
[code]var sDesktopPath = oWSS.SpecialFolders("Desktop");
var shcTextEdit = oWSS.CreateShortcut(sDesktopPath + "\\TextEdit.lnk");[/code]
Первое из этих двух выражений заносит в переменную sDesktopPath путь к папке, представляющей Рабочий стол текущего пользователя. (Подробнее о получении путей к системным папкам см. в статье, рассказывающей о работе с файлами, папками и дисками.) Второе выражение создаёт файл ярлыка, который будет находиться в этой папке и иметь имя TextEdit.lnk (расширение lnk обязательно!).
При указании путей к файлам и папкам следует иметь в виду следующее. Для разделения имён папок и файла в путях применяется символ обратного слеша (\). Этот же символ применяется для указания специальных символов (литералов) в строковых значениях JavaScript; например, литерал \" обозначает символ двойной кавычки, который нельзя просто так вставить в строку. Так вот, чтобы поместить в строку именно символ обратного слеша, следует использовать литерал \\ (что мы и сделали в предыдущем примере).
2.2. Задание параметров ярлыка
Создав "пустой" ярлык описанным в предыдущем параграфе способом, мы сможем задать его параметры - таков второй шаг в процессе создания ярлыка. Для этого используются свойства объекта WshShortcut, которые мы сейчас рассмотрим.
Свойство TargetPath задаёт путь к файлу или папке, на которую должен указывать ярлык, в виде строки. Аргументы командной строки, если они требуются для запуска файла, здесь не допускаются; как их задать, будет описано далее.
Здесь мы сначала получаем путь к текущей папке HTML-приложения TextEdit (это простейший текстовый редактор, который мы создали в первых статьях этого цикла), добавляем к нему имя файла этого приложения и задаём результат в качестве пути к файлу, на который должен указывать ярлык. То есть мы создаём ярлык, указывающий на файл нашего приложения текстового редактора.
Свойство WorkingDirectory задаёт путь к рабочей папке приложения, если ярлык указывает на исполняемый файл, в виде строки.
Задаём для ярлыка нашего HTML-приложения в качестве рабочей его текущую папку.
Свойство Arguments задаёт параметры командной строки, с которыми должно быть запущено приложение, в виде строки. Его имеет смысл задавать только если ярлык указывает на исполняемый файл. Параметры должны быть указаны в том виде, в котором они набираются при запуске приложения из командной строки.
Задаём в качестве параметра запуска нашего приложения имя файла testfile.txt и число 3.
Свойство Description задаёт описание ярлыка в виде строки.
[code]shcTextEdit.Description = "Ярлык, указывающий на HTML-приложение текстового редактора";[/code]
Свойство IconLocation задаёт путь к иконке, которая будет использована для создания ярлыка. Значение этого свойства должно быть задано в виде строки следующего формата:
[code]<путь к файлу иконки или исполняемому файлу, содержащему нужную иконку>, <номер иконки>[/code]
Не забываем, что нумерация иконок, хранящихся в файлах, начинается с нуля.
Задаём для ярлыка первую (номер 0) иконку, хранящуюся в файле TextEdit.ico, который находится в текущей папке приложения. (Впрочем, это единственная иконка в данном файле.)
Или, возможно, нам лучше подойдёт первая (и, опять же, единственная) иконка, хранящаяся в исполняемом файле Блокнота?..
Свойство Hotkey задаёт описание "горячей" комбинации клавиш, с помощью которой можно открыть файл или папку, в виде строки.
Здесь нужно иметь в виду три вещи.
Во-первых, такая комбинация клавиш может содержать алфавитно-цифровые клавиши (a-z и 0-9), функциональные клавиши (F1-F12) и клавиши-модификаторы (SHIFT, CTRL и ALT); наименования отдельных клавиш должны отделяться друг от друга символами плюса (+).
Во-вторых, в современных версиях Windows свободными для использования в ярлыках являются комбинации клавиш, начиная с CTRL+ALT+<клавиша>.
В-третьих, запуск с помощью "горячих" комбинаций клавиш поддерживается только для ярлыков, находящихся на Рабочем столе и в меню Пуск.
[code]shcTextEdit.Hotkey = "CTRL+ALT+T";[/code]
Задаём для нашего ярлыка "горячую" комбинацию клавиш <CTRL+<ALT>+<T>.
Свойство WindowStyle задаёт изначальное состояние окна, в котором будет открыт файл или содержимое папки, в виде целого числа. Доступны следующие значения:
1 - обычное окно;
3 - максимизированное окно;
7 - минимизированное окно.
[code]shcTextEdit.WindowStyle = 3;[/code]
Делаем окно нашего приложения изначально максимизированным. (Правда, толку от этого не будет никакого, так как наше приложение само задаст размеры своего окна прямо при запуске.)
Возможно, нам пригодится также свойство FullName. Оно возвращает полный путь к файлу ярлыка в виде строки и доступно только для чтения.
Третья, и заключительная, операция создания ярлыка - его сохранение. При этом файл ярлыка будет собственно создан на диске.
Для сохранения ярлыка нам следует вызвать метод Save объекта WshShortcut. Этот метод не принимает параметров и не возвращает результата.
[code]shcTextEdit.Save();[/code]
3. Создание ярлыков, указывающих на интернет-адреса
Ярлыки, указывающие на интернет-адреса, создаются таким же способом, как и их "коллеги", указывающие на файлы и папки. Мы создаём ярлык, задаём его свойства и, наконец, сохраняем.
Единственное исключение - для ярлыков, указывающих на интернет-адреса, мы можем указать только сам интернет-адрес. Он указывается с помощью знакомого нам свойства TargetPath объекта WshShortcut.
Создаём на Рабочем столе текущего пользователя ярлык, указывающий на интернет-адрес нашего любимого Web-сайта.
4. Правка ярлыков
WSH также предоставляет нам возможность исправить параметры любого из уже созданных ярлыков. Сейчас мы выясним, как это делается.
Сначала мы вызовем знакомый нам метод CreateShortcut объекта WScript.Shell, передав ему в качестве параметра путь к существующему файлу ярлыка.
Если данный ярлык указывает на файл или папку, метод CreateShortcut вернёт нам экземпляр объекта WshShortcut, представляющий этот ярлык. (Об этом уже упоминалось в параграфе 2.1.) Мы можем воспользоваться его свойствами, чтобы указать новые значения параметров ярлыка. А после этого не забудем вызвать метод Save, чтобы сохранить исправленный ярлык.
Открываем созданный ранее ярлык, указывающий на HTML-приложение текстового редактора TextEdit, убираем у него параметры командной строки (для чего присваиваем свойству Arguments пустую строку), задаём обычное состояние окна и сохраняем.
Если же открытый ярлык указывает на интернет-адрес, метод CreateShortcut возвращает экземпляр объекта WshUrlShortcut, представляющий такой ярлык. От объекта WshShortcut он отличается только тем, что из всех описанных в параграфе 2.2 свойств поддерживает только TargetPath и FullName.
Задаём для созданного ранее ярлыка, указывающего на Web-сайт TheVista.ru, интернет-адрес Web-страницы форума этого Web-сайта.
5. Копирование, перемещение, переименование и удаление ярлыков
Поскольку ярлыки являются обычными файлами, для их копирования, перемещения, переименования и удаления мы можем использовать средства, описанные в статье, которая повествует о работе с файлами, папками и дисками.
[code]var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var sStartMenuPath = oWSS.SpecialFolders("StartMenu");
oFSO.CopyFile(sDesktopPath + "\\TextEdit.lnk", sStartMenuPath + "\\");[/code]
Копируем ярлык, указывающий на приложение TextEdit, с Рабочего стола текущего пользователя в его же меню Пуск.
6. Пример приложения, создающего ярлык
В предыдущей статье цикла, описывающей работу с Реестром, мы модифицировали наше HTML-приложение текстового редактора TextEdit таким образом, чтобы оно хранило в Реестре свои настройки. Давайте добавим в него средства для создания ярлыка, указывающего на него самого. Пусть этот ярлык создаётся в меню Пуск текущего пользователя.
В процессе модификации приложения мы создали функцию readOptions, являющуюся обработчиком события load Web-страницы и выполняющую чтение настроек из Реестра. Эта функция - лучшее место для размещения кода, выполняющего создание ярлыка, поскольку событие load возникает, как только Web-страница полностью загрузится.
Ниже приведён исправленный код тела функции readOptions в сокращении.
[code]function readOptions()
{
var oWSS = new ActiveXObject("WScript.Shell");
. . .
var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var sStartMenuPath = oWSS.SpecialFolders("StartMenu");
var sShortcutFilePath = sStartMenuPath + "\\TextEdit.lnk";
if (!(oFSO.FileExists(sShortcutFilePath))) {
var shcTextEdit = oWSS.CreateShortcut(sShortcutFilePath);
shcTextEdit.TargetPath = oWSS.CurrentDirectory + "\\TextEdit_modal.hta";
shcTextEdit.WorkingDirectory = oWSS.CurrentDirectory;
shcTextEdit.Description = "Простейший текстовый редактор";
shcTextEdit.IconLocation = oWSS.CurrentDirectory + "\\Textedit.ico, 0";
shcTextEdit.WindowStyle = 1;
shcTextEdit.Save();
}
}[/code]
Здесь мы перед созданием ярлыка проверяем, не создан ли он уже. (Как это делается, было описано в статье, посвящённой работе с файлами, папками и дисками.) Не имеет смысла выполнять повторно уже выполненную работу...
В остальном приведённый выше код не требует комментариев. Так что можем сразу же проверить исправленное приложение в действии.
Внимание! Гиперссылка Arguments, расположенная на Web-странице с этой статьёй, ведёт на статью, описывающую одноимённое свойство, но не объекта WshShortcut, а объекта WScript.Shell. Статьи, описывающей свойство Arguments объекта WshShortcut, на Web-сайте MSDN автору обнаружить не удалось. Приведённые в этой статье сведения о данном свойстве получены опытным путём.
Сайт является источником уникальной информации о семействе операционных систем Windows и других продуктах Microsoft. Перепечатка материалов возможна только с разрешения редакции.
Работает на WMS 2.34 (Страница создана за 0.031 секунд (Общее время SQL: 0.014 секунд - SQL запросов: 53 - Среднее время SQL: 0.00026 секунд))