Страница 2 из 3
Добавлено: Вт мар 26, 2013 20:38
Flasher
Avada писал(а):Всё предыдущее обсуждалось до создания темы в личке.
Запрос-то изначально не в личке был.
Avada писал(а):Нет. Запись идёт в явном виде.
В смысле? Открывается диалог, правится путь и подтверждается, тем самым запись в ini меняется.
Avada писал(а):Что и требуется. То есть задача в принципе решаема.
Да, и именно так она решена в моём скрипте.
Avada писал(а):Осталось понять, каким образом её корректно вставить на уровне скрипта, чтобы в кнопке не указывать.
В моём скрипте разве для кнопки что-то нужно указывать?
Добавлено: Вт мар 26, 2013 21:18
Avada
Flasher
Кажется, всё заработало так, как следует. Спасибо, буду ещё смотреть. При наличии проблем сообщу.
Добавлено: Вт сен 23, 2014 01:53
SilverVox
Я недавно решал аналогичную проблему для себя, ну вот поделюсь и своим решением.
Правда я по специальности художник, и в программировании дилетант полный, раньше писал только батники и то по мере крайней надобности. На VBS, это практически мой первый скрипт, не учитывая разных там "Привет Мир", поэтому попрошу знающих людей жестоко не критиковать мою работу, а по возможности соизволить помочь исправить разные там неприятные глазу проблемы компоновки и оптимизации кода. Потому-что я практически не знаю синтаксиса и все это я сваял исключительно подсматривая в примеры других скриптов. Но несмотря на мою недалекость, у меня все работает более года, вот недавно только (после обнаружения данной темы) внес кое-какие актуальные исправления, прежде чем выложить.
Код: Выделить всё
'==========================================================
'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"), что снижает вероятность конфликтных ситуаций несоответствия указываемых в настройках размеров с размерами уже существующей базы эскизов. Ну и вроде все в общем.
Пример кнопки:
Код: Выделить всё
TOTALCMD#BAR#DATA
ChangeSizeThumbnails.vbs
128 128
WCMICONS.dll,26
128x128
%commander_path%\System\
0
-1
Добавлено: Вт сен 23, 2014 16:34
Flasher
SilverVox
Художник что рисует - дождь?

Нехилый такой художник, если первый "блин" в таком ракурсе рождается - с использованием функций и т. п.
Тут особо критиковать нет смысла. Просто если человек предпочитает быструю работу, то он не будет запариваться по куче отладочных проверок, ему достаточно соблюдать правила введения данных. Иные могут делать по своему и навешивать на скрипт сколько угодно условий. Я лично в таких простых и требующих резкости задачах стараюсь этого избегать. Да и реверсное переключение, предложенное мной, куда приятнее в плане оптимальности.
Добавлено: Ср сен 24, 2014 02:09
SilverVox
Рисую иллюстрации для детских книг, ну и официальная моя профессия, специалист ДПИ в области художественных изделий из дерева метала и керамики.
Ну а насчет первого блина, то это относительно VBS, я работал когда-то с MSDOS и научился писать батники аналогичной сложности. Но командная строка далеко не все умеет, и со временем для решения некоторых задач захотелось чего-то посерьезней. Вот попробовал разобратся в VBS, так как на моем компе было несколько примеров скриптов, и на тот момент не было доступа в нет, то все познания получил из них. Теперь буду искать какую то литературу по синтаксису, может что-то из этого получится.
На самом деле я простой пользователь, который постоянно недоволен теми или иными недостатками и неудобствами, просто хочется сделать свою рабочую среду удобной и стабильной, так как я рисую в основном на компе.
Ну а проверки я "навесил" только, как мне показалось, самые необходимые, я люблю хоть минимум, но надежности.
В ходе экспериментов выяснилось, что в размерах эскизов могут быть только значения из ряда полученного в результате умножения 8 на ряд простых чисел, а если задать несоответствующий размер то командер его скорректирует до ближайшего значения. А так как идея моего подхода заключалась в возможности передать любой размер, и создавать для каждого значения свой каталог для кэша с именем соответствующим размеру, то просто пришлось проверять входящие значения и корректировать их в соответствии. Ну и посчитал нужным продумать возможность корректной работы в условиях без кэширования. Остальное возможно было и лишним, в умелых руках все и так работает как надо, а скорость работы, экономия оперативной памяти (и своего времени), часто бывают очень важным фактором. Но как по мне, когда делаешь для себя, то хочется один раз сделать так, чтобы использование было менее обусловленным, тем более если хочется поделится своим творением с друзьями.
Насчет реверсного переключения согласен, это действительно очень удобно, я на момент решения проблемы почему-то и не подумал о такой возможности.
Спасибо за поддержку добрым словом.
Добавлено: Ср сен 24, 2014 15:40
Flasher
SilverVox писал(а):Но как по мне, когда делаешь для себя, то хочется один раз сделать так, чтобы использование было менее обусловленным, тем более если хочется поделится своим творением с друзьями.
ИМХО, если человек заморочился по данной теме, то вводить заведомо правильные величины для него труда не составит.
SilverVox писал(а):Насчет реверсного переключения согласен, это действительно очень удобно
Конечно. Как правило двух режимов более чем достаточно. Кстати, можно в таком ключе ещё обычную кнопку с TCFS2 сварганить. Могу позже сделать.
[cut]
SilverVox писал(а):Теперь буду искать какую то литературу по синтаксису, может что-то из этого получится.
Могу подкинуть в ЛС, у меня этого добра навалом. )[/cut]
Добавлено: Чт сен 25, 2014 00:57
SilverVox
ИМХО, если человек заморочился по данной теме, то вводить заведомо правильные величины для него труда не составит.
Возможно вы правы, я не имею достаточного опыта в данной области, многое еще не понимаю.
А с TCFS2 я еще пока не сталкивался, было бы интересно.
Буду безмерно благодарен, если поможете с инфой.
Добавлено: Пн дек 22, 2014 16:41
Flasher
SilverVox писал(а):А с TCFS2 я еще пока не сталкивался, было бы интересно.
Забыл выложить в своё время аналог
данного решения:
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, можешь проверить.
Добавлено: Пн дек 22, 2014 20:16
Avada
Flasher
Да, работает (числа изменил на свои, кнопку создал не напрямую, а для юзер-команды). По сравнению с предыдущим решением почти совсем не вылезает диалог настроек. Спасибо, беру.
Добавлено: Пн дек 22, 2014 20:31
Flasher
Avada
Ну, да. И никакого Хелпера.

Добавлено: Вт дек 23, 2014 10:28
sa
Avada писал(а):По сравнению с предыдущим решением почти совсем не вылезает диалог настроек.
Предыдущее решение можно ускорить, если перед
If задать стандартную задержку для операций не 70 миллисекунд (по умолчанию), а ноль
А чтобы не передёргивался экран можно добавить в начале записи (после строки With)
а в конце (перед строкой End With)
Добавлено: Вт дек 23, 2014 12:16
Flasher
sa писал(а):А чтобы не передёргивался экран
Эта блокировка не влияет на появление окон, экран не передёргивается, тут иной эффект, поэтому смысла ставить её нет никакого.
Добавлено: Вт дек 23, 2014 12:49
sa
Flasher писал(а):смысла ставить её нет никакого
Каждый может попробовать вариант с блокировкой и без неё и решить, есть ли в ней смысл или нет.
Добавлено: Вт дек 23, 2014 12:53
Flasher
Я бы сформулировал иначе.
Каждый может попробовать в данном скрипте добавить блокировку и убедиться, что смысл в её применении отсутствует.
Добавлено: Вт дек 23, 2014 16:16
sa
Разницу в поведении можно увидеть (или не увидеть) на примере скрипта, который просто вызывает диалог настройки и тут же закрывает его, ничего не изменяя при этом.
Без блокировки:
Код: Выделить всё
With CreateObject("TCScript.Helper")
.SendCommand 490
.SendKeystroke "{ENTER}"
End With
С блокировкой:
Код: Выделить всё
With CreateObject("TCScript.Helper")
.LockTC True
.SendCommand 490
.SendKeystroke "{ENTER}"
.LockTC False
End With