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 

Script Content Plugin
Goto page Previous  1, 2, 3 ... 6, 7, 8 ... 14, 15, 16  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Wed Oct 16, 2013 23:57    Post subject: Reply with quote

Flasher
??? Content и так неплохо передаётся, к тому же, я имею возможность сформировать его в любом виде. Проблема в filename, но её я не передаю, а получаю.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Thu Oct 17, 2013 00:01    Post subject: Reply with quote

Serge Yolkin
Аналогично. Попробуй сразу получать пути через SC.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Thu Oct 17, 2013 01:16    Post subject: Reply with quote

Вроде, работает:
Code:
Set SC = CreateObject("ScriptControl")
SC.Language = "JScript"
SC.AddCode("function FA(e){return(e);}")
content=SC.Run("FA",filename)
т.е. скрипт vbs, а в SC код js. Что там внутри - завтра смотреть буду. Наоборот - скрипт js, в SC код vbs - не работает, поскольку в SC значение js передать должен, а он не может...

Добавлено спустя 37 минут:

Ткните носом, где про ScriptControl почитать. На MSDN всё в контексте C++/C#, даже addCode не видел. Есть ли у него возможность подгрузить js код из внешнего файла? Что-нибудь вроде loadFromFile, src=, или подобное...
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Thu Oct 17, 2013 08:42    Post subject: Reply with quote

Мда... С помощью FSO.OpenTextFile в принципе работает... Хотелось бы попроще.
И ещё в скрипте, запущенном плагином WScript не определён - беда. Причём, CreateObject("WScript.Shell") OK, видимо, потому что передано строкой, а WScript.ScriptFullName - облом. echo и quit - та же история.

Добавлено спустя 20 минут:

В общем, вот такая обёртка получилась:
Code:
Dim FS, SC, SH, TS
Set FS           = CreateObject("Scripting.FileSystemObject")
Set SH          = CreateObject("WScript.Shell")
TC                = SH.ExpandEnvironmentStrings("%COMMANDER_PATH%")
Set TS           = FS.OpenTextFile(TC & "\PlugIns\wdx\script\test.js")
TX                = TS.ReadAll()
Set SC          = CreateObject("MSScriptControl.ScriptControl")
SC.Language = "JScript"
SC.AllowUI    = false
SC.AddCode(TX)
TS.Close()
Set TS           = Nothing
content          = SC.Run("FA", filename, FS, SH)
Set SH          = Nothing
Set FS           = Nothing
Set SC          = Nothing
это vbs, а main.js пока такой:
Code:
function FA(e,f,s){
  var u=f.getBaseName(e);
  return(u);
}


Last edited by Serge Yolkin on Thu Oct 17, 2013 19:11; edited 1 time in total
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Thu Oct 17, 2013 18:01    Post subject: Reply with quote

Тестируем. Попытался удвоить слеши в filename.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Thu Oct 17, 2013 18:54    Post subject: Reply with quote

Lev
Спасибо, вроде заработало! А то чтение скрипта из скрипта заметно тормозило на больших папках.

Для тех, кто будет скриптить: надо определить все переменные
Content,
Content1,
...
Content9;
иначе ругается.

Добавлено спустя 19 минут:

Поправил свою обёртку двумя постами выше: вроде, уже и не нужна, а выбросить жалко.


Last edited by Serge Yolkin on Thu Oct 17, 2013 19:26; edited 1 time in total
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Thu Oct 17, 2013 19:25    Post subject: Reply with quote

[fix] Не нужно определять переменные.
Тестируем по тому же адресу.

Кстати, года три назад присобачил передачу пареметра через ini, но не публиковал.

Пример:
Code:
script.ini
[param2]
Script=param2.vbs
parameter=a|b|c|d


Code:
'param2.vbs
cont=Split(parameter,"|")
Content=cont(0)
Content1=cont(1)

развлекайтесь :)
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Fri Oct 18, 2013 00:14    Post subject: Reply with quote

Lev
Да, всё работает. Ещё раз спасибо.
А WScript имплементировать мона?
Не то, чтобы без него никак, но непривычно...
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Fri Oct 18, 2013 00:35    Post subject: Reply with quote

Serge Yolkin
Все вышестоящие вопросы сняты? Не было времени ранее ответить.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Fri Oct 18, 2013 08:13    Post subject: Reply with quote

Flasher
Да. А Васик прикольный...

Добавлено спустя 1 час 48 минут:

Lev
Некоторые системные файлы, такие как pagefile.sys, hiberfil.sys и др. плагин не обрабатывает, т.е. их имена не передаются в скрипт. Я знаю, что к ним нет доступа, но это и хотел обработать скриптом. Можно ли это исправить?

Уточнение: pagefile.sys, hiberfil.sys обрабатываются, если включена обработка каталогов (ParseDirs=1), если выключена - нет.

Предположение: при ParseDirs=0 объект проверяется на файловость/папковость каким-то методом, и, если винда на это не отвечает (файлы-то особенные), считается папкой. Хотя, js-ный fileExists() определяет правильно...

Вывод: можно не исправлять, в скрипте отфильтрую...
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sat Oct 19, 2013 16:52    Post subject: Reply with quote

Serge Yolkin wrote:
Да. А Васик прикольный...
Да - это хорошо. Значит, нашёл статьи про SC. А Васик как Васик, для меня основной прикол в компактности и читабельности кода. В остальном есть и свои +ы и -ы.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Sat Oct 19, 2013 17:43    Post subject: Reply with quote

Flasher
Как создать ScriptControl в js я знал, даже попробовал, но так проблема (уже исправленная) не решилась. Пришлось делать наоборот, вот и взялся за vbs. Пока чувствую себя, как на протезах. Не знаю: втянусь, или нет. Уж больно привык к длинным конструкциям в одну строчку. Но ковыряю потихоньку. Вот сейчас не нашел в js аналога Asc - пытаюсь на Васике что-то сделать.

Lev
Если я ещё не слишком достал, прошу заменить метод, получающий имена файлов/папок на тот, что с буквой W, а то с юникодными именами извращаться через Shell.Application.nameSpace приходится...
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sat Oct 19, 2013 18:02    Post subject: Reply with quote

Serge Yolkin
 Офф.

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Sat Oct 19, 2013 18:53    Post subject: Reply with quote

 Hidden text
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Tue Nov 05, 2013 13:17    Post subject: Reply with quote

Тестовый скрипт - проверяет имена файлов на юникодность
Code:
var
 a=new ActiveXObject('Shell.Application'),
 f=new ActiveXObject('Scripting.FileSystemObject'),
 n=a.NameSpace(f.getParentFolderName(filename));

Content=fb(fa(filename));

function fa(e){return(f.getFileName(n.ParseName(f.getFileName(e)).path));}
function fb(e){return(/[^а-яё\x01-\xFF]/i.test(e));}
В целом работает, хотя тестировался на ограниченном наборе файлов, но я не об этом. Тот высокотехнологичный костыль (специалисты, наверняка, обратили внимание) нужен для полученя "нормального" виндового имени файла из короткого (8.3), которое плагин радостно передаёт скрипту.

И ещё, VBS'овский Asc не прокатил: некоторым юникодным (конкретно юникодным) символам он находит удивительные ANSI аналоги.
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 ... 6, 7, 8 ... 14, 15, 16  Next
Page 7 of 16

 
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