Переносной Script Helper ActiveX for TC by Volniy

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Моторокер, Avada, CaptainFlint, Nik, d-view

Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Переносной Script Helper ActiveX for TC by Volniy

Сообщение 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
Последний раз редактировалось Flasher Ср дек 02, 2015 15:53, всего редактировалось 3 раза.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Staniclaw
Сообщения: 533
Зарегистрирован: Вс дек 12, 2010 15:37
Откуда: Ташкент

Сообщение Staniclaw »

То есть с этой штукой не нужны никакие копания ни в реестре, ни в системных файлах? Всё необходимое будет на флешке? Класс!
Вечному двигателю -- вечные тормоза!..
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Staniclaw
Я так понял, то были риторические вопросы, ибо в статье об этом написано, надеюсь, понятным языком. :wink:
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Staniclaw
Сообщения: 533
Зарегистрирован: Вс дек 12, 2010 15:37
Откуда: Ташкент

Сообщение Staniclaw »

Flasher
Они самые. Всё равно класс. Представляю, как обрадуются сборщики.
Вечному двигателю -- вечные тормоза!..
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

В статье исправлен манифест для Хелпера. Компонент по ссылке со сборкой обновлён.
Staniclaw писал(а):Представляю, как обрадуются сборщики
Ну, пока никто из них не объявился, несмотря на старый манифест. Так что не факт, что сборщики если и будут, то публичные.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Flasher писал(а):В статье исправлен манифест для Хелпера. Компонент по ссылке со сборкой обновлён.
  • • Оптимизирован код компонента (по размеру немного ужался).
    • Добавлена полная поддержка Юникода.
    • Добавлено свойство NoArrayReturn.
    • Модифицирован метод GetFilter.
    • Добавлен ReadMe.txt с некоторыми правками.
Есть одна недоделка с декодированием Юникода, шифрованного в ANSI, как это происходит в INI-файлах.
Но автор 2 недели не появлялся, поэтому, чтобы сильно не тянуть, выложил то, что реализовано на данный момент.

[+] В статье смотрите важное дополнение перед п. 7) (совсем вылетело из головы сразу написать об этом).
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
addhaloka
Сообщения: 169
Зарегистрирован: Вт ноя 09, 2010 16:09

Сообщение addhaloka »

Flasher
Чёто не хочет работать, выдаёт ошибку :? Завёлся только после регистрации TCScript.dll, но насколько понимаю, целью было избавиться именно от этого? Проверял с примером отсюда и из статьи, сборка Хелпера также из статьи, TCx64 8.52a, Win 8.1 x64.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

addhaloka
Интерпретатор в строку "Команда:" подставлялся тот, что из архива?
И если до этого запускались предыдущие версии, то см. выше [+].
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Avada
Сообщения: 10543
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

addhaloka
То, что написано здесь про важное дополнение, учтено? Говоря проще, в кнопке или юзер-команде в поле "Команда" путь к wscript.exe перед путём скрипта дописывался? У меня, пока этого не сделал, было ровно то же сообщение.
P.S. О, чуть опередили...
Даже самая богатая фантазия
Не представит себе наши безобразия.
addhaloka
Сообщения: 169
Зарегистрирован: Вт ноя 09, 2010 16:09

Сообщение addhaloka »

Flasher
С тем, что в архиве - ситуация такая: 7-Zip отказывается его распаковывать, ругаясь на невозможность создать симлинк (может тут собака зарыта - где-то прав не хватает? С запущенным от админа 7-Zip удалось извлечь, но не получается поменять его свойства :D ), а 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
)
но хотелось бы разобраться, и как сейчас подумал - на машине без возможности получения адм. прав, батник наверное уже не поможет.
Последний раз редактировалось addhaloka Пт янв 08, 2016 17:18, всего редактировалось 1 раз.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

addhaloka писал(а):Поэтому скопировал интерпретатор из %windir%\SysWOW64.
Идём в статью и читаем:
для компонентов с 32-битной разрядностью из папки %Windir%\SysWOW64
addhaloka писал(а):Необходимость регистрации совершенно не напрягает
В таком случае в этой ветке особо и делать нечего. Тут про портабельность. См. предисловие в статье.
Последний раз редактировалось Flasher Пн янв 11, 2016 14:07, всего редактировалось 1 раз.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
addhaloka
Сообщения: 169
Зарегистрирован: Вт ноя 09, 2010 16:09

Сообщение addhaloka »

Flasher писал(а):Идём в статью и читаем:
У меня Win 8.1 x64, а в x64 осях всё 32-х битное лежит именно в SysWOW64.
Flasher писал(а):В таком случае в этой ветке особо и делать нечего.
Ну тогда проехали. Буду сюда заглядывать - может, кто на досуге попробует разобраться, мне чего-то лень. :)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

addhaloka писал(а):в x64 осях всё 32-х битное лежит именно в SysWOW64.
И правда. Надо будет исправить.
В общем, безотносительно версий, имеем попытки вызова. Если была неудачная, то переходим к [+].

Avada
А ты тестировал на TCx64?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Avada
Сообщения: 10543
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Flasher
Нет, только на 32 пока успел. Но сейчас попробовал несколько скриптов на x64 (естественно, уже с другим wscript.exe). Не работает.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Я проверял на 64-битной системе, используя 32-битный wscript, всё работает как из 32-битного тотала, так и из 64-битного. Компонент на моей машине никогда не устанавливался и не установлен, поэтому портабельность была 146%, я гарантирую это.

Достаточно положить 32-битный wscript.exe (взятый из SysWOW64) в папку с распакованным пакетом из статьи и запускать скрипты только через него (т.е. указывать в командной строке сначала путь к нашей копии wscript, а потом путь к самому скрипту - как и показано в статье), иначе будет запускаться системный wscript, на который манифест из статьи не распространяется (т.к. манифест должен лежать рядом с экзешником), следовательно, никакой портабельной привязки к компоненту не будет.

А ошибка 800A01AD появляется при попытке загрузить модуль другой разрядности (т.е. в данном случае при попытке использования 64-битного wscript).
Последний раз редактировалось MVV Пн янв 11, 2016 14:00, всего редактировалось 1 раз.
Ответить