Страница 2 из 20

Добавлено: Чт май 19, 2016 19:10
Gentoo69
Flasher писал(а):Gentoo69
2.1 Для тестов это крайне неприятная необходимость, когда проверка может возникать в минуту по неск. раз.
Имхо писать и тестить скрипт лучше где-то вне плагина, вы сохраните кучу времени.
Через cmd.exe или через спец. консоль\редактор (как у AutoIt, или AutoHotKey)
Просто добавить в начале скрипта

$filename = "D:\test.txt"
(указать переменную filename c путем к файлу)
и можно запускать.

А потом когда подключаете скрипт к плагину - закомментировать эту строчку.

------------------------------------
3. Что-то у меня не получилось. <...>
>>No data from script.
No data from script - означает что не пришло ничего в StdOut (вы не выводили результаты на консоль). При использовании скриптов через exe парсеры - те что указаны в [ExeScriptParsers]) - нужно выводить в конце скрипта результат на консоль. (чуть позже это надо наверное убрать, т.е. в след. версиях эти строчки плагин будет добавлять автоматом в скрипт)
Для Vbs
Проверьте на cmd.exe


Но честно говоря не пойму зачем это нужно для vbs - ведь скрипт получиться медленнее, если прогонять его через exe парсер (wscript.exe), чем через встроенный VBS через COM.
Или это просто тест?

Добавлено: Чт май 19, 2016 19:25
Flasher
Gentoo69 писал(а):Имхо писать и тестить скрипт лучше где-то вне плагина, вы сохраните кучу времени.
Раньше тестил SCP, всё быстро и удобно. Нажал одну кнопку, увидел результат. Вне плагина нет смысла, т.к. по-разному контент и debug возвращается, что обычно и нужно смотреть.
3. Без консоли (сразу в колонку) нельзя реализовать? Я как раз об этом просил.
Gentoo69 писал(а):Но честно говоря не пойму зачем это нужно для vbs - ведь скрипт получиться медленнее, если прогонять его через exe парсер
Не зачемал особо, что медленней (если не брать костыль с потоком). Зачем - для сторонних dll-ок типа TCHelper.

Добавлено: Чт май 19, 2016 19:57
Gentoo69
Flasher писал(а): Раньше тестил SCP, всё быстро и удобно. Нажал одну кнопку, увидел результат. Вне плагина нет смысла, т.к. по-разному контент и debug возвращается, что обычно и нужно смотреть.
В WinScriptAdv для языков Vbs, Js и Python используется та же система что и в SCP - скрипт отправляется движку через COM интерфейс. Этот интерфейс позволяет заглядывать в переменные - получать их содержимое.
Т.е. если используете VBS, Js и Python - никакой разницы быть не должно.
вне плагина нет смысла, т.к. по-разному контент и debug возвращается,
Должно быть одинаково (или я не понял просто о чем речь).
__________________________________

Если вы используете другие языки, то в них скрипт подается через вызов exe интерпретатора, т.е.:

1. Формируется скриптовый файл, он сохраняется в temp папке.
2. Вызывается exe с параметром - путь к этому файлу скрипту.
3. Читаем результат из StdOut (консоль грубо говоря).

Поэтому такие скрипты должны в конце писать результаты в консоль (StdOut) - возможно в следующих версиях это поменяется.

__________________________________

Расширения скриптов которые указаны в [ExeScriptParsers] - такие скрипты должны возвращать результат в консоль.

Сейчас это ahk, php и au3.

Если вы добавите туда vbs - то все vbs скрипты будут выполняться через указанный парсер (я не проверял, но скорее всего так).

Лучше так не делать, т.к. vbs скрипты работают быстрее через COM, да и не будут работать уже имеющиеся vbs скрипты - т.к. в них нет кода на вывод результатов на консоль.
Лучше закинуть туда другое расширение - например *.vb (правда не знаю подхватит ли его парсер wscript.exe).

Если же расширения не указаны в [ExeScriptParsers] - то в скриптах этих файлов в консоль ничего не нужно возвращать - плагин прочитает их содержимое переменных через COM (сейчас это Vbs, Js и Python).

Добавлено: Чт май 19, 2016 20:17
Flasher
Gentoo69 писал(а):никакой разницы быть не должно.
Разница в случае SCP в отсутствии необходимости перезапускать ТС, достаточно обновить панель. Я, собственно, повторяюсь.
Gentoo69 писал(а):Должно быть одинаково (или я не понял просто о чем речь).
Визуальная проверка скорости отображения, возможность возврата (на примере с Sub в SCP), проблема с переполнением буффера памяти (это я не проверял) и т.п.
Gentoo69 писал(а):Лучше так не делать, т.к. vbs скрипты работают быстрее через COM, да и не будут работать уже имеющиеся vbs скрипты - т.к. в них нет кода на вывод результатов на консоль.
Лучше - это не к функционалу vbs, а к функционалу плагина. Мне же первое требуется. vb никак тут не годится. Придумайте, что-нибудь без StdOut.

Добавлено: Чт май 19, 2016 20:47
Gentoo69
Flasher писал(а): Разница в случае SCP в отсутствии необходимости перезапускать ТС, достаточно обновить панель. Я, собственно, повторяюсь.
Что такое обновить панель? F2 что-ли?
Т.е. вы изменяете скрипт нажимаете F2 и принимаете новый результат?

В WinScriptAdv для скорости текст скрипта грузиться из файла в память только один раз при старте, после этого он оптимизируется (удаляются комменты, пустые строки итп) и далее отдается только из памяти.
Дальше, при нажатии F2 значения не поменяются, т.к. используется кэш для всех файлов в текущей открытой папке, опять же для оптимизации (т.к. TC может запрашивать одну колонку для всех файлов, а затем остальные колонки повторно для тех же файлов - т.е. кэш нужен чтобы скрипт не выполнялся больше 1 раза для одного файла. ).
SCP этого не делает.

Можно сделать что-то типа Debug опции в ini файле, который отключит все это.
Flasher писал(а):Лучше - это не к функционалу vbs, а к функционалу плагина. Мне же первое требуется. vb никак тут не годится. Придумайте, что-нибудь без StdOut.
Без StdOut возможно сделаю к следующей версии.
Вы опишите для чего нужно ставить другой vbs движок, может мы что-нибудь другое придумаем.
Что такое TCHelper и почему для него нужно пропускать vbs скрипт через exe парсер wscript, почему не достаточно стандартного vbs движка через COM?

Добавлено: Чт май 19, 2016 20:59
Flasher
Gentoo69 писал(а):Т.е. вы изменяете скрипт нажимаете F2 и принимаете новый результат?
Или Ctrl+R. Да, новый.
Gentoo69 писал(а):SCP этого не делает.
Я это понимаю. Но, допустим, мне нужно вернуть/учесть индекс файла в панели с каждой сменой сортировки. И что, мне для этого каждый раз перезапускать ТС?
Gentoo69 писал(а):Можно сделать что-то типа Debug опции в ini файле, который отключит все это.
А совместное использование нельзя реализовать? Т.е. для секций, где это требуется, при поставновке значения нового ключа кэш не действует.
Gentoo69 писал(а):Вы опишите для чего нужно ставить другой vbs движок, может мы что-нибудь другое придумаем.
Я ж описал. Для пользования сторонними библиотеками.
Gentoo69 писал(а):Что такое TCHelper и почему для него нужно пропускать vbs скрипт через exe парсер wscript, почему не достаточно стандартного vbs движка через COM?
Линк.

Добавлено: Чт май 19, 2016 21:34
Gentoo69
Flasher писал(а):Но, допустим, мне нужно вернуть/учесть индекс файла в панели с каждой сменой сортировки. И что, мне для этого каждый раз перезапускать ТС?
Индекс файла из списка файлов TC?
Нет он тоже поменяется (Если я правильно понял о каком индексе речь идет.), кэшируются только результаты работы скриптов WinScriptAdv для конкретных файлов, из текущей директории.

Чтобы скрипт выполнился повторно, нужно выйти из текущей папки и зайти в нее снова (правда скрипт не загрузится из файла снова).
Flasher писал(а):Я ж описал. Для пользования сторонними библиотеками.
Ну ок, это примерно понятно.
Задам вопрос по другому, а если не менять vbs движок на wscript.exe (в смысле вообще vbs не добавлять в [ExeScriptParsers]), а использовать встроенный в WinScriptAdv - что будет? (или вы его меняли просто для теста?)
Я просто пытаюсь понять что нужно изменить в плагине, возможно добавить новую функцию конкретно для ваших целей.

Добавлено: Чт май 19, 2016 21:44
Flasher
Gentoo69 писал(а):правда скрипт не загрузится из файла снова
В этом и проблема. Насчёт индекса уже понял, что поспешил с примером.
Gentoo69 писал(а):а если не менять vbs движок на wscript.exe
Толку от этого точно не прибавится.
Gentoo69 писал(а):возможно добавить новую функцию конкретно для ваших целей
Нужно, чтобы вместо встроенного wscript.exe выпонялся указанный для получения данных с помощью незарегистрированных dll.

Добавлено: Чт май 19, 2016 23:16
Gentoo69
Flasher

Понятно. Чтобы использовать его в автономных сборках ТС - вам надо было эту ключевую фразу сказать. Ведь запуск скриптов может быть заблокирован в системе кстати - есть такой параметр где то в груп. политике.
Ок, если этот незарегистрированный wscript.exe работает под cmd.exe (тут сам cmd не причем, имеется в виду вообще в винде), то он будет работать и в плагине без проблем.

Проблема только с stdOut.
В следующей версии уберу вывод на консоль в таких скриптах, WriteToStdOut будет ставиться автоматом в конец скрипта.
Придется добавить еще один параметр в ini где будет формат строки для вывода на консоль типа:

vbsStdOutWriteLine=Wscript.Echo("%s")

Итого получим, если используется скрипт (для любого языка) через COM - скрипт остается как есть, если через парсер - плагин автоматом добавляет вывод на консоль переменных "content".

[mod="Avada"]Оверквотинг на форуме запрещён! Ненужное избыточное цитирование предыдущих сообщений убрано. Кроме того, пустые строки после цитат добавляются автоматически, ставить их вручную и раздувать размер постов не нужно.[/mod]

Добавлено: Пт май 20, 2016 06:53
Flasher
Gentoo69 писал(а):Ведь запуск скриптов может быть заблокирован в системе кстати - есть такой параметр где то в груп. политике.
Про параметр я знаю. Есть и другой более известный ключ в реестре. Но это совсем другая песня. Тут уже ничего (кроме автоправки ключей) не поделать. Автономный wscript работать так же не будет. Это может помочь только для изменённой системной ассоциации в том же реестре. Но там есть ещё около 20 других зависимостей, некоторые из которых легко создадут проблемы выполнения. В моём же случае суть не в wscript, а именно в dll. Вот почему я прошу сделать ключ для скриптовых секций, а не только секции интерпретатора.
Gentoo69 писал(а):если через парсер - плагин автоматом добавляет вывод на консоль переменных "content"
А что значит "на консоль"?

Добавлено: Пт май 20, 2016 13:38
Gentoo69
Flasher писал(а):А что значит "на консоль"?
Плагин прочитает в ини файле формат строки для вывода на консоль для текущего языка:
vbsStdOutWriteLine=Wscript.Echo(%s)

(Это как пример, т.к. там скорее всего Wscript.Echo не подойдет.)
И вставит эту строку в конце скрипта с названиями используемых переменных:

Wscript.Echo(content)
Wscript.Echo(content1)

А потом скормит этот скрипт парсеру.
Итого получим, если используется скрипт (для любого языка) через COM - скрипт остается как есть, если через парсер - плагин автоматом добавляет вывод на консоль переменных "content".
В обоих случаях код скрипта, который редактирует юзер будет одинаковый.

Добавлено: Пт май 20, 2016 15:05
Flasher
Gentoo69
Я почему спросил. Вывод на консоль возможен только в случае CScript, а не WScript. Поэтому я не пойму, как плагин перехватит вывод окна, не дав ему появиться.

Добавлено: Пт май 20, 2016 16:45
Gentoo69
Flasher

Ну да, для плагина и нужно использовать CScript.
Т.к. WScript не поддерживает StdOut, а плагин в свою очередь не работает с окнами (все окна будут невидимые).

Тут пишут
http://stackoverflow.com/questions/4388 ... to-console

WScript.Echo -
If you run that under wscript.exe (the default handler for the .vbs extension, so what you'll get if you double-click the script) you'll get a "MessageBox" dialog with your text in it.
If you run that under cscript.exe you'll get output in your console window.

Добавлено: Пт май 20, 2016 17:05
Flasher
Gentoo69 писал(а):Т.к. WScript не поддерживает StdOut
Как же?

Код: Выделить всё

Content = "Test"
WScript.StdOut.Write Content

Добавлено: Пт май 20, 2016 17:17
Gentoo69
Flasher писал(а):Как же?

Код: Выделить всё

Content = "Test"
WScript.StdOut.Write Content
Выбивает ошибку - Handle Invalid. Запускаю под cmd.exe.

И вот так тоже будет писать ошибку

Код: Выделить всё

Set fso = CreateObject ("Scripting.FileSystemObject")
Set stdout = fso.GetStandardStream (1)
stdout.WriteLine "This will go to standard output."