Страница 11 из 27
Добавлено: Чт мар 25, 2010 12:17
AgereS
Возможно я сейчас скажу глупость
я у себя не нашёл TCWSHelp.exe
он ставиться отдельно или должен идти вместе с Total Commander
Добавлено: Чт мар 25, 2010 12:29
Avada
AgereS
Разумеется,
отдельно! Между прочим, это было всего несколькими постами раньше в этой же теме.
И сколько можно напоминать про поиск по форуму?
Лимит глупых вопросов исчерпан, далее будут санкции от модератора. Правила форума — в шапке любого подфорума. Например,
здесь.
Добавлено: Пт мар 26, 2010 13:24
AgereS
Вроде частично разобрался спасибо
Вот только почему (маркировка файлов через один)
срабатывает не всегда так и не могу понять
P|S Avada - Что касается поиска, то если бы я знал как сформулировать вкраци то что ищу, то явно воспользовался им
Добавлено: Пт мар 26, 2010 13:46
Tol!k
Да, забавно работает (
ZebraMark-2.vbs):
Сначала выделил 60 файлов (правильно, в папке 121 файл)
Затем опять 60 файлов
Затем 30 файлов (я не поверил глазам и не снял скриншот)
Затем 15 файлов

Затем всегда "0" файлов, после перезапуска TC нормальная работа скрипта не восстанавливается

TC 7.50a, Script Helper beta11, beta10+
В папках с малым кол-вом файлов (<20) работает правильно
Добавлено: Пт мар 26, 2010 15:15
Flasher
Tol!k
Сам этот скрипт иногда использовал в разных по объёму папках, ничего подобного не замечалось.
Добавлено: А вот в режиме BranchView срабатывает криво. Ну тут причина ясна: относительные пути.
Добавлено: Пт мар 26, 2010 15:57
sa
AgereS писал(а):Вот только почему (маркировка файлов через один) срабатывает не всегда так и не могу понять
Не показалось, что не выделяются файлы, в которых имеются символы на русском? По-моему, имеется проблема с копированием имён этих файлов в буфер.
Добавлено: Сб мар 27, 2010 01:43
Volniy
Причина выделения нестабильного количества файлов очевидна. В начале скрипта есть команда выделения
всех файлов и она не всегда успевает выполнится до начала исполнения следующей команды. А значит скрипт работает с меньшим кол-вом файлов. Решается просто:
Что касается "невыделения" файлов с русскими именами, то это косяк с русским юникодом. Пока не знаю, что с этим делать. Возможно, поможет классика - редактирование реестра, вроде вот оно:
Код: Выделить всё
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1250"="c_1251.nls"
"1252"="c_1251.nls"
только я сам пробовать не стал, меня этот патч не устраивает по многим причинам.
Что касается BranchView, так там действительно дело в относительных путях. Решаемо:
Код: Выделить всё
' File: ZebraMark-3.vbs
' Description: Помечает все файлы и каталоги через один
' What's new: Работает в BranchView
' Requirements: WSH Helper for TC by Volniy
' Copyright: (c) 2010, Volniy
Option Explicit
Dim List, TCS, Cnt, Buf, CurDir
Set TCS = CreateObject("TCScript.Helper")
TCS.SendCommand "cm_SelectAll", True 'Выбрать всё
CurDir = TCS.GetSrcPath
TCS.SendCommand "cm_CopyFullNamesToClip", True
List = Split(TCS.GetTextFromClip,vbNewLine)
For Cnt=LBound(List) To UBound(List)
If Cnt Mod 2 = 1 Then
Buf = Buf & Mid(List(Cnt), Len(CurDir) +2) & vbNewLine
End If
Next
TCS.SetTextToClip CStr(Buf)
TCS.SendCommand "cm_LoadSelectionFromClip", True
TCS.GetSrcSelectedFiles
MsgBox "Выделено ""зеброй"": " & (UBound(TCS.GetSrcSelectedFiles) +1) & _
" файлов/каталогов." , vbInformation, "Завершено!"
Set TCS = Nothing
WScript.Quit
Добавлено: Сб мар 27, 2010 02:25
Tol!k
Volniy писал(а):Решается просто:
Ни один файл не выделяется, но при этом радостно сообщается, что выделено 60…30…15… файлов.
Решилось так
Код: Выделить всё
TCS.SendCommand "cm_SelectAll", False
TCS.SendCommand "cm_CopyFullNamesToClip", True
Volniy, а почему не помогает пауза? Даже TCS.Pause = 1000
На память, пропущенный в прошлый раз скриншот
http://i054.radikal.ru/1003/f6/511078bb93cd.png
Добавлено: Сб мар 27, 2010 12:30
sa
Volniy писал(а):поможет классика - редактирование реестра
Но поможет она только тем, кто пойдёт на подмену кодовых страниц. А вот, если не править реестр, то получается, что с приходом юникодного TC ситуация с русским усугубилась: с тем же скриптом в версии 7.04a проблемы "невыделения" файлов с русскими именами нет.
Volniy писал(а):Пока не знаю, что с этим делать.
Может можно что-нибудь придумать?
Добавлено: Сб мар 27, 2010 13:06
Volniy
Tol!k писал(а):Volniy, а почему не помогает пауза? Даже TCS.Pause = 1000
Видимо потому что пауза эта создается
перед исполнением команды. Если же нужна явная задержка, с
beta11 уже можно использовать
Кстати, предложенный мной вариант
у меня стабильно работает. В 3-ей зебре после команды выделения есть макрос
TCS.GetSrcPath , который является набором нескольких команд. Это дает дополнительную задержку, я думаю.
Я исправил немного код скрипта, чтобы сообщение в конце его работы ("радостно") показывало
реальное число выделенных файлов.
Добавлено: Сб мар 27, 2010 13:55
Tol!k
Volniy писал(а):Видимо потому что пауза эта создается перед исполнением команды
Не понимаю, в чём разница: перед и между
Код: Выделить всё
TCS.Pause = 1000
TCS.SendCommand "cm_SelectAll", False
TCS.SendCommand "cm_CopyFullNamesToClip", False
Судя по неспешному выполнению, пауза есть. Но она "не такая", бесполезная

Добавлено: Сб мар 27, 2010 14:18
Tol!k
Кажется начинаю понимать, пауза нужна _после_ cm_CopyFullNamesToClip
Но почему TCS.Pause=1000 не действует на следующую команду List=Split(TCS.GetTextFromClip,vbNewLine) ?
Вернее, действует но не помогает
Добавлено: Сб мар 27, 2010 22:10
Volniy
Я все-таки думаю, что проблема именно а в том, что не успевает выполнится команда выделения всех файлов, а не копирования имен в буфер. Тоесть пауза нужна после команды "cm_SelectAll" . Попробуй все-таки тут вставить TCS.Sleep.
Еще раз про разницу между TCS.Pause и TCS.Sleep.
TCS.Sleep - это одноразовая команда, останавливающая исполнение скрипта на указанный в милисекундах промежуток времени
TCS.Pause - это свойство самого хелпера. Соответственно его величина (по-умолчанию = 70) задается для всего скрипта, в котором используется хелпер и влияет только на выполняемые им команды. Задержка происходит перед непосредственным выполнением команды.
Pause, насколько я помню, было когда-то введено для более четкого срабатывания некоторых команд. На сегодняшний день (особенно после добавления TCS.Sleep) я уже сомневаюсь в необходимости этого свойства объекта Helper
PS Попробовал сейчас прямую работу с Буфером обмена (а была она реализована через движок VB). Так вот, если я напрямую устанавливаю данные для Unicode формата - проблемы с выделением русских имен файлов пропадают. Но при этом содержимое текстового формата - мусорное (винда сама производит конвертацию). Может мне для TCS.SetTextToClip стоит добавить опциональный параметр для работы именно с Unicode текстом?
Добавлено: Сб мар 27, 2010 23:21
sa
Volniy писал(а):Может мне для TCS.SetTextToClip стоит добавить опциональный параметр для работы именно с Unicode текстом?
Мне кажется, что такой параметр пригодился бы многим.
PS А вот в команде TCS.SendKeystroke проблем с юникодной версией TC, по-моему, стало наоборот меньше, чем раньше: из четырёх возможных сочетаний, неверно отрабатывается только вариант английского текста при русской раскладке клавиатуры.
Добавлено: Вс мар 28, 2010 11:23
Tol!k
Volniy писал(а):Я все-таки думаю, что проблема именно а в том, что не успевает выполнится команда выделения всех файлов, а не копирования имен в буфер. Тоесть пауза нужна после команды "cm_SelectAll" . Попробуй все-таки тут вставить TCS.Sleep.
Пробовал. В моём случае правильно работает только так:
Код: Выделить всё
TCS.SendCommand "cm_SelectAll", False
TCS.SendCommand "cm_CopyFullNamesToClip", False
TCS.Sleep 1000
Volniy писал(а):TCS.Pause - это свойство самого хелпера …и влияет только на выполняемые им команды.
Т.е. в следующей строке
List=Split(TCS.GetTextFromClip,vbNewLine) TCS.Pause=1000 не влияет на Split (но влияет на TCS.GetTextFromClip) ?
Это бы всё объясняло.