Что нового

[Данные, строки] Код AutoIt'a в *.ini файле - можно ли выполнить?

killbond

Осваивающий
Сообщения
96
Репутация
32
Можно ли написать код AutoIt'a в *.ini файл, и далее при выполнении скрипта считать этот код из указанного файла и выполнить его? Как?
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Ну если сильно не углубляться, то так:
Код:
$exec = IniRead("config.ini","Config","exec","")
Execute($exec)

config.ini:
Код:
[Config]
exec=MsgBox(0,"Info","Code exec :D")
 
Автор
K

killbond

Осваивающий
Сообщения
96
Репутация
32
Спасибо, понял, а если код многострочный? и более сложный...
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Вотъ:
Код:
$exec = FileRead("cmd.txt")
$exec = StringSplit($exec,@CRLF,2)
For $i=0 To UBound($exec)-1 Step 1
	Execute($exec[$i])
Next

cmd.txt:
Код:
MsgBox(0,"Info","Code exec :D")
MsgBox(0,"Info","Code exec2 :D")
 
Автор
K

killbond

Осваивающий
Сообщения
96
Репутация
32
:laugh: ПРЕМНОГО благодарен! Вариант с *.txt даже больше подходит для того, что я задумал )))
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Всегда рад помочь, обращайся :smile:
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1 575
Репутация
335
А еще лучше запустить au3 файл :laugh:
Так намного легче :smile:
 
Автор
K

killbond

Осваивающий
Сообщения
96
Репутация
32
И как же? Дело в том, что я пишу скрипт с GUI интерфейсом, который, по сути является сборником алгоритмов, возникла надобность хранить алгоритмы в виде кода в каком-то внешнем файле, который можно быстро открыть и отредактировать, это нужно для простоты обновления (потому что алгоритмы будут со временем меняться) у алгоритма должны быть переменные, которые было бы разумно где-то хранить... поэтому вариант скрипт+интерпретатор (*.exe) не подходит, но вот если бы можно было из родительского скрипта с интерпретатором запустить дочерний (*.au3) на обработку используя интерпретатор родительского, было бы неплохо...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
А что не так с запуском дочернего скрипта из родительского ShellExecute'ом?
 
Автор
K

killbond

Осваивающий
Сообщения
96
Репутация
32
Kaster сказал(а):
А что не так с запуском дочернего скрипта из родительского ShellExecute'ом?
У меня-то на запуск скрипта установлена опция редактирования, а не компилирования, при том, необходимо учесть, что скрипт будет запускаться на машине, на которой не установлен AutoIt
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
killbond [?]
необходимо учесть, что скрипт будет запускаться на машине, на которой не установлен AutoIt
ну извини, мой хрустальный шар об этом почему-то промолчал :whistle:
 

SyDr

Сидра
Сообщения
651
Репутация
158
Из скомпилированного скрипта с помощью ключа /AutoIt3ExecuteScript можно выполнять скрипты точно так же, как и из оригинального интерпретатора.

Compiled.exe [/ErrorStdOut] [/AutoIt3ExecuteScript file] [params ...]
 
Автор
K

killbond

Осваивающий
Сообщения
96
Репутация
32
Разобрался и нашел таким образом, 2 решения:

1-ое:

Родительский скрипт (PARENT_SCRIPT.exe)
Код:
Run ( "PARENT_SCRIPT.exe /AutoIt3ExecuteScript CHILD_SCRIPT.AU3" )

Дочерний скрипт (CHILD_SCRIPT.AU3)
Код:
MsgBox (0,"","CHILD SCRIPT" & @CRLF & "MsgBox 1")
MsgBox (0,"","CHILD SCRIPT" & @CRLF & "MsgBox 2")
MsgBox (0,"","CHILD SCRIPT" & @CRLF & "MsgBox 3")


и 2-ое:

Родительский скрипт (PARENT_SCRIPT.exe)
Код:
; Some code...

#include <CHILD_SCRIPT.AU3>

; Some code...

Дочерний скрипт (CHILD_SCRIPT.AU3)
Код:
MsgBox (0,"","CHILD SCRIPT" & @CRLF & "MsgBox 1")
MsgBox (0,"","CHILD SCRIPT" & @CRLF & "MsgBox 2")
MsgBox (0,"","CHILD SCRIPT" & @CRLF & "MsgBox 3")


В первом варианте обязательно компилировать скрипт.
 

SyDr

Сидра
Сообщения
651
Репутация
158
Хм... Насколько мне видно, у тебя скрипт скомпилирован в обоих случаях. Причём во втором случае произвольный код ты выполнять не можешь.

Код:
If @compiled Then
Run(@ScriptFullPath & ' /AutoIt3ExecuteScript CHILD_SCRIPT.AU3')
Else
Run(@AutoItExe & ' ' & @ScriptDir & '\CHILD_SCRIPT.AU3')
EndIf
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1 575
Репутация
335
SyDr [?]
Compiled.exe [/ErrorStdOut] [/AutoIt3ExecuteScript file] [params ...]
Именно об этом я и говорил. Я просто хотел что бы человек сам догадался, ну или в справку заглянул :D
 
Автор
K

killbond

Осваивающий
Сообщения
96
Репутация
32
Re: [Данные, строки] Код AutoIt\'a в *.ini файле - можно ли выполнить?

Хм... Насколько мне видно, у тебя скрипт скомпилирован в обоих случаях. Причём во втором случае произвольный код ты выполнять не можешь.
А вот и неправда ))) во втором могу, к примеру, если еще в родительский дописать следующее:

(PARENT_SCRIPT.exe)
Код:
; Some code...
 
 MsgBox (0,"","PARENT SCRIPT")

$MyVarible = 1

If $MyVarible = 2 then
	#include <CHILD_SCRIPT.AU3>
Else
	exit
EndIf
; Some code...


Проверено, тогда дочерний не запустится, т.е. #include можно контролировать.
Да, компилированы оба скрипта, но если не скомпилировать в 1 случае, то ничего не запустится, в смысле дочерний не запустится, т.к. родительский - все еще в *.au3


Добавлено:
Сообщение автоматически объединено:

Я просто хотел что бы человек сам догадался, ну или в справку заглянул :D
Виноват :( раньше не приходилось сталкиваться с ключами
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 402
SyDr [?]
Код:
If @compiled Then
Run(@ScriptFullPath & ' /AutoIt3ExecuteScript CHILD_SCRIPT.AU3')
Else
Run(@AutoItExe & ' ' & @ScriptDir & '\CHILD_SCRIPT.AU3')
EndIf
Это можно написать в одну строчку:

Код:
Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @ScriptDir & '\CHILD_SCRIPT.AU3"')
 
Верх