Цитата:
Цитата Twix1124
З.ы. как запустить отдельную строчку в редакторе? Или такое невозможно? »
|
Попробуйте так:
Код:
' Execute Selection : $(SciteDefaultHome)\ExecSelAU3.vbs
' Version: 1.1
' Autor: mozers™, modified by alexii
' ------------------------------------------------
' Выполняет выделенный в редакторе код (модифицировано только под .au3)
' Для подключения добавьте в свой файл au3.properties следующие строки:
' file.patterns.ExecSelAU3=*.au3
' command.name.34.$(file.patterns.ExecSelAU3)=Execute Selection AU3
' command.34.$(file.patterns.ExecSelAU3)=cscript.exe //nologo "$(SciteDefaultHome)\ExecSelAU3.vbs"
' command.input.34.$(file.patterns.ExecSelAU3)=$(CurrentSelection){-=- Mark Last Line -=-}
' command.mode.34.$(file.patterns.ExecSelAU3)=subsystem:console,savebefore:no
' ------------------------------------------------
Option Explicit
Const ForWriting = 2
Dim objWshShell
Dim objFSO
Dim strCodeText
Dim strTmpFileName
Dim strPath2Exe
Dim strOutput
strCodeText = WScript.StdIn.ReadAll
strCodeText = StrConvert(strCodeText,"Windows-1251","utf-8")
strCodeText = Left(strCodeText, InStr(strCodeText, "{-=- Mark Last Line -=-}") - 1)
If Len(Trim(strCodeText)) = 0 Then
WScript.Echo "{-=- Nothing selection -=-}"
WScript.Quit 1
End If
Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
strTmpFileName = objFSO.BuildPath(objWshShell.ExpandEnvironmentStrings("%TEMP%"),"$ExecSelAU3.au3")
With objFSO.OpenTextFile(strTmpFileName, ForWriting, True)
.Write strCodeText
.Close
End With
strPath2Exe = objFSO.BuildPath(objWshShell.ExpandEnvironmentStrings("%ProgramFiles%"),"AutoIt3\AutoIt3.exe")
With objWshShell.Exec("""%comspec%"" /c """"" & strPath2Exe & """ /ErrorStdOut /AutoIt3ExecuteScript """ & strTmpFileName & """ 2>&1""")
strOutput = ""
Do While .Status = 0
strOutput = strOutput & .StdOut.ReadAll
WScript.Sleep 100
Loop
End With
objFSO.DeleteFile strTmpFileName
WScript.Echo StrConvert(strOutput,"Windows-1251","cp866")
Set objFSO = Nothing
Set objWshShell = Nothing
WScript.Quit 0
'=============================================================================
'=============================================================================
Function StrConvert(strText, strSourceCharset, strDestCharset)
Const adTypeText = 2
Const adModeReadWrite = 3
With WScript.CreateObject("ADODB.Stream")
.Type = adTypeText
.Mode = adModeReadWrite
.Open
.Charset = strSourceCharset
.WriteText strText
.Position = 0
.Charset = strDestCharset
strConvert = .ReadText
End With
End Function
'=============================================================================
Источник: SciTE: запуск выделенной части кода.
Основное изменение по сравнению с оригинальным скриптом — использование маркера «{-=- Mark Last Line -=-}», добавляемого к выделению, дабы обеспечить работоспособность скрипта при его вызове при отсутствии выделения.
«strCodeText = StrConvert(strCodeText,"Windows-1251","utf-8")» нужно, если у Вас оригинальный SciTE из поставки AutoIt, который отправляет данные во входной поток исключительно в кодировке UTF-8 (в сборках «SciTE RU-Board» данное поведение исправлено).
«WScript.Echo StrConvert(strOutput,"Windows-1251","cp866")» может потребоваться, а может и нет: зависит от того, настраивали ли Вы, и как именно, параметры «character.set» и/или «code.page» секции «# Internationalisation» в настройках SciTE.
Впрочем, сие не единственный путь. Если Вы знаете LUA, надёжнее будет реализовать на нём, используя
SciTE Lua Scripting Extension.