Windows Script Host

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
KoS
Сообщения: 9
Зарегистрирован: Вт июн 13, 2006 13:57
Откуда: Киев

Сообщение KoS »

Спасибо за скрипт, но он не работает
Строка: 9
Символ: 1
Ошибка: Файл не найден
Код: 800А0035

Еще я не понимаю, как этот кусок кода можна всунуть в остальной скрипт, если нужен параметр (я просто не разбираюсь в параметрах вызова файлов, и, в частности, не знаю, что это за параметр %L)

И еще - как должен открыться текстовый файл, если не было команды его создать? Он автоматически создается?
Аватара пользователя
funduk
Сообщения: 1515
Зарегистрирован: Вт авг 16, 2005 16:00
Откуда: Санкт-Петербург

Сообщение funduk »

Работает всё. Просто после добавления этого скрипта в панель, нажми на новой кнопке правой кнопкой мыши, выбери "изменить", и нажми F1 - увидишь справку.
Потом добавь %L в поле "параметры".
Аватара пользователя
KoS
Сообщения: 9
Зарегистрирован: Вт июн 13, 2006 13:57
Откуда: Киев

Сообщение KoS »

Спасибо огромное. Работет. Я просто не туда вводил параметр - затупил. Теперь буду пробовать со своим скриптом.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

KoS
Лучше напиши, что ты скриптом делаешь. Возможно, мы тебе покажем более красивые варианты решения твоей задачи.
Аватара пользователя
KoS
Сообщения: 9
Зарегистрирован: Вт июн 13, 2006 13:57
Откуда: Киев

Сообщение KoS »

У меня есть директория с вложеными папками, где хранятся обои рабочего стола. Я полгода назад написал небольшой скриптик, который открывает эту папку, показывает все файлы и случайным образом выбирает файл (случайное число раз нажимает кнопку "ВНИЗ" на клаве). Количество картинок, из которых случайно выбиралась одна, я вводил вручную. Тогда это было не критично, так как новые обои поступали редко.

Потом я понял, что не все обои хороши как обои, хоть я их и сортировал, и удалял некрасивые. Некоторые хороши художественно, но не подходят. Некоторые, хоть и симпотичные, но на 1600х1200 мутноваты итд. Тогда я время от времени стал перед именем файла ставить балл от 1 до 5. 5 - обои, которые мне ООЧень нравятся. 3 - нормальные. 2 - немного раздражают итд. И вот пару дней назад решил обновить свой старый скрипт.

Выборка обоев идет с помощью регулярных выражений в фильтре. Оставалось лишь ввести выбор случайного из даного количества, так как сегодня, например, я хочу обоину с рейтингом 5, а завтра, например, мне будет все-равно, и соглашусь на любую от 3 до 5.

С помощью твоего скрипта у меня все заработало, только мне пришлось его дополнить снизу выбором случайного числа и запихнуть в меню "Запуск", так там можно было поставить параметр. А первая часть скрипта вызывается с панели, открывает новую вкладку, там показывает обои, выделяет их и запускает по хоткею скрипт с узнаванием кол-ва файлов и выбором случайной обои.

Весь скрипт заточен на постоянные директории и на определенные комбинации клавиш. Хоть это и дурной тон, но делал-то я его для себя.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

... только мне пришлось его дополнить снизу выбором случайного числа и запихнуть в меню "Запуск", так там можно было поставить параметр. А первая часть скрипта вызывается с панели ...
Бред какой-то. А что мешает все написать в одном скрипте, который будет вызываться либо из меню "Запуск", либо с панели? Параметр можно указать и там, и там.
Приведи код своих скриптов. Я помогу их переделать. Я бы и сейчас написал, только лень выдумывать алгоритм случайного выбора файла, да и твой критерий поиска по категориям я не знаю.
Аватара пользователя
KoS
Сообщения: 9
Зарегистрирован: Вт июн 13, 2006 13:57
Откуда: Киев

Сообщение KoS »

буду дома, выложу скрипт.

А на счет все в одном скрипте, объясню. Сразу я тоже так хотел. Но если я запускаю основной скрипт с параметром, создается файл, который отвечает за выделенные файлы. Это значит, что когда я в скрипте выделяю файлы, твой код уже считает не те файлы, которые я сейчас скриптом выделил, а те, которые были выделены до запуска скрипта.
Это если я правильно понял. Потому что я еще дома немало повозился, пока нормально соединил твой и свой, с позволения сказать :), скрипты

С панели я вызываю основной скрипт, который выделяет нужные файлы, потом, чтобы создался тот темповский файл, в который входят имена выделенных файлов, нужно запустить твой скрипт отдельно. Хоткей и параметр на него можно наложить, если он в меню "запуск". Поэтому я разбил выполнение на два скрипта.
Аватара пользователя
funduk
Сообщения: 1515
Зарегистрирован: Вт авг 16, 2005 16:00
Откуда: Санкт-Петербург

Сообщение funduk »

Вернёмся к обоям: тебе из большого числа обоев надо выбрать ровно одну? Почему именно скриптом, а не встроенным в тотал поиском?

Вообще, для случайности выбора можно попользоваться плагином misc.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Даю наводку - а зачем вообще выделять найденные скрипты, что если искать самим скриптом и применять случайный алгоритм к списку найденных файлов?
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
KoS
Сообщения: 9
Зарегистрирован: Вт июн 13, 2006 13:57
Откуда: Киев

Сообщение KoS »

funduk, не знаю, что за плагин misc, так как уже месяца три не обновлял свои плагины и не смотрел, что нового на сайте

Batya, я так, по-моему, и делаю

А вот и сами скрипты:

Код: Выделить всё

// KoS Скрипт первый
// Ставим wallpaper, который имеет рейтинг более трех включительно
// Файлы имеют вид: 4 Cat.jpg или 5 Abstract.bmp

//-------------------------------------------------------- 
//Открываем временно новую вкладку. Потом, в конце, мы ее закроем.
//Обои лежат в папке, которая вызывается из Favorites: ctrl+d f w

var xxx = WScript.CreateObject("WScript.Shell");

xxx.SendKeys("^{t}");
xxx.SendKeys("^{d}");
xxx.SendKeys("{f}");
xxx.SendKeys("{w}");
xxx.SendKeys("^{b}");
  WScript.Sleep(300);
  
// Устанавливаем фильтр по ctrl+F12
// Там условие следующее: [345] (.*).(jpg|bmp)
// В меню выбора он вызывается >345
xxx.SendKeys("^{F12}");  
xxx.SendKeys(">");
xxx.SendKeys("345");
xxx.SendKeys("{ENTER}");

xxx.SendKeys("^{a}"); // Выделяем все файлы

xxx.SendKeys("^%{F1}"); // Запускаем другой скрипт, который висит в меню "Запуск" на ctrl+alt+F1
Второй скрипт:

Код: Выделить всё

/* ====================================Batya 
   Подсчет количества выделенных файлов 
   Параметры вызова из TC: %L 
==================================== */ 
var objArgs, FSO, TextFile, p = 0; 
objArgs = WScript.Arguments; 
FSO = new ActiveXObject("Scripting.FileSystemObject"); 
TextFile = FSO.OpenTextFile(objArgs(0)); 
while (!TextFile.AtEndOfStream) 
{ 
  p++; 
  TextFile.SkipLine(); 
} 
TextFile.Close(); 


//===============================================KoS

var xxx = WScript.CreateObject("WScript.Shell");


var r = Math.random()
for (var i = 1; i <= r * p; i++)
xxx.SendKeys("{DOWN}");

xxx.SendKeys("^%{F2}"); //пришлось установить команду "снять все выделение" на дополнительную комбинацию клавиш: ctrl+alt+F2, потому что в скрипте почему-то не работали ни ctrl+Num-, ни Num*
//Может, я их не правильно записывал, может для Num нужно что-то особенное

xxx.SendKeys("{F3}");
  WScript.Sleep(100);
xxx.SendKeys("+{e}"); // у меня на просмотр картинок стоит "sgviewer"
  WScript.Sleep(100);
xxx.SendKeys("{ESC}");
xxx.SendKeys("^{F10}");
xxx.SendKeys("^{w}"); // закрываем вкладку
WScript.Sleep(100);
Аватара пользователя
funduk
Сообщения: 1515
Зарегистрирован: Вт авг 16, 2005 16:00
Откуда: Санкт-Петербург

Сообщение funduk »

А плагина misc на сайте нет. На форуме есть тема про неучтённые плагины.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

KoS
Вот так, на мой взгляд, будет красивее:

Код: Выделить всё

var objArgs, FSO, MyPictures, PicturesRank, FileArray = new Array( ), r, Irfan, WshShell;
// ============= Задайте каталог картинок ===============
MyPictures = "c:\\MyPictures\\Collection";
// ============== Задайте путь IrfanView ================
Irfan = '"D:\\Program Files\\IrfanView\\i_view32.exe"'
// ======================================================

// === Минимальное желаемое качество картинок ===
objArgs = WScript.Arguments;
if (objArgs.length == 0)
  PicturesRank = 5;
else
  PicturesRank = objArgs(0);
  
FSO = new ActiveXObject("Scripting.FileSystemObject");
ToProcess(MyPictures);

r = Math.round(Math.random() * FileArray.length);
WshShell = WScript.CreateObject("WScript.Shell");
WshShell.Run(Irfan + " " + FileArray[r] + " /wall=2 /killmesoftly");

function ToProcess(FolderPath)
{
  var ParentFolder, FilesCollection, FoldersCollection, FileName, FileExt;
  ParentFolder      = FSO.GetFolder(FolderPath);
  FilesCollection   = new Enumerator(ParentFolder.files);
  FoldersCollection = new Enumerator(ParentFolder.SubFolders);

  // === Обработаем вложенные файлы ===
  for (; !FilesCollection.atEnd(); FilesCollection.moveNext())
  {
    FileName = FilesCollection.item().Name;
    FileExt  = FSO.GetExtensionName(FilesCollection.item()).toLowerCase( );
    // === Условие отбора картинок ===
    if ((FileName.substr(0, 1) >= PicturesRank) && ((FileExt == "jpg") || (FileExt == "bmp")))
    {
      FileArray = FileArray.concat(FilesCollection.item());
    }
  }
  // === Обработаем вложенные папки ===
  for (; !FoldersCollection.atEnd(); FoldersCollection.moveNext())
  {
    ToProcess(FoldersCollection.item());
  }
}
Установку обоев сделал через IrfanView - можно сделать через командную строку.
Скрипту в качестве параметра можно передать цифру - категорию картинки. Если не передано, по умолчанию - 5. Скрипт ищет картинки с категорией не меньше указанной. Если нужен другой алгоритм поиска, скрипт легко переделать.

Удачи!

P.S. Если где-то можно скрипт упростить, прошу не ругаться - на Java Script пишу мало.
Аватара пользователя
KoS
Сообщения: 9
Зарегистрирован: Вт июн 13, 2006 13:57
Откуда: Киев

Сообщение KoS »

Я поражен красотой скрипта! Все работет. Проверял в разных ситуациях.
Хоть и не все мне понятно. Как сложный английский текст - многие слова понятны, некоторые конструкции ясны, общий смысл улавливаю, но конкретно пересказать не смогу. :)

Спасибо. Реально намного более гибкий скрипт.

А на счет js.. :)
Я пишу скрипты на том языке, для которого в мануале нашел описание на нужную функцию или вообще кусок аналогичного примера
Поэтому мне это не так принципиально :)

Но за красивый скрипт - огромное спасибо! Получаешь огромное удовольствие, когда после неуклюжего монстра смотришь на токого элегантного джентельмена ;)
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Я доволен, что скрипт понравился :)
Если что-то конкретно не понятно, спрашивай.
Нет, я не сплю. Я просто медленно моргаю.
Fktrc
Сообщения: 13
Зарегистрирован: Ср янв 26, 2005 08:12
Откуда: Кемерово

Сообщение Fktrc »

Volniy писал(а):Это далеко не новинка, видел и покруче (поищи по словам "wsh API Toolkit OCX")
А попробуй вот это: http://www.yandex.ru/yandsearch?rpt=rad ... X&numdoc=0 :D
Ответить