Страница 1 из 2
Переносной Script Helper ActiveX for TC by Volniy
Добавлено: Ср ноя 25, 2015 18:54
Flasher
- Script Helper ActiveX for TC
Из справки:Управление Total Commander-ом из различных программных сред,
поддерживающих COM-технологию. Некоторые команды и функции могут
быть применены в WSH скриптах для целей, никак не связанных с TC.
Детали работы смотрите в прилагаемом ReadMe.txt.
Постоянная страница компонента.
Уже года 3-4 как пользуюсь портабельным Хелпером, но всё никак руки не доходили опубликовать решение, хотя паре человек обещал.
Что ж, с большим запозданием, но публикую статью на TCKB.
Также сообщаю, что компонент обновлён до версии 1.0.0.14, здесь появился новый метод GetInfo на основе возвращаемых WMCopyData данных.
Один пример приведён в статье. Далее публикую vbs-скрипт, отображающий сразу все варианты.
Код: Выделить всё
'===========================================================
' Демонстрация использования метода GetInfo вспомогательного
' для ТС компонента "Script Helper ActiveX for TC by Volniy"
'===========================================================
Set TCHelper = CreateObject("TCScript.Helper")
TCHelper.Pause = 0 : T = vbTab : C = vbCr
For Each N in Split("LP LC LI LN RP RC RI RN SP SC SI SN TP TC TI TN")
Select Case(Mid(N, 2))
Case "P" T1 = "Путь"
Case "C" T1 = "Число объектов"
Case "I" T1 = "№ объекта под курсором"
Case "N" T1 = "Имя объекта под курсором"
End Select
Select Case(Left(N,1))
Case "S" T2 = "активной" : Case "R" T2 = "правой"
Case "T" T2 = "пассивной" : Case "L" T2 = "левой"
End Select : Execute N & "= T1 & "" "" & T2 & """ &_
" панели:"" & T & TCHelper.GetInfo(CStr(N)) & vbCr"
Next: If TCHelper.GetInfo("A") = "L" Then A = "левая" Else A = "правая"
MsgBox T & T & "Активная панель:" & T & T & A & C & C & T & SC & T &_
TC & T & LC & T & RC &T & C & SI & TI & LI & RI & C & SN & TN & LN &_
RN & C & SP & TP & LP & RP,, Space(18) & "Данные WM_CopyData для TC"
Либо так:
Код: Выделить всё
'===========================================================
' Демонстрация использования метода GetInfo вспомогательного
' для ТС компонента "Script Helper ActiveX for TC by Volniy"
'===========================================================
Set TCHelper = CreateObject("TCScript.Helper")
TCHelper.Pause = 0 : T = vbTab : C = vbCr
Call WM_CopyData("LP")("LC")("LI")("LN")("RP")("RC")_
("RI")("RN")("SP")("SC")("SI")("SN")("TP")("TC")("TI")("TN")
If TCHelper.GetInfo("A") = "L" Then A = "левая" Else A = "правая"
MsgBox T & T & "Активная панель:" & T & T & A & C & C & T & SC & T &_
TC & T & LC & T & RC &T & C & SI & TI & LI & RI & C & SN & TN & LN &_
RN & C & SP & TP & LP & RP,, Space(18) & "Данные WM_CopyData для TC"
Function WM_CopyData(Var)
Select Case(Mid(Var, 2))
Case "P" T1 = "Путь"
Case "C" T1 = "Число объектов"
Case "I" T1 = "№ объекта под курсором"
Case "N" T1 = "Имя объекта под курсором"
End Select
Select Case(Left(Var,1))
Case "S" T2 = "активной" : Case "R" T2 = "правой"
Case "T" T2 = "пассивной" : Case "L" T2 = "левой"
End Select : Execute Var & "= T1 & "" "" & T2 & """&_
" панели:"" & T & TCHelper.GetInfo(CStr(Var)) & vbCr"
Set WM_CopyData = GetRef("WM_CopyData")
End Function
Добавлено: Ср ноя 25, 2015 21:26
Staniclaw
То есть с этой штукой не нужны никакие копания ни в реестре, ни в системных файлах? Всё необходимое будет на флешке? Класс!
Добавлено: Ср ноя 25, 2015 21:38
Flasher
Staniclaw
Я так понял, то были риторические вопросы, ибо в статье об этом написано, надеюсь, понятным языком.

Добавлено: Ср ноя 25, 2015 21:45
Staniclaw
Flasher
Они самые. Всё равно класс. Представляю, как обрадуются сборщики.
Добавлено: Вс ноя 29, 2015 12:27
Flasher
В статье исправлен манифест для Хелпера. Компонент по ссылке со сборкой обновлён.
Staniclaw писал(а):Представляю, как обрадуются сборщики
Ну, пока никто из них не объявился, несмотря на старый манифест. Так что не факт, что сборщики если и будут, то публичные.
Добавлено: Ср дек 23, 2015 13:03
Flasher
Flasher писал(а):В статье исправлен манифест для Хелпера. Компонент по ссылке со сборкой обновлён.
- • Оптимизирован код компонента (по размеру немного ужался).
• Добавлена полная поддержка Юникода.
• Добавлено свойство NoArrayReturn.
• Модифицирован метод GetFilter.
• Добавлен ReadMe.txt с некоторыми правками.
Есть одна недоделка с декодированием Юникода, шифрованного в ANSI, как это происходит в INI-файлах.
Но автор 2 недели не появлялся, поэтому, чтобы сильно не тянуть, выложил то, что реализовано на данный момент.
[+] В статье смотрите важное дополнение перед п. 7) (совсем вылетело из головы сразу написать об этом).
Добавлено: Пт янв 08, 2016 03:26
addhaloka
Flasher
Чёто не хочет работать, выдаёт
ошибку 
Завёлся только после регистрации TCScript.dll, но насколько понимаю, целью было избавиться именно от этого? Проверял с примером отсюда и из статьи, сборка Хелпера также из статьи, TCx64 8.52a, Win 8.1 x64.
Добавлено: Пт янв 08, 2016 12:38
Flasher
addhaloka
Интерпретатор в строку "Команда:" подставлялся тот, что из архива?
И если до этого запускались предыдущие версии, то см. выше [+].
Добавлено: Пт янв 08, 2016 13:13
Avada
addhaloka
То, что написано
здесь про важное дополнение, учтено? Говоря проще, в кнопке или юзер-команде в поле "Команда" путь к
wscript.exe перед путём скрипта дописывался? У меня, пока этого не сделал, было ровно то же сообщение.
P.S. О, чуть опередили...
Добавлено: Пт янв 08, 2016 16:58
addhaloka
Flasher
С тем, что в архиве - ситуация такая: 7-Zip отказывается его распаковывать,
ругаясь на невозможность создать симлинк (может тут собака зарыта - где-то прав не хватает? С запущенным от админа 7-Zip удалось извлечь, но не получается поменять его свойства

), а WinRAR просто его не извлекает. Поэтому скопировал интерпретатор из %windir%\SysWOW64. Предыдущие версии не пробовал, вчера впервые решил глянуть.
Avada
С этим я тоже столкнулся, но уже после выяснения проблемы с TCScript.dll - подумал, что:
Показать
Код: Выделить всё
// это не нужно
%COMMANDER_PATH%\Plugins\EXE\TCScript\wscript.exe
// достаточно системного, т. е. такой команды
wscript.exe
но как чуть поздней оказалось - нужно.
С зарегистрированной TCScript.dll - всё
прекрасно работает. Необходимость регистрации совершенно не напрягает, не вижу в это ничего страшного - обычно для подобных случаев пользуюсь батником, типа такого:
Показать
Код: Выделить всё
@echo off
cls
rem color 1b
%~d0
cd "%~dp0"
reg query HKCR | findstr /i "TCScript.Helper" >NUL
if not errorlevel 1 (
regsvr32 /u /s TCScript.dll
cls
echo Компонент Script Helper ActiveX for TC удалён из системы
echo Нажмите любую клавишу для выхода . . .
pause >NUL
) else (
regsvr32 /s TCScript.dll
cls
echo Компонент Script Helper ActiveX for TC зарегистрирован в системе
echo Нажмите любую клавишу для выхода . . .
pause >NUL
)
но хотелось бы разобраться, и как сейчас подумал - на машине без возможности получения адм. прав, батник наверное уже не поможет.
Добавлено: Пт янв 08, 2016 17:16
Flasher
addhaloka писал(а):Поэтому скопировал интерпретатор из %windir%\SysWOW64.
Идём в статью и читаем:
для компонентов с 32-битной разрядностью из папки %Windir%\SysWOW64
addhaloka писал(а):Необходимость регистрации совершенно не напрягает
В таком случае в этой ветке особо и делать нечего. Тут про портабельность. См. предисловие в статье.
Добавлено: Пт янв 08, 2016 17:23
addhaloka
Flasher писал(а):Идём в статью и читаем:
У меня Win 8.1
x64, а в x64 осях всё 32-х битное лежит именно в SysWOW64.
Flasher писал(а):В таком случае в этой ветке особо и делать нечего.
Ну тогда проехали. Буду сюда заглядывать - может, кто на досуге попробует разобраться, мне чего-то лень.

Добавлено: Пт янв 08, 2016 18:20
Flasher
addhaloka писал(а):в x64 осях всё 32-х битное лежит именно в SysWOW64.
И правда. Надо будет исправить.
В общем, безотносительно версий, имеем попытки вызова. Если была неудачная, то переходим к
[+].
Avada
А ты тестировал на TCx64?
Добавлено: Пт янв 08, 2016 19:28
Avada
Flasher
Нет, только на 32 пока успел. Но сейчас попробовал несколько скриптов на x64 (естественно, уже с другим wscript.exe). Не работает.
Добавлено: Пн янв 11, 2016 13:36
MVV
Я проверял на 64-битной системе, используя 32-битный wscript, всё работает как из 32-битного тотала, так и из 64-битного. Компонент на моей машине никогда не устанавливался и не установлен, поэтому портабельность была 146%, я гарантирую это.
Достаточно положить 32-битный wscript.exe (взятый из SysWOW64) в папку с распакованным пакетом из статьи и запускать скрипты только через него (т.е. указывать в командной строке сначала путь к нашей копии wscript, а потом путь к самому скрипту - как и показано в статье), иначе будет запускаться системный wscript, на который манифест из статьи не распространяется (т.к. манифест должен лежать рядом с экзешником), следовательно, никакой портабельной привязки к компоненту не будет.
А ошибка 800A01AD появляется при попытке загрузить модуль другой разрядности (т.е. в данном случае при попытке использования 64-битного wscript).