View previous topic :: View next topic |
Author |
Message |
AgereS
Joined: 25 Mar 2010 Posts: 6
|
(Separately) Posted: Thu Mar 25, 2010 13:17 Post subject: |
|
|
Возможно я сейчас скажу глупость
я у себя не нашёл TCWSHelp.exe
он ставиться отдельно или должен идти вместе с Total Commander |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10252 Location: Россия, Саратов
|
(Separately) Posted: Thu Mar 25, 2010 13:29 Post subject: |
|
|
AgereS
Разумеется, отдельно! Между прочим, это было всего несколькими постами раньше в этой же теме.
И сколько можно напоминать про поиск по форуму?
Лимит глупых вопросов исчерпан, далее будут санкции от модератора. Правила форума — в шапке любого подфорума. Например, здесь. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
AgereS
Joined: 25 Mar 2010 Posts: 6
|
(Separately) Posted: Fri Mar 26, 2010 14:24 Post subject: |
|
|
Вроде частично разобрался спасибо
Вот только почему (маркировка файлов через один)
срабатывает не всегда так и не могу понять
P|S Avada - Что касается поиска, то если бы я знал как сформулировать вкраци то что ищу, то явно воспользовался им |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Fri Mar 26, 2010 14:46 Post subject: |
|
|
Да, забавно работает (ZebraMark-2.vbs):
Сначала выделил 60 файлов (правильно, в папке 121 файл)
Затем опять 60 файлов
Затем 30 файлов (я не поверил глазам и не снял скриншот)
Затем 15 файлов
Затем всегда "0" файлов, после перезапуска TC нормальная работа скрипта не восстанавливается
TC 7.50a, Script Helper beta11, beta10+
В папках с малым кол-вом файлов (<20) работает правильно |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Mar 26, 2010 16:15 Post subject: |
|
|
Tol!k
Сам этот скрипт иногда использовал в разных по объёму папках, ничего подобного не замечалось.
Добавлено: А вот в режиме BranchView срабатывает криво. Ну тут причина ясна: относительные пути. |
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2567
|
(Separately) Posted: Fri Mar 26, 2010 16:57 Post subject: |
|
|
AgereS wrote: | Вот только почему (маркировка файлов через один) срабатывает не всегда так и не могу понять |
Не показалось, что не выделяются файлы, в которых имеются символы на русском? По-моему, имеется проблема с копированием имён этих файлов в буфер. |
|
Back to top |
|
|
Volniy
Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Sat Mar 27, 2010 02:43 Post subject: |
|
|
Причина выделения нестабильного количества файлов очевидна. В начале скрипта есть команда выделения всех файлов и она не всегда успевает выполнится до начала исполнения следующей команды. А значит скрипт работает с меньшим кол-вом файлов. Решается просто: Code: | TCS.SendCommand "cm_SelectAll", True |
Что касается "невыделения" файлов с русскими именами, то это косяк с русским юникодом. Пока не знаю, что с этим делать. Возможно, поможет классика - редактирование реестра, вроде вот оно: Code: | [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1250"="c_1251.nls"
"1252"="c_1251.nls" | только я сам пробовать не стал, меня этот патч не устраивает по многим причинам.
Что касается BranchView, так там действительно дело в относительных путях. Решаемо: Code: | ' 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 |
Last edited by Volniy on Sat Mar 27, 2010 14:21; edited 2 times in total |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sat Mar 27, 2010 03:25 Post subject: |
|
|
Volniy wrote: | Решается просто: Code: | TCS.SendCommand "cm_SelectAll", True |
| Ни один файл не выделяется, но при этом радостно сообщается, что выделено 60…30…15… файлов.
Решилось так Code: | TCS.SendCommand "cm_SelectAll", False
TCS.SendCommand "cm_CopyFullNamesToClip", True |
Volniy, а почему не помогает пауза? Даже TCS.Pause = 1000
На память, пропущенный в прошлый раз скриншот
http://i054.radikal.ru/1003/f6/511078bb93cd.png |
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2567
|
(Separately) Posted: Sat Mar 27, 2010 13:30 Post subject: |
|
|
Volniy wrote: | поможет классика - редактирование реестра | Но поможет она только тем, кто пойдёт на подмену кодовых страниц. А вот, если не править реестр, то получается, что с приходом юникодного TC ситуация с русским усугубилась: с тем же скриптом в версии 7.04a проблемы "невыделения" файлов с русскими именами нет.
Volniy wrote: | Пока не знаю, что с этим делать. | Может можно что-нибудь придумать? |
|
Back to top |
|
|
Volniy
Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Sat Mar 27, 2010 14:06 Post subject: |
|
|
Tol!k wrote: | Volniy, а почему не помогает пауза? Даже TCS.Pause = 1000 |
Видимо потому что пауза эта создается перед исполнением команды. Если же нужна явная задержка, с beta11 уже можно использовать
Кстати, предложенный мной вариант у меня стабильно работает. В 3-ей зебре после команды выделения есть макрос TCS.GetSrcPath , который является набором нескольких команд. Это дает дополнительную задержку, я думаю.
Я исправил немного код скрипта, чтобы сообщение в конце его работы ("радостно") показывало реальное число выделенных файлов. |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sat Mar 27, 2010 14:55 Post subject: |
|
|
Volniy wrote: | Видимо потому что пауза эта создается перед исполнением команды | Не понимаю, в чём разница: перед и между
Code: | TCS.Pause = 1000
TCS.SendCommand "cm_SelectAll", False
TCS.SendCommand "cm_CopyFullNamesToClip", False | Судя по неспешному выполнению, пауза есть. Но она "не такая", бесполезная |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sat Mar 27, 2010 15:18 Post subject: |
|
|
Кажется начинаю понимать, пауза нужна _после_ cm_CopyFullNamesToClip
Но почему TCS.Pause=1000 не действует на следующую команду List=Split(TCS.GetTextFromClip,vbNewLine) ?
Вернее, действует но не помогает |
|
Back to top |
|
|
Volniy
Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Sat Mar 27, 2010 23:10 Post subject: |
|
|
Я все-таки думаю, что проблема именно а в том, что не успевает выполнится команда выделения всех файлов, а не копирования имен в буфер. Тоесть пауза нужна после команды "cm_SelectAll" . Попробуй все-таки тут вставить TCS.Sleep.
Еще раз про разницу между TCS.Pause и TCS.Sleep.
TCS.Sleep - это одноразовая команда, останавливающая исполнение скрипта на указанный в милисекундах промежуток времени
TCS.Pause - это свойство самого хелпера. Соответственно его величина (по-умолчанию = 70) задается для всего скрипта, в котором используется хелпер и влияет только на выполняемые им команды. Задержка происходит перед непосредственным выполнением команды.
Pause, насколько я помню, было когда-то введено для более четкого срабатывания некоторых команд. На сегодняшний день (особенно после добавления TCS.Sleep) я уже сомневаюсь в необходимости этого свойства объекта Helper
PS Попробовал сейчас прямую работу с Буфером обмена (а была она реализована через движок VB). Так вот, если я напрямую устанавливаю данные для Unicode формата - проблемы с выделением русских имен файлов пропадают. Но при этом содержимое текстового формата - мусорное (винда сама производит конвертацию). Может мне для TCS.SetTextToClip стоит добавить опциональный параметр для работы именно с Unicode текстом? |
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2567
|
(Separately) Posted: Sun Mar 28, 2010 00:21 Post subject: |
|
|
Volniy wrote: | Может мне для TCS.SetTextToClip стоит добавить опциональный параметр для работы именно с Unicode текстом? |
Мне кажется, что такой параметр пригодился бы многим.
PS А вот в команде TCS.SendKeystroke проблем с юникодной версией TC, по-моему, стало наоборот меньше, чем раньше: из четырёх возможных сочетаний, неверно отрабатывается только вариант английского текста при русской раскладке клавиатуры. |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sun Mar 28, 2010 11:23 Post subject: |
|
|
Volniy wrote: | Я все-таки думаю, что проблема именно а в том, что не успевает выполнится команда выделения всех файлов, а не копирования имен в буфер. Тоесть пауза нужна после команды "cm_SelectAll" . Попробуй все-таки тут вставить TCS.Sleep. | Пробовал. В моём случае правильно работает только так:
Code: | TCS.SendCommand "cm_SelectAll", False
TCS.SendCommand "cm_CopyFullNamesToClip", False
TCS.Sleep 1000 |
Volniy wrote: | TCS.Pause - это свойство самого хелпера …и влияет только на выполняемые им команды. | Т.е. в следующей строке List=Split(TCS.GetTextFromClip,vbNewLine) TCS.Pause=1000 не влияет на Split (но влияет на TCS.GetTextFromClip) ?
Это бы всё объясняло. |
|
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
|