View previous topic :: View next topic |
Author |
Message |
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Mar 26, 2013 20:38 Post subject: |
|
|
Avada wrote: | Всё предыдущее обсуждалось до создания темы в личке. | Запрос-то изначально не в личке был.
Avada wrote: | Нет. Запись идёт в явном виде. | В смысле? Открывается диалог, правится путь и подтверждается, тем самым запись в ini меняется.
Avada wrote: | Что и требуется. То есть задача в принципе решаема. | Да, и именно так она решена в моём скрипте.
Avada wrote: | Осталось понять, каким образом её корректно вставить на уровне скрипта, чтобы в кнопке не указывать. | В моём скрипте разве для кнопки что-то нужно указывать? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10257 Location: Россия, Саратов
|
(Separately) Posted: Tue Mar 26, 2013 21:18 Post subject: |
|
|
Flasher
Кажется, всё заработало так, как следует. Спасибо, буду ещё смотреть. При наличии проблем сообщу. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
SilverVox
Joined: 13 Jun 2009 Posts: 25 Location: Русь
|
(Separately) Posted: Tue Sep 23, 2014 01:53 Post subject: |
|
|
Я недавно решал аналогичную проблему для себя, ну вот поделюсь и своим решением.
Правда я по специальности художник, и в программировании дилетант полный, раньше писал только батники и то по мере крайней надобности. На VBS, это практически мой первый скрипт, не учитывая разных там "Привет Мир", поэтому попрошу знающих людей жестоко не критиковать мою работу, а по возможности соизволить помочь исправить разные там неприятные глазу проблемы компоновки и оптимизации кода. Потому-что я практически не знаю синтаксиса и все это я сваял исключительно подсматривая в примеры других скриптов. Но несмотря на мою недалекость, у меня все работает более года, вот недавно только (после обнаружения данной темы) внес кое-какие актуальные исправления, прежде чем выложить.
Code: |
'==========================================================
'VBS
'Имя Файла: ChangeSizeThumbnails.vbs
'Автор: SilverVox
'Версия: 1.1
'Дата: 17.09.2014
'
'Производит изменение размеров эскизов для TotalCommander.
'Размер передается в параметрах командной строки.
'Для работы нужен WSH Helper for TC by Volniy
'
'Параметры вызова:
' {Ширина} {Высота}
'==========================================================
Option Explicit
Dim TCS, Width, Height, MaxValue, ThumbsLocation
Set TCS = CreateObject("TCSCRIPT.Helper")
TCS.Pause = 100
TCS.Wait = True
TCS.LockTC True
MaxValue = 560 'Максимально допустимое значение размеров (Можно изменять на свое усмотрение)
If not TCS.IsRunningTC Then
MsgBox "Процесс TotalCmd.exe не найден.", vbCritical + vbOKOnly, "Ошибка!"
Quit(1)
End If
If WScript.Arguments.Count < 2 Then
MsgBox "Неверное количество параметров.", vbCritical + vbOKOnly, "Ошибка параметров командной строки!"
Quit(2)
End If
Width = CorrectedValue(WScript.Arguments(0))
Height = CorrectedValue(WScript.Arguments(1))
TCS.GetINIFiles
ThumbsLocation = TCS.INIRead(TCS.MainINI, "Configuration", "ThumbsLocation")
If ThumbsLocation = "" Then
TCS.SendCommand 482
TCS.SendKeystroke "{TAB 8}" & Width & "{TAB}" & Height & "{ENTER}"
Else
If Right(ThumbsLocation, 1) = "\" Then ThumbsLocation = Mid(ThumbsLocation, 1, Eval(Len(ThumbsLocation)-1))
With CreateObject("Scripting.FileSystemObject")
If SplitChkValue(.GetFileName(ThumbsLocation)) Then
ThumbsLocation = .GetParentFolderName(ThumbsLocation)
End if
End With
If Right(ThumbsLocation, 1) <> "\" Then ThumbsLocation = ThumbsLocation & "\"
ThumbsLocation = ThumbsLocation & Width & "X" & Height
ThumbsLocation = Replace(ThumbsLocation, "%", "{%}")
TCS.SendCommand 482
TCS.SendKeystroke "{TAB}{BS}" & ThumbsLocation & "{TAB 7}" & Width & "{TAB}" & Height & "{ENTER}"
End If
Quit(0)
'===== СубПроцедуры =============================================================
Function SplitChkValue(Value)
Dim SbStr, Num
SplitChkValue = True
Num = 0
For Each SbStr In Split(Value, "X")
Num = Eval(Num+1)
If Not ChkValue(SbStr) Then SplitChkValue = False
Next
If Num <> 2 Then SplitChkValue = False
End Function
Function ChkValue(Value)
Dim N
ChkValue = False
If IsNumeric(Value) Then
If Trim(Value) = Value Then
Value = CCur(Value)
For N = 1 To Eval(MaxValue/8)
If Value = Eval(N*8) Then
ChkValue = True
End If
Next
End If
End If
End Function
Function CorrectedValue(Value)
Dim N, PrvN
If IsNumeric(Value) Then
Value = Int(Value)
If Value < 8 Then
MsgBox "Значения параметров выходят за границы допустимой области.", vbCritical + vbOKOnly, "Ошибка параметров командной строки!"
Quit(3)
End If
If Value > MaxValue Then
MsgBox "Значения параметров выходят за границы допустимой области.", vbCritical + vbOKOnly, "Ошибка параметров командной строки!"
Quit(4)
End If
PrvN = 0
For N = 1 To Eval(MaxValue/8)
If Value < Eval(N*8) Then
If Value > Eval(PrvN*8) Then
If Eval(N - PrvN) < 4 Then Value = Eval(PrvN*8)
If Eval(N - PrvN) > 4 Then Value = Eval(N*8)
End If
End If
PrvN = N
Next
Else
MsgBox "Нечисловые значения в параметрах.", vbCritical + vbOKOnly, "Ошибка параметров командной строки!"
Quit(5)
End If
CorrectedValue = Value
End Function
Sub Quit(Errorlevel)
Set TCS = Nothing
WScript.Quit Errorlevel
End Sub |
Использование:
ChangeSizeThumbnails.vbs {Ширина} {Высота}
Описание:
Посредством командной строки можно указывать любые размеры (в разумных пределах). Если используется кэширование, то в каталоге по заданному пути создаются папки с именами используемых размеров (по типу: "128x128"), что снижает вероятность конфликтных ситуаций несоответствия указываемых в настройках размеров с размерами уже существующей базы эскизов. Ну и вроде все в общем.
Пример кнопки:
Code: |
TOTALCMD#BAR#DATA
ChangeSizeThumbnails.vbs
128 128
WCMICONS.dll,26
128x128
%commander_path%\System\
0
-1
|
_________________ Если струну не дотянуть – она не будет звучать.
Если перетянуть – она лопнет. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Sep 23, 2014 16:34 Post subject: |
|
|
SilverVox
Художник что рисует - дождь?
Нехилый такой художник, если первый "блин" в таком ракурсе рождается - с использованием функций и т. п.
Тут особо критиковать нет смысла. Просто если человек предпочитает быструю работу, то он не будет запариваться по куче отладочных проверок, ему достаточно соблюдать правила введения данных. Иные могут делать по своему и навешивать на скрипт сколько угодно условий. Я лично в таких простых и требующих резкости задачах стараюсь этого избегать. Да и реверсное переключение, предложенное мной, куда приятнее в плане оптимальности. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
SilverVox
Joined: 13 Jun 2009 Posts: 25 Location: Русь
|
(Separately) Posted: Wed Sep 24, 2014 02:09 Post subject: |
|
|
Рисую иллюстрации для детских книг, ну и официальная моя профессия, специалист ДПИ в области художественных изделий из дерева метала и керамики.
Ну а насчет первого блина, то это относительно VBS, я работал когда-то с MSDOS и научился писать батники аналогичной сложности. Но командная строка далеко не все умеет, и со временем для решения некоторых задач захотелось чего-то посерьезней. Вот попробовал разобратся в VBS, так как на моем компе было несколько примеров скриптов, и на тот момент не было доступа в нет, то все познания получил из них. Теперь буду искать какую то литературу по синтаксису, может что-то из этого получится.
На самом деле я простой пользователь, который постоянно недоволен теми или иными недостатками и неудобствами, просто хочется сделать свою рабочую среду удобной и стабильной, так как я рисую в основном на компе.
Ну а проверки я "навесил" только, как мне показалось, самые необходимые, я люблю хоть минимум, но надежности.
В ходе экспериментов выяснилось, что в размерах эскизов могут быть только значения из ряда полученного в результате умножения 8 на ряд простых чисел, а если задать несоответствующий размер то командер его скорректирует до ближайшего значения. А так как идея моего подхода заключалась в возможности передать любой размер, и создавать для каждого значения свой каталог для кэша с именем соответствующим размеру, то просто пришлось проверять входящие значения и корректировать их в соответствии. Ну и посчитал нужным продумать возможность корректной работы в условиях без кэширования. Остальное возможно было и лишним, в умелых руках все и так работает как надо, а скорость работы, экономия оперативной памяти (и своего времени), часто бывают очень важным фактором. Но как по мне, когда делаешь для себя, то хочется один раз сделать так, чтобы использование было менее обусловленным, тем более если хочется поделится своим творением с друзьями.
Насчет реверсного переключения согласен, это действительно очень удобно, я на момент решения проблемы почему-то и не подумал о такой возможности.
Спасибо за поддержку добрым словом. _________________ Если струну не дотянуть – она не будет звучать.
Если перетянуть – она лопнет. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Sep 24, 2014 15:40 Post subject: |
|
|
SilverVox wrote: | Но как по мне, когда делаешь для себя, то хочется один раз сделать так, чтобы использование было менее обусловленным, тем более если хочется поделится своим творением с друзьями. | ИМХО, если человек заморочился по данной теме, то вводить заведомо правильные величины для него труда не составит.
SilverVox wrote: | Насчет реверсного переключения согласен, это действительно очень удобно | Конечно. Как правило двух режимов более чем достаточно. Кстати, можно в таком ключе ещё обычную кнопку с TCFS2 сварганить. Могу позже сделать.
Hidden text SilverVox wrote: | Теперь буду искать какую то литературу по синтаксису, может что-то из этого получится. | Могу подкинуть в ЛС, у меня этого добра навалом. ) _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
SilverVox
Joined: 13 Jun 2009 Posts: 25 Location: Русь
|
(Separately) Posted: Thu Sep 25, 2014 00:57 Post subject: |
|
|
Quote: | ИМХО, если человек заморочился по данной теме, то вводить заведомо правильные величины для него труда не составит. |
Возможно вы правы, я не имею достаточного опыта в данной области, многое еще не понимаю.
А с TCFS2 я еще пока не сталкивался, было бы интересно.
Буду безмерно благодарен, если поможете с инфой. _________________ Если струну не дотянуть – она не будет звучать.
Если перетянуть – она лопнет. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Dec 22, 2014 17:41 Post subject: |
|
|
SilverVox wrote: | А с TCFS2 я еще пока не сталкивался, было бы интересно. | Забыл выложить в своё время аналог данного решения:
Quote: | TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef "msg($0B, 0) tcm(482,1) if(tcini(Configuration, ThumbHeightNoCache, 80), eval(send_wait(`{TAB}{END}{BS}2{TAB 7}120{TAB}120{ENTER}`, findwnd(`TDLGCONFIGALL`)))+set_tcini(Configuration, ThumbHeightNoCache, 120), eval(send_wait(`{TAB}{END}{BS}1{TAB 7}80{TAB}80{ENTER}`, findwnd(`TDLGCONFIGALL`)))+set_tcini(Configuration, ThumbHeightNoCache, 80)) delay(20) tcm(330) msg($0B, 1) tcm(330)"
wcmicons.dll,26
Эскизы: 80/120 пикселей |
Avada, можешь проверить. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Last edited by Flasher on Sat Jan 03, 2015 06:33; edited 2 times in total |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10257 Location: Россия, Саратов
|
(Separately) Posted: Mon Dec 22, 2014 21:16 Post subject: |
|
|
Flasher
Да, работает (числа изменил на свои, кнопку создал не напрямую, а для юзер-команды). По сравнению с предыдущим решением почти совсем не вылезает диалог настроек. Спасибо, беру. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Dec 22, 2014 21:31 Post subject: |
|
|
Avada
Ну, да. И никакого Хелпера. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2567
|
(Separately) Posted: Tue Dec 23, 2014 11:28 Post subject: |
|
|
Avada wrote: | По сравнению с предыдущим решением почти совсем не вылезает диалог настроек. | Предыдущее решение можно ускорить, если перед If задать стандартную задержку для операций не 70 миллисекунд (по умолчанию), а ноль
А чтобы не передёргивался экран можно добавить в начале записи (после строки With)
а в конце (перед строкой End With)
|
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Dec 23, 2014 13:16 Post subject: |
|
|
sa wrote: | А чтобы не передёргивался экран | Эта блокировка не влияет на появление окон, экран не передёргивается, тут иной эффект, поэтому смысла ставить её нет никакого. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2567
|
(Separately) Posted: Tue Dec 23, 2014 13:49 Post subject: |
|
|
Flasher wrote: | смысла ставить её нет никакого |
Каждый может попробовать вариант с блокировкой и без неё и решить, есть ли в ней смысл или нет. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Dec 23, 2014 13:53 Post subject: |
|
|
Я бы сформулировал иначе.
Каждый может попробовать в данном скрипте добавить блокировку и убедиться, что смысл в её применении отсутствует. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2567
|
(Separately) Posted: Tue Dec 23, 2014 17:16 Post subject: |
|
|
Разницу в поведении можно увидеть (или не увидеть) на примере скрипта, который просто вызывает диалог настройки и тут же закрывает его, ничего не изменяя при этом.
Без блокировки:
Code: | With CreateObject("TCScript.Helper")
.SendCommand 490
.SendKeystroke "{ENTER}"
End With | С блокировкой:
Code: | With CreateObject("TCScript.Helper")
.LockTC True
.SendCommand 490
.SendKeystroke "{ENTER}"
.LockTC False
End With |
|
|
Back to top |
|
|
|
|
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
|