Windows Script Host
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
AgereS
Разумеется, отдельно! Между прочим, это было всего несколькими постами раньше в этой же теме.
И сколько можно напоминать про поиск по форуму?
Лимит глупых вопросов исчерпан, далее будут санкции от модератора. Правила форума — в шапке любого подфорума. Например, здесь.
Разумеется, отдельно! Между прочим, это было всего несколькими постами раньше в этой же теме.
И сколько можно напоминать про поиск по форуму?
Лимит глупых вопросов исчерпан, далее будут санкции от модератора. Правила форума — в шапке любого подфорума. Например, здесь.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Не представит себе наши безобразия.
Да, забавно работает (ZebraMark-2.vbs):
Сначала выделил 60 файлов (правильно, в папке 121 файл)
Затем опять 60 файлов
Затем 30 файлов (я не поверил глазам и не снял скриншот)
Затем 15 файлов

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

TC 7.50a, Script Helper beta11, beta10+
В папках с малым кол-вом файлов (<20) работает правильно
Сначала выделил 60 файлов (правильно, в папке 121 файл)
Затем опять 60 файлов
Затем 30 файлов (я не поверил глазам и не снял скриншот)
Затем 15 файлов

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

TC 7.50a, Script Helper beta11, beta10+
В папках с малым кол-вом файлов (<20) работает правильно
Причина выделения нестабильного количества файлов очевидна. В начале скрипта есть команда выделения всех файлов и она не всегда успевает выполнится до начала исполнения следующей команды. А значит скрипт работает с меньшим кол-вом файлов. Решается просто:
Что касается "невыделения" файлов с русскими именами, то это косяк с русским юникодом. Пока не знаю, что с этим делать. Возможно, поможет классика - редактирование реестра, вроде вот оно: только я сам пробовать не стал, меня этот патч не устраивает по многим причинам.
Что касается BranchView, так там действительно дело в относительных путях. Решаемо:
Код: Выделить всё
TCS.SendCommand "cm_SelectAll", TrueКод: Выделить всё
[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
Последний раз редактировалось Volniy Сб мар 27, 2010 13:21, всего редактировалось 2 раза.
Ни один файл не выделяется, но при этом радостно сообщается, что выделено 60…30…15… файлов.Volniy писал(а):Решается просто:Код: Выделить всё
TCS.SendCommand "cm_SelectAll", True
Решилось так
Код: Выделить всё
TCS.SendCommand "cm_SelectAll", False
TCS.SendCommand "cm_CopyFullNamesToClip", TrueНа память, пропущенный в прошлый раз скриншот
http://i054.radikal.ru/1003/f6/511078bb93cd.png
Но поможет она только тем, кто пойдёт на подмену кодовых страниц. А вот, если не править реестр, то получается, что с приходом юникодного TC ситуация с русским усугубилась: с тем же скриптом в версии 7.04a проблемы "невыделения" файлов с русскими именами нет.Volniy писал(а):поможет классика - редактирование реестра
Может можно что-нибудь придумать?Volniy писал(а):Пока не знаю, что с этим делать.
Видимо потому что пауза эта создается перед исполнением команды. Если же нужна явная задержка, с beta11 уже можно использоватьTol!k писал(а):Volniy, а почему не помогает пауза? Даже TCS.Pause = 1000
Код: Выделить всё
TCS.Sleep 1000Я исправил немного код скрипта, чтобы сообщение в конце его работы ("радостно") показывало реальное число выделенных файлов.
Не понимаю, в чём разница: перед и междуVolniy писал(а):Видимо потому что пауза эта создается перед исполнением команды
Код: Выделить всё
TCS.Pause = 1000
TCS.SendCommand "cm_SelectAll", False
TCS.SendCommand "cm_CopyFullNamesToClip", False
Я все-таки думаю, что проблема именно а в том, что не успевает выполнится команда выделения всех файлов, а не копирования имен в буфер. Тоесть пауза нужна после команды "cm_SelectAll" . Попробуй все-таки тут вставить TCS.Sleep.
Еще раз про разницу между TCS.Pause и TCS.Sleep.
TCS.Sleep - это одноразовая команда, останавливающая исполнение скрипта на указанный в милисекундах промежуток времени
TCS.Pause - это свойство самого хелпера. Соответственно его величина (по-умолчанию = 70) задается для всего скрипта, в котором используется хелпер и влияет только на выполняемые им команды. Задержка происходит перед непосредственным выполнением команды.
Pause, насколько я помню, было когда-то введено для более четкого срабатывания некоторых команд. На сегодняшний день (особенно после добавления TCS.Sleep) я уже сомневаюсь в необходимости этого свойства объекта Helper
PS Попробовал сейчас прямую работу с Буфером обмена (а была она реализована через движок VB). Так вот, если я напрямую устанавливаю данные для Unicode формата - проблемы с выделением русских имен файлов пропадают. Но при этом содержимое текстового формата - мусорное (винда сама производит конвертацию). Может мне для TCS.SetTextToClip стоит добавить опциональный параметр для работы именно с Unicode текстом?
Еще раз про разницу между TCS.Pause и TCS.Sleep.
TCS.Sleep - это одноразовая команда, останавливающая исполнение скрипта на указанный в милисекундах промежуток времени
TCS.Pause - это свойство самого хелпера. Соответственно его величина (по-умолчанию = 70) задается для всего скрипта, в котором используется хелпер и влияет только на выполняемые им команды. Задержка происходит перед непосредственным выполнением команды.
Pause, насколько я помню, было когда-то введено для более четкого срабатывания некоторых команд. На сегодняшний день (особенно после добавления TCS.Sleep) я уже сомневаюсь в необходимости этого свойства объекта Helper
PS Попробовал сейчас прямую работу с Буфером обмена (а была она реализована через движок VB). Так вот, если я напрямую устанавливаю данные для Unicode формата - проблемы с выделением русских имен файлов пропадают. Но при этом содержимое текстового формата - мусорное (винда сама производит конвертацию). Может мне для TCS.SetTextToClip стоит добавить опциональный параметр для работы именно с Unicode текстом?
Мне кажется, что такой параметр пригодился бы многим.Volniy писал(а):Может мне для TCS.SetTextToClip стоит добавить опциональный параметр для работы именно с Unicode текстом?
PS А вот в команде TCS.SendKeystroke проблем с юникодной версией TC, по-моему, стало наоборот меньше, чем раньше: из четырёх возможных сочетаний, неверно отрабатывается только вариант английского текста при русской раскладке клавиатуры.
Пробовал. В моём случае правильно работает только так:Volniy писал(а):Я все-таки думаю, что проблема именно а в том, что не успевает выполнится команда выделения всех файлов, а не копирования имен в буфер. Тоесть пауза нужна после команды "cm_SelectAll" . Попробуй все-таки тут вставить TCS.Sleep.
Код: Выделить всё
TCS.SendCommand "cm_SelectAll", False
TCS.SendCommand "cm_CopyFullNamesToClip", False
TCS.Sleep 1000Т.е. в следующей строке List=Split(TCS.GetTextFromClip,vbNewLine) TCS.Pause=1000 не влияет на Split (но влияет на TCS.GetTextFromClip) ?Volniy писал(а):TCS.Pause - это свойство самого хелпера …и влияет только на выполняемые им команды.
Это бы всё объясняло.