Страница 4 из 20
Добавлено: Сб май 28, 2016 23:24
Flasher
Dimsok писал(а):В ЛС.
ОК. C dsl уже нашёл. Завтра посмотрю тогда, получится через поток или нет.
Добавлено: Пн май 30, 2016 11:59
Flasher
К сожалению, этот плагин не даёт возможность вернуть пути к интерпретатору и скрипту
Код: Выделить всё
Content = WScript.FullName
Content1 = WScript.ScriptFullName
, а без них по-простому консоль не скроешь...
Добавлено: Ср июн 08, 2016 18:00
Flasher
Gentoo69
Так что, долго ждать починок?
Добавлено: Пт июн 10, 2016 02:12
Gentoo69
Обновление
v1.6 10 June, 2016
***
Добавлена поддержка
PowerShell
____________________________________________
PowerShell.exe необходимо некоторое время для старта перед первым использованием ~3 - 6 секунд. Так что первые 3-6 сек, колонки будут пустыми.
PowerShell.exe запускается только раз, и остается запущенным пока не закроется WinScriptAdv плагин.
Можно ускорить запуск PS (вообще, не только в плагине), запустив один раз скрипт в консоли PowerShell (см. ниже) .
До : powershell.exe запускается около 5 сек.
После: powershell.exe запускается около 1,5 сек.
Код: Выделить всё
$env:path = [Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory()
[AppDomain]::CurrentDomain.GetAssemblies() | % {
if (! $_.location) {continue}
$Name = Split-Path $_.location -leaf
Write-Host -ForegroundColor Yellow "NGENing : $Name"
ngen install $_.location | % {"`t$_"}
}
Source
Добавлено: Пт июн 10, 2016 02:25
Flasher
Gentoo69
А на мой вопрос ответить?
Добавлено: Пт июн 10, 2016 02:42
Gentoo69
Flasher
На днях будет готово.
Только я не понял вот это:
К сожалению, этот плагин не даёт возможность вернуть пути к интерпретатору[...]
, а без них по-простому консоль не скроешь...
Плагин ведь запускает парсер(интерпретатор) всегда со скрытым окном, т.е. консоль не видно будет...
Или о чем тут речь?
Добавлено: Пт июн 10, 2016 03:15
Flasher
Gentoo69
Может, и ошибаюсь, но не будет видно только консоли с заданным в конфиге CScript, а не той, что вызывается по WSH.Exec.
Что касается поста, то там больше касалось текущей возможности для реализации возврата запрошенных полей.
Добавлено: Вт июн 28, 2016 00:28
Gentoo69
Обновление
Не могу обновить шапку. Пишет "Sorry, but only moderators can edit old posts."
Скачать
v.1.7 27 June, 2016
***
Унификация скриптов.
Только для скриптов которые работают через exe интерпретаторы - AHK, PHP, Autoit:
Сейчас вам не нужно добавлять в конце подобных скриптов код для вывода на StdOut консоль значений переменных "content". Плагин сгенерирует и добавит эти строки. Поэтому удалите эти строки с конца кода скрипта, если они есть. (плагин также будет работать корректно если эти строки остались). См. примеры в папке Scripts.
***
Added 2 new params for ExeScriptParsers section:
StdOutFormat and CmdArgs
E.g.: au3=c:\Program Files (x86)\AutoIt3\AutoIt3.exe
au3CmdArgs=ExeArgs
au3StdOutFormat=ConsoleWrite ($%s & @CRLF)
Read info in options.ini
Now you can use VBS in portable versions of Total Commander:
options.ini:
Code:
Код: Выделить всё
; This VBS interpreter is only for example, WinScriptadv uses vbs\js\python engines via COM that is much faster than this.
; You can use it in portable versions of Total commander or if WSH is broken in Windows.
;vbs=%WINDIR%\system32\cscript.exe
;vbsCmdArgs=//nologo
;vbsVarFormat=filename="%s"
;vbsDoubleSlashPath=0
;vbsStdOutFormat=Wscript.echo %s
Добавлено: Вт июн 28, 2016 04:27
Flasher
Gentoo69
На днях не получилось. Ну, хоть так.

В общем... С VBS все грабли, о которых шла речь, на виду.
1. Схема с указанием Cscript хоть и работает, но очень медленно в сравнении с простым вызовом с кнопки, даже если весь скрипт - это "Content = 1".
2. В ряде ситуаций вместо результата стала появляться отладка "Время ожидания операции истекло".
3. Wscript.echo надо менять на предлагаемую Wscript.StdOut.Write
Line, иначе имеем зябры вместо кириллицы. Юникод же и в этом случае не читается. Надо бы допилить.
4. Как и писал, после правки скрипта ничего в активной панели не обновляется ни при отключении/включении колонок, ни при обновлении панели, ни при переходе в другой каталог с возвратом.
5. Из-за неудовлетворения просьбы с подключением задаваемого парсера в отдельных скриптовых секциях имеем проблему скорости отображения полей данных от старых скриптов, с которыми ранее данные появлялись в разы шустрее и без глюков с Юникодом и кириллицей.
Из плюсов:
1. В отношении же скрытия WSH.Exec "console" всё как надо.
2. Ключ для WSH временно переключается. Не знаю, всем ли это понравится, но меня устраивает. Поэтому, видимо, из описания можно исключить "or if WSH is broken in Windows". Хотя есть ещё политики.

Добавлено: Вт июн 28, 2016 11:00
Gentoo69
Flasher
1. Я не понял что такое
в сравнении с простым вызовом с кнопки,
. Можете подробнее объяснить?
А так быстрее не сделаешь, через exe парсер всегда медленно. Максимально быстро работает через COM (т.е если закомментировать\убрать эти строки с vbs в options.ini ExeScriptParsers).
2. Время ожидания операции истекло - когда парсер не закрывается в течении определенного времени, - 2 с половиной секунды.
3. Насчет юникода - я не знаю можно ли писать в консоль юникод. Всмысле писать то можно, но оттуда выходит не юникод.
4. В чем проблема закрыть\открыть TC. Это ж секунда, тем более все настройки ТС сохраняет. А делать отдельный функционал для этого думаю не стоит - т.к. обычно скрипты пишутся и отлаживаются отдельно от плагина, а тратить ресурсы на мониторинг скрипт файлов (придется сравнивать дату по таймеру) имхо не надо.
Хотя если сильно понадобится можно и сделать.
5. Ну а как тут по другому? Есть парсер который обрабатывает VBS скрипты через Com - он работает быстро, вы указываете--переопределяете другой парсер для VBS скриптов, указав его exe, соответственно все VBS скрипты будут выполняться через указанный другой парсер. Нет смысла разделять часть vbs скриптов через COM, а часть vbs через спец. парсер.
Добавлено: Вт июн 28, 2016 13:13
Flasher
Gentoo69
1. Вызов скрипта командой <путь к CScript.exe> "<путь к скрипту>" с какой-нибудь мессагой.
2. Так почему ему требуется так много времени?
3. Пример на vbs:
Код: Выделить всё
CreateObject("Scripting.FileSystemObject")._
GetStandardStream(1, True).Write "Символы Unicode: àéÿüĄŀĦĤŕž"
WScript.Echo WScript.StdIn.ReadLine
Вызовем из Run:
cmd /k cscript.exe //nologo C:\Тест\UnicodeStdOut.vbs
и увидим в консоли правильные символы.
4. Как можно отладить отдельно, если нужно узнать именно поведение плагина, отличающееся от поведения стандартного вызова (правильность отображения, скорость вывода)? И это никак не секунда, а где-то от 5-6 до 15 с учётом всех операций автозавершения и автозапуска, как у меня. Поэтому стоило бы сделать хотя бы опционально.
5. Как это не смысла, если я о нём написал выше? Разделение даст возможность работать быстро там, где не требуется дополнительных данных, и наоборот.
Т.е. по сути ничего в ini не меняется за исключением доп. ключа активации стороннего интерпретатора в секциях скриптов, в то время как без указания ключа останется системный.
6. А ещё у меня выползало окно "Crash External exception EEDFADE".
7. И почему не работает Option Explicit?
Добавлено: Ср июн 29, 2016 17:10
Flasher
Flasher писал(а):Завтра посмотрю тогда, получится через поток или нет.
Да, совсем забыл. Т.к. внешник добавили, опубликую вариант от 30.05:
[cut="Dicts.vbs"]
Код: Выделить всё
'================== Путь к 7z.exe ==================
Const Z7 = """%COMMANDER_PATH%\Utils\7-Zip\7z.exe"""
'===================================================
Dim FSO, Ext, FileName, Strm, Stream, N, Reg,_
Enc, Content, Content1, Content2, Exec, Check
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim WSH : Set WSH = CreateObject("WScript.Shell")
Ext = FSO.GetExtensionName(FileName)
If Ext = "dz" Then
Ext = FSO.GetExtensionName(FSO.GetBaseName(FileName))
Set Strm = WSH.Exec("cmd /c chcp 1251&" &_
Z7 & " x """ & FileName & """ -so|more /c")
Set Stream = Strm.StdOut : Stream.SkipLine
Else : N = 0 : If Ext = "dsl" Then N = -1
Set Stream = FSO.OpenTextFile(FileName,,,N)
End If : Set Reg = New Regexp : Reg.IgnoreCase = True
If Ext = "dsl" Then
Call DSL("NAME", Content)_
("INDEX_LANGUAGE", Content1)("CONTENTS_LANGUAGE", Content2)
ElseIf Ext = "xdxf" Then
Reg.Pattern = ".*encoding=""(.*)"".*" : Check = 1
Enc = Reg.Execute(Stream.ReadLine)(0).Submatches(0)
Reg.Pattern = "^<xdxf lang_from=""(\w+)"" lang_to=""(\w+)"" "
Stream.SkipLine : Set Exec = Reg.Execute(Stream.ReadLine)(0)
Content1 = Exec.Submatches(0) : Content2 = Exec.Submatches(1)
Reg.Pattern = "^<full_name>(.+)</full_name>"
With CreateObject("ADODB.Stream")
.Open : .Charset = "windows-1251" : .WriteText Stream.ReadLine
.Position = 0 : .Charset = Enc
Content = Reg.Execute(.ReadText)(0).Submatches(0) : .Close
End With
End If: Stream.Close : Set Stream = Nothing : Set FSO = Nothing
If IsObject(Strm) Then Strm.StdIn.Write "q" :_
If Check Then WSH.Exec "taskkill /T /F /PID " & Strm.ProcessID
Function DSL(Ins, Cont)
Reg.Pattern = "^#" & Ins & "\s+""(.*)""$"
Cont = Reg.Execute(Stream.ReadLine)(0).Submatches(0)
Set DSL = GetRef("DSL")
End Function
[/cut]Предложенные ключи в
options.ini для vbs раскомментировать,
Wscript.echo заменить на
Wscript.StdOut.WriteLine, в ActiveScripts добавить
|Dicts с конца. И снизу секцию
Код: Выделить всё
[Dicts]
Script=Dicts.vbs
content=Название
content1=Язык 1
content2=Язык 2
extensions=dsl|dz|xdxf
Перезапустить ТС.
Добавлено: Ср июн 29, 2016 21:19
Dimsok
Flasher
Спасибо. А консольное окно чтоб где-нибудь за кулисами отображалось можно сделать?
Добавлено: Ср июн 29, 2016 21:22
Flasher
Dimsok >
Flasher писал(а):Предложенные ключи в options.ini для vbs раскомментировать
Добавлено: Ср июн 29, 2016 21:29
Dimsok
vbsStdOutFormat=Wscript.StdOut.WriteLine %s раскомментировал. А что ещё нужно?