View previous topic :: View next topic |
Author |
Message |
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Wed Oct 16, 2013 23:57 Post subject: |
|
|
Flasher
??? Content и так неплохо передаётся, к тому же, я имею возможность сформировать его в любом виде. Проблема в filename, но её я не передаю, а получаю. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Oct 17, 2013 00:01 Post subject: |
|
|
Serge Yolkin
Аналогично. Попробуй сразу получать пути через SC. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Thu Oct 17, 2013 01:16 Post subject: |
|
|
Вроде, работает: 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 |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Thu Oct 17, 2013 08:42 Post subject: |
|
|
Мда... С помощью 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 |
|
|
Lev
Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Thu Oct 17, 2013 18:01 Post subject: |
|
|
Тестируем. Попытался удвоить слеши в filename. |
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Thu Oct 17, 2013 18:54 Post subject: |
|
|
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 |
|
|
Lev
Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Thu Oct 17, 2013 19:25 Post subject: |
|
|
[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 |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Fri Oct 18, 2013 00:14 Post subject: |
|
|
Lev
Да, всё работает. Ещё раз спасибо.
А WScript имплементировать мона?
Не то, чтобы без него никак, но непривычно... |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Oct 18, 2013 00:35 Post subject: |
|
|
Serge Yolkin
Все вышестоящие вопросы сняты? Не было времени ранее ответить. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Fri Oct 18, 2013 08:13 Post subject: |
|
|
Flasher
Да. А Васик прикольный...
Добавлено спустя 1 час 48 минут:
Lev
Некоторые системные файлы, такие как pagefile.sys, hiberfil.sys и др. плагин не обрабатывает, т.е. их имена не передаются в скрипт. Я знаю, что к ним нет доступа, но это и хотел обработать скриптом. Можно ли это исправить?
Уточнение: pagefile.sys, hiberfil.sys обрабатываются, если включена обработка каталогов (ParseDirs=1), если выключена - нет.
Предположение: при ParseDirs=0 объект проверяется на файловость/папковость каким-то методом, и, если винда на это не отвечает (файлы-то особенные), считается папкой. Хотя, js-ный fileExists() определяет правильно...
Вывод: можно не исправлять, в скрипте отфильтрую... |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Oct 19, 2013 16:52 Post subject: |
|
|
Serge Yolkin wrote: | Да. А Васик прикольный... | Да - это хорошо. Значит, нашёл статьи про SC. А Васик как Васик, для меня основной прикол в компактности и читабельности кода. В остальном есть и свои +ы и -ы. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Sat Oct 19, 2013 17:43 Post subject: |
|
|
Flasher
Как создать ScriptControl в js я знал, даже попробовал, но так проблема (уже исправленная) не решилась. Пришлось делать наоборот, вот и взялся за vbs. Пока чувствую себя, как на протезах. Не знаю: втянусь, или нет. Уж больно привык к длинным конструкциям в одну строчку. Но ковыряю потихоньку. Вот сейчас не нашел в js аналога Asc - пытаюсь на Васике что-то сделать.
Lev
Если я ещё не слишком достал, прошу заменить метод, получающий имена файлов/папок на тот, что с буквой W, а то с юникодными именами извращаться через Shell.Application.nameSpace приходится... |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Sat Oct 19, 2013 18:53 Post subject: |
|
|
Hidden text Не. Asc преобразует юникодный символ в код его ANSI-аналога, а для символов, не имеющих аналога выдаёт код 63 - знак вопроса. Т.е. проверка имени файла на юникодность становится простой и приятной, поскольку "?" в именах файлов быть не может. На Сером я уже пару дней народ тереблю по этому поводу. |
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Tue Nov 05, 2013 13:17 Post subject: |
|
|
Тестовый скрипт - проверяет имена файлов на юникодность 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 |
|
|
|
|
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
|