Страница 5 из 27

Добавлено: Вт июн 13, 2006 17:40
KoS
Спасибо за скрипт, но он не работает
Строка: 9
Символ: 1
Ошибка: Файл не найден
Код: 800А0035

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

И еще - как должен открыться текстовый файл, если не было команды его создать? Он автоматически создается?

Добавлено: Вт июн 13, 2006 17:50
funduk
Работает всё. Просто после добавления этого скрипта в панель, нажми на новой кнопке правой кнопкой мыши, выбери "изменить", и нажми F1 - увидишь справку.
Потом добавь %L в поле "параметры".

Добавлено: Вт июн 13, 2006 18:33
KoS
Спасибо огромное. Работет. Я просто не туда вводил параметр - затупил. Теперь буду пробовать со своим скриптом.

Добавлено: Ср июн 14, 2006 09:43
Batya
KoS
Лучше напиши, что ты скриптом делаешь. Возможно, мы тебе покажем более красивые варианты решения твоей задачи.

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

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

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

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

Весь скрипт заточен на постоянные директории и на определенные комбинации клавиш. Хоть это и дурной тон, но делал-то я его для себя.

Добавлено: Ср июн 14, 2006 14:35
Batya
... только мне пришлось его дополнить снизу выбором случайного числа и запихнуть в меню "Запуск", так там можно было поставить параметр. А первая часть скрипта вызывается с панели ...
Бред какой-то. А что мешает все написать в одном скрипте, который будет вызываться либо из меню "Запуск", либо с панели? Параметр можно указать и там, и там.
Приведи код своих скриптов. Я помогу их переделать. Я бы и сейчас написал, только лень выдумывать алгоритм случайного выбора файла, да и твой критерий поиска по категориям я не знаю.

Добавлено: Ср июн 14, 2006 15:32
KoS
буду дома, выложу скрипт.

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

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

Добавлено: Ср июн 14, 2006 15:48
funduk
Вернёмся к обоям: тебе из большого числа обоев надо выбрать ровно одну? Почему именно скриптом, а не встроенным в тотал поиском?

Вообще, для случайности выбора можно попользоваться плагином misc.

Добавлено: Ср июн 14, 2006 15:49
Batya
Даю наводку - а зачем вообще выделять найденные скрипты, что если искать самим скриптом и применять случайный алгоритм к списку найденных файлов?

Добавлено: Ср июн 14, 2006 20:19
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);

Добавлено: Ср июн 14, 2006 20:23
funduk
А плагина misc на сайте нет. На форуме есть тема про неучтённые плагины.

Добавлено: Чт июн 15, 2006 13:35
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 пишу мало.

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

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

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

Но за красивый скрипт - огромное спасибо! Получаешь огромное удовольствие, когда после неуклюжего монстра смотришь на токого элегантного джентельмена ;)

Добавлено: Чт июн 15, 2006 15:24
Batya
Я доволен, что скрипт понравился :)
Если что-то конкретно не понятно, спрашивай.

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