PDA

Показать полную графическую версию : [решено] Плагины для скрипта - реально ли ?


Nik_rus
16-08-2009, 19:05
Задача:
Нужно сделать скрипт, который при определенных входных данных ($CmdLine[1]) вызывал функцию из доп. скрипта или сам доп. скрипт, учитывая что сам основной скрипт - компилированная программа.
Решение:
AutoIt specific command Line Switches
Form1: AutoIt3.exe [/ErrorStdOut] [/AutoIt3ExecuteScript] file [params ...]
Execute an AutoIt3 Script File


/ErrorStdOut Allows to redirect fatal error to StdOut which can be captured by an application as Scite editor. This switch can be used with a compiled script.


To execute a standard AutoIt Script File 'myscript.au3', use the command:
'AutoIt3.exe myscript.au3'



Form2: Compiled.exe [/ErrorStdOut] [params ...]
Execute an compiled AutoIt3 Script File produced with Aut2Exe.

Form3: Compiled.exe [/ErrorStdOut] [/AutoIt3ExecuteScript file] [params ...]
Execute another script file from a compiled AutoIt3 Script File. Then you don't need to fileinstall another copy of AutoIT3.exe in your compiled file.


Form4: AutoIt3.exe [/ErrorStdOut] /AutoIt3ExecuteLine "command line"
Execute one line of code.

To execute a single line of code, use the command:
Run(@AutoItExe & ' /AutoIt3ExecuteLine "MsgBox(0, ''Hello World!'', ''Hi!'')"')

The tray icon will not be displayed when using /AutoIt3ExecuteLine

NOTE: Correct usage of single- and double- quotation marks is important, even double single.

Belfigor
16-08-2009, 19:19
Select
Case $CmdLine[1] = 1
Run $Script1
Case $CmdLine[1] = 2
Run $Script2
Case $CmdLine[1] = 3
Run $Script3
EndSelect

Мб так? Поставить функцию которая будет прослушивать входящую информацию?

Nik_rus
16-08-2009, 19:26
Дык дело в том что плагинов может быть 100 или 1 и просчитать их нереал, имена разные.
Я вот думаю: может выполнять ехе-шники, например если послано cmd то выполнится cmd.exe... но проблема в том что хотелось юы еще возвратные данные иметь, ошибки какие, проч.

FlatX007
16-08-2009, 19:28
$Key1 = "-Key1"
$Key2 = "-Key2"

Switch _CheckingKey(@Compiled, $CmdLineRaw)

Case 0
MsgBox(0, "", "Нет ключей")
Case 1
_1()

Case 2
_2()

EndSwitch

Func _1()
MsgBox(0, "", "Func _1()")
EndFunc ;==>_1

Func _2()
MsgBox(0, "", "Func _2()")
EndFunc ;==>_2

Func _CheckingKey($Compiled = 0, $Cmd_LineRaw = 0)

Switch $Cmd_LineRaw

Case $Key1
If $Compiled = 1 Then Return 1

Case $Key2
If $Compiled = 1 Then Return 2

Return 0

EndSwitch
EndFunc ;==>_CheckingKey

Nik_rus
16-08-2009, 19:37
FlatX007, чета нопонял твой скрипт, да и судя по всему тут те же Case - нужно чтобы скрипт был компилиный а плагины выполнялись и чтоб-нибудь возвращали. А тут видимо уже прописано - это не вариант.

FlatX007
16-08-2009, 19:41
Ответ точно такойже как вопрос в шапке.

Nik_rus
16-08-2009, 19:51
Ну объяснил бы, я в этом скрипте 0

FlatX007
16-08-2009, 20:02
Ты напиши что тебе нужно , подробно , для чего ...

SyDr
16-08-2009, 20:09
Каков вопрос - таков ответ.

Требуется сделать так, чтобы скомпилированный скрипт умел выполнять другие нескомпилированные скрипты? Или что-то другое?
Известен ли заранее набор скриптов для выполнения?

Nik_rus
18-08-2009, 10:50
Заранее ничего не известно. Есть основной скрипт (собственно который и нужен), а есть папка plugins (рядом), где есть пачка плагинов, их может быть 0-100000000 и т.д., каждый выполняет определенную функцию (к примеру - стирает файл), нужно чтобы основной скрипт послал команды так, чтобы этот плагин получал данные (ком.строка), и возвращал код по своему завершению, на котором и базируется ответ основного скрипта юзеру.
Вот так вот все не сложно :)

SyDr
18-08-2009, 11:03
Так... Что есть плагин? Экзешник? Каким образом определяется его имя?

И как основной скрипт может сделать, чтобы плагин возвращал значение?


А вообще, для чего это надо? Может есть вариант попроще?

FlatX007
18-08-2009, 11:13
Плагины что из себя представляют ? *.exe или *.au3

Пагины *.au3 должны запускаться из основной программы так AutoIt3.exe myscript.au3 -Key1 -Key2 ???

Nik_rus
18-08-2009, 11:55
Итак, плагины - exe файлы aka компилированный скрипт au3. Запускается plugin.exe /lala /blahC:\ и проч.
Я думаю если передать основному скрипту cmd net start, то пусть выполняется cmd.exe "net start", может так ?

FlatX007
18-08-2009, 12:03
Я ничего непонимаю , чё вы тут мудрите ... и нафиг эта галиматья нужна.

Команда cmd net start - для запуска службы - она сдесь причём ?

SyDr
18-08-2009, 12:16
Компиляция скриптов - необходимость? Нельзя ли все функции занести в основной скрипт?

Nik_rus
18-08-2009, 16:21
Ну пусть скрипт - не компиленый. но как тогда не изменяя его подключить плагины ?
Итак, если основной скрипт запускать так:
allscript.au3 cmd md C:\123
То должен запуститься:
plugins\cmd.au3 md C:\123
И вернуть основному скрипту одно из следующих:
Done
Error
Ну вот собственно как это релизовать, а если возможно - чтобы все это было в ехе.

SyDr
18-08-2009, 16:25
AutoIt specific command Line Switches
Form1: AutoIt3.exe [/ErrorStdOut] [/AutoIt3ExecuteScript] file [params ...]
Execute an AutoIt3 Script File


/ErrorStdOut Allows to redirect fatal error to StdOut which can be captured by an application as Scite editor. This switch can be used with a compiled script.


To execute a standard AutoIt Script File 'myscript.au3', use the command:
'AutoIt3.exe myscript.au3'



Form2: Compiled.exe [/ErrorStdOut] [params ...]
Execute an compiled AutoIt3 Script File produced with Aut2Exe.

Form3: Compiled.exe [/ErrorStdOut] [/AutoIt3ExecuteScript file] [params ...]
Execute another script file from a compiled AutoIt3 Script File. Then you don't need to fileinstall another copy of AutoIT3.exe in your compiled file.


Form4: AutoIt3.exe [/ErrorStdOut] /AutoIt3ExecuteLine "command line"
Execute one line of code.

To execute a single line of code, use the command:
Run(@AutoItExe & ' /AutoIt3ExecuteLine "MsgBox(0, ''Hello World!'', ''Hi!'')"')

The tray icon will not be displayed when using /AutoIt3ExecuteLine

NOTE: Correct usage of single- and double- quotation marks is important, even double single.
Form3 and Form4 can be disabled for compiled script when using #NoAutoIt3Execute.

Nik_rus
18-08-2009, 16:38
Воооот то что нужно!
Думаю так и буду запускать)
Хотя это из командной строки... а как из просто While1 WEnd это все ?

SyDr
18-08-2009, 17:04
Есть ещё более жестокий метод))

Смотри функцию Execute


Если скрипт скомпилирован. Что тебе мешает запустить его ещй раз из самого себя?

Nik_rus
18-08-2009, 17:19
Ну это уже изврат нереальный канешн) себя запускать - жуть.
Ехекут пробнем)




© OSzone.net 2001-2012