Что нового

[Процессы] Запуск одной программы из другой.

Leanna

Новичок
Сообщения
25
Репутация
3
Помогите пожалуйста со следующим вопросом:

Скрипт Main.au3 является самостоятельной программой. При его запуске открывается Inputbox и в зависимости от указанного значения переменной $WhatToDo: выполняются варианты Do1, Do2 или Do3.

Мне надо создать скрипт Settings.au3 который запускал бы Main.au3 с предустановленой настройкой и что бы мне не надо было бы вводить InputBox.

При всем этом хочу что бы возможность Inputbox оставалась (когда я не пользуюсь Settings, а запускаю Main).

Другими словами. Я создаю Settings1.au3 (потом будет *.exe) она запускает Main.au3 таким образом, что не вылезает окно Inputbox, a сразу запускается сценарий Do1.

Можно ли такое сделать?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Leanna [?]
Мне надо создать скрипт Settings.au3 который запускал бы Main.au3 с предустановленой настройкой
А как он (Settings.au3) должен узнать о том, какая сейчас должна быть команда?
 
Автор
Leanna

Leanna

Новичок
Сообщения
25
Репутация
3
Логика примерно следующая
settings.au3
Код:
Global $WhatToDo = "Do1"
Run(@ScriptDir & "MAIN.au3")



main.au3
Код:
(Какая-то проверка на существование $WhatToDo)
If $WhatToDo не существует или пустой then
$DoIt = Inputbox("", "Введите значение", "Do" )
EndIf

If $Do="Do1" then MsgBox(0, "Do it", "Follow")

If $Do="Do2" then MsgBox(0, "Do it", "Nothing Happens")


Логика такая, что если мы запускали settings перед main то $WhatToDo будет иметь какое-либо значение, а если не запускали, то он это определить по пустому значению $WhatToDo и запустит inputbox.

Так можно сделать?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
наверное можно так
содержание Settings.au3

Код:
If FileReadLine('test.txt',1) = '' Then
	Run('main.exe')
Else
	 _mayfunc()
	 EndIf
	Func _mayfunc()
	MsgBox(0,'','у вас все получилось')
	EndFunc


содержание Main.au3

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 198, 110, 192, 124)
$Input1 = GUICtrlCreateInput("", 24, 32, 121, 21)
$Button1 = GUICtrlCreateButton("Button1", 40, 64, 75, 25)
GUISetState(@SW_SHOW)


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			$readinput = GUICtrlRead($Input1)
			If $readinput > '' Then
				_mayfunc()
				FileWriteLine('test.txt',$readinput)
			Else
				MsgBox(0,'','нет данных')
			EndIf

	EndSwitch
WEnd


Func _mayfunc()
	MsgBox(0,'','у вас все получилось')
	EndFunc
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
А почему бы не сделать просто файл настроек в виде INI файла?
 
Автор
Leanna

Leanna

Новичок
Сообщения
25
Репутация
3
Александр,
попыталась скомпилировать main выдало ошибку
#include <ButtonConstants.au3>
Error: Cannot parse #include


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

Medic84
я новичок в AutoIt и программирование несколько понимаю только благодаря Excel vba.

Как можно сделать ini на моем примере? (Никогда не имела дело)
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Прмо в Main.au3 заменить строку с
Код:
$DoIt = InputBox(бла бла бла)

на
Код:
$DoIt = IniRead(@ScriptDir & "\settings.ini","General","Parameter",0)

При этом рядом со скриптом должен находиться ini файл с содержанием:
[General]
Parameter = Do1
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Leanna [?]
#include <ButtonConstants.au3>Error: Cannot parse #include
это библиотека из стандартного набора автоит в папке include
не должно быть ошибки
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Ну а если по Вашему то так:


Код:
$WhatToDo = IniRead(@ScriptDir & "\settings.ini","General","Parameter",0)

If $WhatToDo = 0 then
	$DoIt = Inputbox("", "Введите значение", "Do" )
Else
	$DoIt = $WhatToDo
EndIf
If $DoIt="Do1" then MsgBox(0, "Do it", "Follow")
If $DoIt="Do2" then MsgBox(0, "Do it", "Nothing Happens")
 
Автор
Leanna

Leanna

Новичок
Сообщения
25
Репутация
3
Как пользоваться ini файлом?

Я создала в папке скрипта settings.ini со строкой
[Parameter]
General="Do1"

весь код вставила main.ac3...
видимо что то не так делаю.. пока не получается считать Do1 ...
Как правильно?
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Leanna
Ну в ini файле написано наоборот же
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Пример в прикреплённом файле


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

Можно и другой вариант

Main.au3
Код:
Global $DoIt

If $CmdLine[0] Then
	If ($CmdLine[1] = 'Do1') Or ($CmdLine[1] = 'Do2') Then
		$DoIt = $CmdLine[1]
	Else
		$DoIt = Inputbox("", "Введите значение", "Do" )
	EndIf
EndIf

If $DoIt = 'Do1' then MsgBox(0, 'Do it', 'Follow')
If $DoIt = 'Do2' then MsgBox(0, 'Do it', 'Nothing Happens')


Setting.au3
Код:
$iMain = @ScriptDir & '\Main.au3'
$sParam = 'Do1'
Run('"' & @AutoItExe & '" /AutoIt3ExecuteScript "' & $iMain & '"' & ' "' & $sParam & '"', "", @SW_HIDE, 2)
 
Автор
Leanna

Leanna

Новичок
Сообщения
25
Репутация
3
Создала файлы с этими кодами,
если запускаю Setting.au3, то всё срабатывает верно,
но если запускаю Main.au3, то Inputbox не происходит, как и msgbox. Почему так происходит?

И ещё вопросик: откуда берётся массив $CmdLine?
В Setting.au3 о нем ни слова, как в нём появляются значения?
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Leanna [?]
И ещё вопросик: откуда берётся массив $CmdLine? В Setting.au3 о нем ни слова, как в нём появляются значения?
http://autoit-script.ru/autoit3_docs/intro/running.htm#CommandLine
но если запускаю Main.au3, то Inputbox не происходит, как и msgbox. Почему так происходит?
Потому что условия составлены неверно. Должно быть так:
Код:
If $CmdLine[0] Then
    If ($CmdLine[1] = 'Do1') Or ($CmdLine[1] = 'Do2') Then $DoIt = $CmdLine[1]
Else
	$DoIt = Inputbox("", "Введите значение", "Do" )
EndIf
 
Автор
Leanna

Leanna

Новичок
Сообщения
25
Репутация
3
По другому примеру тоже не получается.

В settings.ini прописываю
Код:
[General]
Parameter="Do1"

Запускаю Example.au3 - выходит Inputbox. Но ведь параметр $WhatToDo равен "Do1"?
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Example.au3
Код:
$WhatToDo = IniRead(@ScriptDir & "\settings.ini","General","Parameter", '')

If $WhatToDo = '' then
    $DoIt = Inputbox("", "Введите значение", "Do" )
Else
    $DoIt = $WhatToDo
EndIf
If $DoIt="Do1" then MsgBox(0, "Do it", "Follow")
If $DoIt="Do2" then MsgBox(0, "Do it", "Nothing Happens")


Settings.ini
Код:
[General]
Parameter=Do1

Если нужно вывести InputBox, то оставляйте параметр пустым

Settings.ini
Код:
[General]
Parameter=
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Я сам не очень понимаю столь странное поведение скрипта.... Точнее поведение IniRead
Viktor1703,
Вот так точно работает, но только если присутствует ini файл и его параметр... Если их нет -скрипт отказывается работать.... Непонятки. Вот попробуй удалить файл settings.ini или изменить имя параметра на несуществующее. Скрипт ничего не сделает, хотя IniRead должен вывести Default значение и скрипт должен продолжить работу...
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Я сам в недоумении от его работы :wacko:


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

Вот так вроде работает правильно:

Example.au3
Код:
$WhatToDo = IniRead(@ScriptDir & "\settings.ini","General","Parameter",0)

If ($WhatToDo = 'Do1') Or ($WhatToDo = 'Do2') then
	$DoIt = $WhatToDo
Else
    $DoIt = Inputbox("", "Введите значение", "Do" )
EndIf
If $DoIt="Do1" then MsgBox(0, "Do it", "Follow")
If $DoIt="Do2" then MsgBox(0, "Do it", "Nothing Happens")
 
Верх