Страница 1 из 3

Переключение между разными базами эскизов

Добавлено: Ср ноя 23, 2011 19:15
Avada
По ходу приватного обсуждения в ЛС с участником форума Кабал, запросившим возможность переключения между разным размером эскизов, выяснилось, что задачу можно решить, если одноимённые файлы баз для эскизов с разным размером будут лежать независимо друг от друга в двух разных папках. Например, C:\Totalcmd\Base\1 и C:\Totalcmd\Base\2. Вручную эта методика работает — базы подхватываются, не мешают друг другу и не требуют удаления при переключении кэша.
Чтобы автоматизировать процедуру, хотелось бы получить скрипт, отрабатывающий такую последовательность действий:
1. Открыть диалог настроек на странице "Эскизы" (cm_ThumbnailsConfig).
2. Перевести по Tab (1 раз) фокус на поле "Расположение базы данных".
3. Вставить альтернативный путь, заместив прежний.
5. Перевести по Tab (7 раз) фокус на первое поле размера.
4. Вставить альтернативный размер, заместив прежний.
6. Перевести по Tab (1 раз) фокус на второе поле размера.
7. Вставить альтернативный размер, заместив прежний.
8. Нажать Enter (сохранить изменения и закрыть диалог).
Исходный скрипт с произвольными путём и размерами понадобится отредактировать и сохранить со своими данными как два разных скрипта (переход с меньшего размера эскизов на больший и наоборот), а для двух этих скриптов уже создавать кнопки или em-команды.

Добавлено: Ср ноя 23, 2011 20:31
Вахмурка

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

args Path, Size1, Size2
local hwnd = win.handle("C=TTOTAL_CMD")
clip.save
clip.clear
clip.set(Path)
wait.for(clip.get)
wait.for(clip.get == Path)
win.postmessage(hwnd, 0x400+51, 482, 0)
*keys {tab}
clip.paste
wait.for(50)
clip.clear
clip.set(Size1)
wait.for(clip.get)
wait.for(clip.get == Size1)
*keys {tab 7}
clip.paste
wait.for(50)
clip.clear
clip.set(Size2)
wait.for(clip.get)
wait.for(clip.get == Size2)
*keys {tab}
clip.paste
wait.for(50)
*keys {enter}
clip.load
Нужны:
1) PowerPro;
2) Плагины win и clip (входят в стандартную поставку).
Кнопка:

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

TOTALCMD#BAR#DATA
e:\Utils\PowerPro\powerpro.exe
runfile.имя_скрипта("e:\новый\путь\к\базе", 128, 128)
E:\путь\к\икноке\иконка.ICO
test", "


-1

Добавлено: Ср ноя 23, 2011 22:44
Avada
Вахмурка
За вариант с PowerPro спасибо, но хотелось бы также иметь альтернативу без.

Добавлено: Пт ноя 25, 2011 20:45
Кабал
Avada. Согласен. Хочется скрипт, который я мог бы применить без дополнительных средств.

Добавлено: Вс ноя 27, 2011 01:34
Rodny
Куда-то скриптописцы подевались...
Кабал писал(а):Хочется скрипт, который я мог бы применить без дополнительных средств.
Script Helper считается за доп. средство?
ChangeCacheBase.vbs

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

'==============================================================================
' Переключение между разными базами эскизов
' http://forum.wincmd.ru/viewtopic.php?t=14269

' Параметры для кнопки (путь - в кавычках)
' Путь Первый_размер Второй_размер

' Необходим Script Helper ActiveX от Volniy
'==============================================================================
Option Explicit
Dim TCS, Path, Size1, Size2
Set TCS = CreateObject("TCScript.Helper")

Path = WScript.Arguments(0)
Size1 = WScript.Arguments(1)
Size2 = WScript.Arguments(2)

'1. Открыть диалог настроек на странице "Эскизы" (cm_ThumbnailsConfig).
TCS.SendCommand(482)
'2. Перевести по Tab (1 раз) фокус на поле "Расположение базы данных".
TCS.SendKeystroke "{TAB}"
'3. Вставить альтернативный путь, заместив прежний.
TCS.SendKeystroke Path
'4. Перевести по Tab (7 раз) фокус на первое поле размера.
TCS.SendKeystroke "{TAB 7}"
'5. Вставить альтернативный размер, заместив прежний.
TCS.SendKeystroke Size1
'6. Перевести по Tab (1 раз) фокус на второе поле размера.
TCS.SendKeystroke "{TAB}"
'7. Вставить альтернативный размер, заместив прежний.
TCS.SendKeystroke Size2
'8. Нажать Enter (сохранить изменения и закрыть диалог)
TCS.SendKeystroke "{ENTER}"

Set TCS = Nothing
Wscript.Quit()
Кнопка

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\Scripts\ChangeCacheBase.vbs
"C:\Totalcmd\Base\1" 128 128
%WINDIR%\System32\WScript.exe
Переключение между разными базами эскизов


-1

Добавлено: Вс ноя 27, 2011 09:29
Avada
Rodny
Спасибо, работает. А Script Helper лично я согласен за доп. средство не считать, так что результат вполне устраивает.
Только (пояснение для новичков) кнопок там, разумеется должно быть две (вторая создаётся на основе первой с изменением пути к базе и размеров).

Добавлено: Вт мар 26, 2013 15:52
Avada
Прошу подсказать, как при использовании имеющегося скрипта от Rodny обеспечить возможность корректно вставлять путь к базе, содержащий переменную %Commander_path% — без искажений и обязательно с сохранением этой переменной. При указании переменной в кнопке в поле "Параметры" номер не проходит ни с одиночными символами процента, ни с удвоенными: вставляется усечённый путь. Если же указывать путь в поле "Команда", переменная раскрывается правильно, но вставленный путь сохраняется в явном виде.
На уже имеющиеся темы с обсуждением сходного вопроса прошу не ссылаться: мне нужно решение именно в данной конкретной ситуации.

Добавлено: Вт мар 26, 2013 16:33
Lev
Так?

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

Set WshShell = WScript.CreateObject("WScript.Shell")
Path = Replace (WScript.Arguments(0), "%Commander_path%", WshShell.ExpandEnvironmentStrings("%Commander_path%"))

Добавлено: Вт мар 26, 2013 17:44
Flasher
Avada писал(а):с сохранением этой переменной
Зачем? Она же раскрываться должна.

Lev, WSH без объявления переменной через DIM не работает, поэтому лучше сразу вызывать:

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

Path = CreateObject("WScript.Shell").Environment("Process")("COMMANDER_PATH")
Это я скидывал клиенту ещё до Rodny:

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

' Переключаться между 2-мя размерами эскизов
'===========================================
With CreateObject("TCScript.Helper")
  If .INIRead(.MainINI, "Configuration", "ThumbHeightNoCache", "") = "80" Then
    F = "2"   ' Задаём имя папки ( 1 символ)
    W = "120" ' Задаём ширину
    H = "120" ' Задаём высоту
  Else
    F = "1"
    W = "80"
    H = "80"
  End If
  .SendCommand 482
  .SendKeystroke "{TAB}{END}{BS}" & F & "{TAB 7}" & W & "{TAB}" & H & "~"
  .INIWrite .MainINI, "Configuration", "ThumbHeightNoCache", H
End With

Добавлено: Вт мар 26, 2013 18:05
Lev
Flasher писал(а):Lev, WSH без объявления переменной через DIM не работает, поэтому лучше сразу вызывать
Во первых предлагалась правка к скрипту, где все переменные объявлены
Во вторых - впервые слышу, что "WSH без объявления переменной через DIM не работает". У меня уже десяток лет без объявлений wsh трудится. Может у Вас Option Explicit в каждом скрипте воткнут?
В третьих - перед постом протестировал свою пару строчек

Добавлено: Вт мар 26, 2013 18:26
Avada
Flasher
Раскрываться должна. Но и сохранение изменённой записи с переменной крайне желательно. Иначе никакой портабельности не получается. Запускаю TC с флэшки, а он обращается к базе не внутри текущего каталога TC (допустим, K:\Totalcmd\Base\1), а к другой, согласно указанному в параметрах кнопки местоположению на жёстком диске (C:\Totalcmd\Base\1). Опять же на разных машинах у флэшки буквы меняются...
Что касаемо последнего скрипта, то одна кнопка вместо двух, конечно, экономит место (хотя и в применении двух кнопок есть свои преимущества.) Но мне совершенно не нужны ни периодически вылезающий запрос на удаление кэша в результате изменения размера эскизов, ни само это удаление. И здесь, как и в нынешнем варианте Rodny, не решена проблема использования пути с переменной и сохранения затем пути ровно в том же (а не в раскрытом и не в испорченном!) виде.

Lev
Можно ли увидеть полный вариант скрипта, включающий предложенные строчки? А заодно и свой вариант кнопки на базе такого скрипта.

Добавлено: Вт мар 26, 2013 18:46
Flasher
Lev
1. Переменные объявлены только те, что фигурируют в скрипте, WshShell там не было.
2. Я много раз сталкивался. На Win7 проверялось?
Option Explicit не использую нигде. Это для отладки.
3. Там есть какие-то завязки, когда объектов в скрипте несколько, и вызываются их методы. Отдельно WSH, может, и работает.

Avada писал(а):одна кнопка вместо двух, конечно, экономит место
Так было изначально запрошено.
Avada писал(а):Но мне совершенно не нужны ни периодически вылезающий запрос на удаление кэша в результате изменения размера эскизов, ни само это удаление.
Не должно быть. Главное, что в ключе должно быть указано правильное название папки:
ThumbsLocation=%COMMANDER_PATH%\Thumbs\2
В папке "2" - эскизы 120х120, в папке "1" - 80х80. В 4 строчке скрипта значение должно соответствовать значение размера эскизов из папки "1", т.е. 80.
Avada писал(а):И здесь, как и в нынешнем варианте Rodny, не решена проблема использования пути с переменной и сохранения затем пути ровно в том же (а не в раскрытом и не в испорченном!) виде.
Тут этой переменной вообще нет, она не нужна.

Добавлено: Вт мар 26, 2013 19:38
Avada
Flasher писал(а):Так было изначально запрошено.
Изначально я запрашивал две кнопки.
Flasher писал(а):Не должно быть. Главное, что в ключе должно быть указано правильное название папки
Это уже не папка, а путь к ней. И правильным путём будет тот, который я таковым считаю и хочу указать, не правда ли? На данный момент, к примеру, у меня на домашнем компе это C:\Totalcmd\Profile\Base\2. Без Thumbs. И с помощью скрипта (и, соответственно, кнопки или их пары) я хочу, чтобы этот путь после смены базы записался в INI-файл в нужном мне виде, как %Commander_path%Profile\Base\2. И альтернативный путь (к папке 1) точно так же. Если это реально, конечно. А что на самом деле главное, см. далее.
Flasher писал(а):В папке "2" - эскизы 120х120, в папке "1" - 80х80. В 4 строчке скрипта значение должно соответствовать значение размера эскизов из папки "1", т.е. 80.
У меня другие размеры: 128x128 и а 96x96. В этом-то и было дело. Исправил в скрипте на свои — вылезание предупреждения прекратилось.
Flasher писал(а):Тут этой переменной вообще нет, она не нужна.
Вообще не нужна или тут не нужна? Потому что мне (см. всё предыдущее) она вот именно что нужна.

Добавлено: Вт мар 26, 2013 19:45
Flasher
Avada писал(а):Изначально я запрашивал две кнопки.
Я про автора первичного запроса.
Avada писал(а):И правильным путём будет тот, который я таковым считаю и хочу указать, не правда ли? На данный момент, к примеру, у меня на домашнем компе это C:\Totalcmd\Profile\Base\2. Без Thumbs.
Если Thumbs указан зелёным цветом, то нужно понимать, что это изменяемая по усмотрению часть пути. В твоём случае это Profile\Base.
Avada писал(а):И с помощью скрипта (и, соответственно, кнопки или их пары) я хочу, чтобы этот путь после смены базы записался в INI-файл в нужном мне виде
Оно так и происходит, через диалог.
Avada писал(а):Вообще не нужна или тут не нужна?
Переменная в скрипте не нужна. Или у тебя меняется Profile\Base?

Добавлено: Вт мар 26, 2013 20:03
Avada
Flasher писал(а):Я про автора первичного запроса.
Так в этой теме я и есть такой автор. У Кабал одно сообщение, и оно идёт после моего. Всё предыдущее обсуждалось до создания темы в личке. Впрочем, это неважно.
Flasher писал(а):Если Thumbs указан зелёным цветом, то нужно понимать, что это изменяемая по усмотрению часть пути. В твоём случае это Profile\Base.
Понял.
Flasher писал(а):Оно так и происходит, через диалог.
Нет. Запись идёт в явном виде. (С сообщением, как сказано выше, уже разобрался).
Flasher писал(а):Или у тебя меняется Profile\Base?
У меня — нет. Только цифровое имя подкаталога для конкретной базы.
Если вставить в диалоге в поле "Расположение базы данных" путь к нужной папке, содержащий переменную, он записывается в INI-файл с этой переменной. Тотал её видит и обрабатывает правильно. Что и требуется. То есть задача в принципе решаема. Осталось понять, каким образом её корректно вставить на уровне скрипта, чтобы в кнопке не указывать.