Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата 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.
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:39, 29-05-2009 | #3