Страница 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 