Книга: Windows Script Host для Windows 2000/XP

Интерактивный выбор программ автозагрузки

Интерактивный выбор программ автозагрузки

Как известно, в подменю Программы (Programs) стартового меню Windows имеется пункт Автозагрузка (Startup), в который можно поместить ярлыки тех программ, которые должны быть автоматически запущены при регистрации пользователя в системе. Однако в процессе загрузки своего профиля пользователь не имеет возможности запустить только какие-либо определенные программы из папки автозагрузки — можно либо запустить все программы, либо не запускать ни одной (для этого необходимо в процессе регистрации в системе удерживать нажатой клавишу <Shift>).

Мы напишем сценарий Logon.js, с помощью которого пользователь при входе сможет выбрать запускаемые программы; назначив этот сценарий в качестве сценария входа групповой политики, мы сделаем процесс автозагрузки приложений интерактивным.

Начнем мы с того, что создадим в каталоге %SystemDrive%Documents and SettingsAll UsersГлавное меню, в котором хранятся ярлыки программ из стартового меню для всех пользователей, папку Выборочная автозагрузка и поместим туда ярлыки для нужных приложений (рис. 11.17).

После этого ярлыки из обычной папки Автозагрузка нужно убрать. Рассмотрим теперь алгоритм работы сценария входа Logon.js.

Вначале нужно определить путь к папке выборочной автозагрузки (переменная PathStartup). Для этого мы воспользуемся объектом WshSpecialFolders:

//Создаем объект WshShell
WshShell=WScript.CreateObject("Wscript.Shell");
//Создаем объект WshSpecialFolders
WshFldrs=WshShell.SpecialFolders;
//Определяем путь к папке выборочной автозагрузки
PathStartup=WshFldrs.item("AllUsersStartMenu")+"Выборочная автозагрузка";


Рис. 11.17. Новая папка Выборочная автозагрузка

Зная путь к нужной папке, мы формируем коллекцию всех файлов, которые находятся в ней (переменная Files):

//Создаем объект FileSystemObject
FSO=WScript.CreateObject("Scripting.FileSystemObject");
//Создаем объект Folder для папки выборочной автозагрузки
Folder=FSO.GetFolder(PathStartup);
//Создаем коллекцию файлов каталога выборочной автозагрузки
Files=new Enumerator(Folder.Files);

После этого мы выводим на экран диалоговое окно с вопросом, нужно ли запустить программы из папки автозагрузки в пакетном режиме, т.е. все сразу (рис. 11.18).


Рис. 11.18. Выбор режима автозагрузки программ (пакетный или интерактивный)

В зависимости от нажатой в диалоговом окне кнопки мы присваиваем логическое значение переменной IsRunAll, определяющей режим автозагрузки программ (если IsRunAll равно false, то для каждой программы будет выдаваться запрос на ее запуск, в противном случае все программы запускаются без предупреждения):

//Выводим запрос на запуск сразу всех программ
Res=WshShell.Popup("Запустить сразу все программы?", 0,
 "Выборочная автозагрузка", vbQuestion+vbYesNo);
//Определяем, нажата ли кнопка "Да"
IsRunAll=(Res==vbYes);

Далее в цикле while производится перебор всех файлов из коллекции Files; переменная File соответствует текущему файлу в коллекции:

//Цикл по всем файлам каталога выборочной автозагрузки
while (!Files.atEnd()) {
 //Создаем объект File для текущего элемента коллекции
 File=Files.item();
 //Переходим к следующему файлу в коллекции
 Files.moveNext();
}

Если ранее был выбран интерактивный режим запуска программ (переменная IsRunAll равна false), то мы выводим запрос на запуск текущего файла (рис. 11.19):

//Обнуляем переменную Res Res=0;
if (!IsRunAll) //Программы нужно запускать по одной
 //Выводим запрос на запуск одной программы
 Res=WshShell.Popup("Запустить "+File.Name+"?", 0, "Выборочная автозагрузка", vbQuestion+vbYesNo);


Рис. 11.19. Запрос на запуск одной программы из папки автозагрузки

Если пользователь решил запустить программу (переменная Res равна vbYes) или программы запускаются в пакетном режиме, то мы запускаем текущую программу в минимизированном окне с помощью метода Run объекта WshShell:

if ((IsRunAll) || (Res=vbYes))
 //Запускаем текущую программу в минимизированном окне
 WshShell.Run("""+File.Path+" "", vbMinimizedFocus);

Так как в полном имени запускаемой программы могут быть пробелы, это имя нужно заключить в двойные кавычки с помощью escape-последовательности ".

Замечание

Другим вариантом запуска с помощью метода Run программ, имена которых содержат пробелы, можно использовать короткие имена папок и файлов посредством свойства ShortPath объекта File: WshShell.Run(File.ShortPath, vbMinimizedFocus);

Полностью текст сценария Logon.js приведен в листинге 11.10.

Листинг 11.10. Сценарий входа, позволяющий выбирать программы для автозагрузки

//*******************************************************************/
/* Имя: Logon.js                                                   */
/* Язык: JScript                                                   */
/* Описание: Сценарий входа, позволяющий выбирать программы для    */
/*           автозагрузки                                          */
/*******************************************************************/
//Объявляем переменные
var
 FSO,         //Экземпляр объекта FileSystemObject
 WshShell,    //Экземпляр объекта WshShell
 WshFldrs,    //Экземпляр объекта WshSpecialFolders
 PathStartup, //Путь к папке выборочной автозагрузки
 Folder,      //Экземпляр объекта Folder для папки
              //выборочной автозагрузки
 Files,       //Коллекция файлов в папке выборочной автозагрузки
 File,        //Экземпляр объекта File для ярлыка в папке
              //выборочной автозагрузки
 Res,         //Результат нажатия кнопок в диалоговых окнах
 IsRunAll;    //Логический флаг, указывающий, надо ли запустить
              //сразу все программы из автозагрузки
//Инициализируем константы для диалоговых окон
var vbYesNo=4,vbQuestion=32,vbYes=6,vbOkOnly=0,vbMinimizedFocus=2;
//Создаем объект WshShell
WshShell=WScript.CreateObject("Wscript.Shell");
//Создаем объект WshSpecialFolders
WshFldrs=WshShell.SpecialFolders;
//Определяем путь к папке выборочной автозагрузки
PathStartup=WshFldrs.item("AllUsersStartMenu")+"Выборочная автозагрузка";
//Создаем объект FileSystemObject
FSO=WScript.CreateObject("Scripting.FileSystemObject");
//Создаем объект Folder для папки выборочной автозагрузки
Folder=FSO.GetFolder(PathStartup);
//Создаем коллекцию файлов каталога выборочной автозагрузки
Files=new Enumerator(Folder.Files);
//Выводим запрос на запуск сразу всех программ
Res=WshShell.Popup("Запустить сразу все программы?",0,
  "Выборочная автозагрузка",vbQuestion+vbYesNo);
//Определяем, нажата ли кнопка Да
IsRunAll=(Res==vbYes);
//Цикл по всем файлам каталога выборочной автозагрузки
while (!Files.atEnd()) {
 //Создаем объект File для текущего элемента коллекции
 File=Files.item();
 //Обнуляем переменную Res
 Res=0;
 if (!IsRunAll) //Программы нужно запускать по одной
  //Выводим запрос на запуск одной программы
  Res=WshShell.Popup("Запустить "+File.Name+"?",0,
   "Выборочная автозагрузка",vbQuestion+vbYesNo);
 if ((IsRunAll) || (Res==vbYes))
  //Запускаем текущую программу в минимизированном окне
  WshShell.Run("""+File.Path+""",vbMinimizedFocus);
 //Переходим к следующему файлу в коллекции
 Files.moveNext();
}
/*************  Конец *********************************************/

Оглавление книги


Генерация: 3.773. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз