Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Переключение между разными базами эскизов
Goto page 1, 2, 3  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Avada



Joined: 01 Aug 2008
Posts: 10263
Location: Россия, Саратов

Post (Separately) Posted: Wed Nov 23, 2011 19:15    Post subject: Переключение между разными базами эскизов Reply with quote

По ходу приватного обсуждения в ЛС с участником форума Кабал, запросившим возможность переключения между разным размером эскизов, выяснилось, что задачу можно решить, если одноимённые файлы баз для эскизов с разным размером будут лежать независимо друг от друга в двух разных папках. Например, 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-команды.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Wed Nov 23, 2011 20:31    Post subject: Reply with quote

Code:
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 (входят в стандартную поставку).
Кнопка:
Code:
TOTALCMD#BAR#DATA
e:\Utils\PowerPro\powerpro.exe
runfile.имя_скрипта("e:\новый\путь\к\базе", 128, 128)
E:\путь\к\икноке\иконка.ICO
test", "


-1

_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10263
Location: Россия, Саратов

Post (Separately) Posted: Wed Nov 23, 2011 22:44    Post subject: Reply with quote

Вахмурка
За вариант с PowerPro спасибо, но хотелось бы также иметь альтернативу без.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Кабал



Joined: 22 Nov 2011
Posts: 1

Post (Separately) Posted: Fri Nov 25, 2011 20:45    Post subject: Reply with quote

Avada. Согласен. Хочется скрипт, который я мог бы применить без дополнительных средств.
Back to top
View user's profile Send private message
Rodny



Joined: 24 Jan 2007
Posts: 949
Location: Могилёв, Беларусь

Post (Separately) Posted: Sun Nov 27, 2011 01:34    Post subject: Reply with quote

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

Script Helper считается за доп. средство?
ChangeCacheBase.vbs
Code:
'==============================================================================
' Переключение между разными базами эскизов
' 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()

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


-1
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10263
Location: Россия, Саратов

Post (Separately) Posted: Sun Nov 27, 2011 09:29    Post subject: Reply with quote

Rodny
Спасибо, работает. А Script Helper лично я согласен за доп. средство не считать, так что результат вполне устраивает.
Только (пояснение для новичков) кнопок там, разумеется должно быть две (вторая создаётся на основе первой с изменением пути к базе и размеров).
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10263
Location: Россия, Саратов

Post (Separately) Posted: Tue Mar 26, 2013 15:52    Post subject: Reply with quote

Прошу подсказать, как при использовании имеющегося скрипта от Rodny обеспечить возможность корректно вставлять путь к базе, содержащий переменную %Commander_path% — без искажений и обязательно с сохранением этой переменной. При указании переменной в кнопке в поле "Параметры" номер не проходит ни с одиночными символами процента, ни с удвоенными: вставляется усечённый путь. Если же указывать путь в поле "Команда", переменная раскрывается правильно, но вставленный путь сохраняется в явном виде.
На уже имеющиеся темы с обсуждением сходного вопроса прошу не ссылаться: мне нужно решение именно в данной конкретной ситуации.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Tue Mar 26, 2013 16:33    Post subject: Reply with quote

Так?
Code:
Set WshShell = WScript.CreateObject("WScript.Shell")
Path = Replace (WScript.Arguments(0), "%Commander_path%", WshShell.ExpandEnvironmentStrings("%Commander_path%"))
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Mar 26, 2013 17:44    Post subject: Reply with quote

Avada wrote:
с сохранением этой переменной
Зачем? Она же раскрываться должна.

Lev, WSH без объявления переменной через DIM не работает, поэтому лучше сразу вызывать:
Code:
Path = CreateObject("WScript.Shell").Environment("Process")("COMMANDER_PATH")


Это я скидывал клиенту ещё до Rodny:
Code:
' Переключаться между 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

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Tue Mar 26, 2013 18:05    Post subject: Reply with quote

Flasher wrote:
Lev, WSH без объявления переменной через DIM не работает, поэтому лучше сразу вызывать
Во первых предлагалась правка к скрипту, где все переменные объявлены
Во вторых - впервые слышу, что "WSH без объявления переменной через DIM не работает". У меня уже десяток лет без объявлений wsh трудится. Может у Вас Option Explicit в каждом скрипте воткнут?
В третьих - перед постом протестировал свою пару строчек
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10263
Location: Россия, Саратов

Post (Separately) Posted: Tue Mar 26, 2013 18:26    Post subject: Reply with quote

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

Lev
Можно ли увидеть полный вариант скрипта, включающий предложенные строчки? А заодно и свой вариант кнопки на базе такого скрипта.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Mar 26, 2013 18:32    Post subject: Reply with quote

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


Avada wrote:
одна кнопка вместо двух, конечно, экономит место
Так было изначально запрошено.
Avada wrote:
Но мне совершенно не нужны ни периодически вылезающий запрос на удаление кэша в результате изменения размера эскизов, ни само это удаление.
Не должно быть. Главное, что в ключе должно быть указано правильное название папки:
Quote:
ThumbsLocation=%COMMANDER_PATH%\Thumbs\2
В папке "2" - эскизы 120х120, в папке "1" - 80х80. В 4 строчке скрипта значение должно соответствовать значение размера эскизов из папки "1", т.е. 80.
Avada wrote:
И здесь, как и в нынешнем варианте Rodny, не решена проблема использования пути с переменной и сохранения затем пути ровно в том же (а не в раскрытом и не в испорченном!) виде.
Тут этой переменной вообще нет, она не нужна.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10263
Location: Россия, Саратов

Post (Separately) Posted: Tue Mar 26, 2013 19:38    Post subject: Reply with quote

Flasher wrote:
Так было изначально запрошено.

Изначально я запрашивал две кнопки.

Flasher wrote:
Не должно быть. Главное, что в ключе должно быть указано правильное название папки

Это уже не папка, а путь к ней. И правильным путём будет тот, который я таковым считаю и хочу указать, не правда ли? На данный момент, к примеру, у меня на домашнем компе это C:\Totalcmd\Profile\Base\2. Без Thumbs. И с помощью скрипта (и, соответственно, кнопки или их пары) я хочу, чтобы этот путь после смены базы записался в INI-файл в нужном мне виде, как %Commander_path%Profile\Base\2. И альтернативный путь (к папке 1) точно так же. Если это реально, конечно. А что на самом деле главное, см. далее.

Flasher wrote:
В папке "2" - эскизы 120х120, в папке "1" - 80х80. В 4 строчке скрипта значение должно соответствовать значение размера эскизов из папки "1", т.е. 80.

У меня другие размеры: 128x128 и а 96x96. В этом-то и было дело. Исправил в скрипте на свои — вылезание предупреждения прекратилось.

Flasher wrote:
Тут этой переменной вообще нет, она не нужна.

Вообще не нужна или тут не нужна? Потому что мне (см. всё предыдущее) она вот именно что нужна.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.


Last edited by Avada on Tue Mar 26, 2013 19:47; edited 1 time in total
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Mar 26, 2013 19:45    Post subject: Reply with quote

Avada wrote:
Изначально я запрашивал две кнопки.
Я про автора первичного запроса.
Avada wrote:
И правильным путём будет тот, который я таковым считаю и хочу указать, не правда ли? На данный момент, к примеру, у меня на домашнем компе это C:\Totalcmd\Profile\Base\2. Без Thumbs.
Если Thumbs указан зелёным цветом, то нужно понимать, что это изменяемая по усмотрению часть пути. В твоём случае это Profile\Base.
Avada wrote:
И с помощью скрипта (и, соответственно, кнопки или их пары) я хочу, чтобы этот путь после смены базы записался в INI-файл в нужном мне виде
Оно так и происходит, через диалог.
Avada wrote:
Вообще не нужна или тут не нужна?
Переменная в скрипте не нужна. Или у тебя меняется Profile\Base?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10263
Location: Россия, Саратов

Post (Separately) Posted: Tue Mar 26, 2013 20:03    Post subject: Reply with quote

Flasher wrote:
Я про автора первичного запроса.

Так в этой теме я и есть такой автор. У Кабал одно сообщение, и оно идёт после моего. Всё предыдущее обсуждалось до создания темы в личке. Впрочем, это неважно.

Flasher wrote:
Если Thumbs указан зелёным цветом, то нужно понимать, что это изменяемая по усмотрению часть пути. В твоём случае это Profile\Base.

Понял.

Flasher wrote:
Оно так и происходит, через диалог.

Нет. Запись идёт в явном виде. (С сообщением, как сказано выше, уже разобрался).

Flasher wrote:
Или у тебя меняется Profile\Base?

У меня — нет. Только цифровое имя подкаталога для конкретной базы.
Если вставить в диалоге в поле "Расположение базы данных" путь к нужной папке, содержащий переменную, он записывается в INI-файл с этой переменной. Тотал её видит и обрабатывает правильно. Что и требуется. То есть задача в принципе решаема. Осталось понять, каким образом её корректно вставить на уровне скрипта, чтобы в кнопке не указывать.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2, 3  Next
Page 1 of 3

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group