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 

Windows Script Host
Goto page Previous  1, 2, 3 ... 10, 11, 12 ... 25, 26, 27  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
AgereS



Joined: 25 Mar 2010
Posts: 6

Post (Separately) Posted: Thu Mar 25, 2010 13:17    Post subject: Reply with quote

Возможно я сейчас скажу глупость
я у себя не нашёл TCWSHelp.exe
он ставиться отдельно или должен идти вместе с Total Commander
Back to top
View user's profile Send private message
Avada



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

Post (Separately) Posted: Thu Mar 25, 2010 13:29    Post subject: Reply with quote

AgereS
Разумеется, отдельно! Между прочим, это было всего несколькими постами раньше в этой же теме.
И сколько можно напоминать про поиск по форуму?
Лимит глупых вопросов исчерпан, далее будут санкции от модератора. Правила форума — в шапке любого подфорума. Например, здесь.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
AgereS



Joined: 25 Mar 2010
Posts: 6

Post (Separately) Posted: Fri Mar 26, 2010 14:24    Post subject: Reply with quote

Вроде частично разобрался спасибо
Вот только почему (маркировка файлов через один)
срабатывает не всегда так и не могу понять



P|S Avada - Что касается поиска, то если бы я знал как сформулировать вкраци то что ищу, то явно воспользовался им
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Fri Mar 26, 2010 14:46    Post subject: Reply with quote

Да, забавно работает (ZebraMark-2.vbs):
Сначала выделил 60 файлов (правильно, в папке 121 файл)
Затем опять 60 файлов
Затем 30 файлов (я не поверил глазам и не снял скриншот)
Затем 15 файлов

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

TC 7.50a, Script Helper beta11, beta10+
В папках с малым кол-вом файлов (<20) работает правильно
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Fri Mar 26, 2010 16:15    Post subject: Reply with quote

Tol!k
Сам этот скрипт иногда использовал в разных по объёму папках, ничего подобного не замечалось.
Добавлено: А вот в режиме BranchView срабатывает криво. Ну тут причина ясна: относительные пути.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Fri Mar 26, 2010 16:57    Post subject: Reply with quote

AgereS wrote:
Вот только почему (маркировка файлов через один) срабатывает не всегда так и не могу понять

Не показалось, что не выделяются файлы, в которых имеются символы на русском? По-моему, имеется проблема с копированием имён этих файлов в буфер.
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Sat Mar 27, 2010 02:43    Post subject: Reply with quote

Причина выделения нестабильного количества файлов очевидна. В начале скрипта есть команда выделения всех файлов и она не всегда успевает выполнится до начала исполнения следующей команды. А значит скрипт работает с меньшим кол-вом файлов. Решается просто:
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
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sat Mar 27, 2010 03:25    Post subject: Reply with quote

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
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Sat Mar 27, 2010 13:30    Post subject: Reply with quote

Volniy wrote:
поможет классика - редактирование реестра
Но поможет она только тем, кто пойдёт на подмену кодовых страниц. А вот, если не править реестр, то получается, что с приходом юникодного TC ситуация с русским усугубилась: с тем же скриптом в версии 7.04a проблемы "невыделения" файлов с русскими именами нет.
Volniy wrote:
Пока не знаю, что с этим делать.
Может можно что-нибудь придумать?
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Sat Mar 27, 2010 14:06    Post subject: Reply with quote

Tol!k wrote:
Volniy, а почему не помогает пауза? Даже TCS.Pause = 1000

Видимо потому что пауза эта создается перед исполнением команды. Если же нужна явная задержка, с beta11 уже можно использовать
Code:
TCS.Sleep 1000


Кстати, предложенный мной вариант у меня стабильно работает. В 3-ей зебре после команды выделения есть макрос TCS.GetSrcPath , который является набором нескольких команд. Это дает дополнительную задержку, я думаю.

Я исправил немного код скрипта, чтобы сообщение в конце его работы ("радостно") показывало реальное число выделенных файлов.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sat Mar 27, 2010 14:55    Post subject: Reply with quote

Volniy wrote:
Видимо потому что пауза эта создается перед исполнением команды
Не понимаю, в чём разница: перед и между
Code:
TCS.Pause = 1000
TCS.SendCommand "cm_SelectAll", False
TCS.SendCommand "cm_CopyFullNamesToClip", False
Судя по неспешному выполнению, пауза есть. Но она "не такая", бесполезная
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sat Mar 27, 2010 15:18    Post subject: Reply with quote

Кажется начинаю понимать, пауза нужна _после_ cm_CopyFullNamesToClip
Но почему TCS.Pause=1000 не действует на следующую команду List=Split(TCS.GetTextFromClip,vbNewLine) ?
Вернее, действует но не помогает
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Sat Mar 27, 2010 23:10    Post subject: Reply with quote

Я все-таки думаю, что проблема именно а в том, что не успевает выполнится команда выделения всех файлов, а не копирования имен в буфер. Тоесть пауза нужна после команды "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
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Sun Mar 28, 2010 00:21    Post subject: Reply with quote

Volniy wrote:
Может мне для TCS.SetTextToClip стоит добавить опциональный параметр для работы именно с Unicode текстом?

Мне кажется, что такой параметр пригодился бы многим.
PS А вот в команде TCS.SendKeystroke проблем с юникодной версией TC, по-моему, стало наоборот меньше, чем раньше: из четырёх возможных сочетаний, неверно отрабатывается только вариант английского текста при русской раскладке клавиатуры.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sun Mar 28, 2010 11:23    Post subject: Reply with quote

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
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 Previous  1, 2, 3 ... 10, 11, 12 ... 25, 26, 27  Next
Page 11 of 27

 
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