Что нового

Как вывести в конец скрипта либо 0 либо 1 при неуспешном или успешном выполнении

CoolAller

Новичок
Сообщения
24
Репутация
0
Всем привет!

Подскажите пожалуйста как выводить в конец скрипта цифру, при успешной отработке скрипта - 1, при не успешной - 0.

Код:
#RequireAdmin
Run("C:\Program Files (x86)\NEC Electronics Tools\QBP\V3.11\bin\qbp.exe") ;запускаем экзешник
$check = WinWait("QB-Programmer", "QB-Programmer startup...", 30) ;ждем окно QB-Programmer startup.. 30 секунд, если не дождались нужно выйти из скрипта и добавить цифру 0 в конец скрипта.
if $check <> 0 Then
    BlockInput(1) ;блочим клаву только, если окно QB-Programmer startup.. есть
    $check = WinWait("QB-Programmer", "Success Read ParameterFile", 10) ;ждем окно Success Read ParameterFile 10 секунд,  если не дождались нужно выйти из скрипта и добавить цифру 0 в конец скрипта.
    if $check <> 0 Then
        $check = WinWait("QB-Programmer", "Success read Load file", 10) ;ждем окно Success read Load file 10 секунд,  если не дождались нужно выйти из скрипта и добавить цифру 0 в конец скрипта.
        if $check <> 0 Then        
            WinActivate("QB-Programmer", "Success read Load file") ;принудительно активируем окно
            Send("{ALT}") ; последовательно передаем нажатия кнопок
            Send("{D}")
            Send("{A}")
            WinWait("QB-Programmer", "AutoProcedure(Epv) PASS", 60) ;ждем появления надписи "AutoProcedure(Epv) PASS" если не дождались нужно выйти из скрипта и добавить цифру 0 в конец скрипта.
			WinActivate("QB-Programmer", "AutoProcedure(Epv) PASS")
			Send("{ALT}")
            Send("{D}")
            Send("{G}")
        EndIf
    EndIf
    BlockInput(0) ;разблокируем клавиатуру и дальше нужно в конец скрипта записать цифру 1.
EndIf

;0 или 1
 
Автор
C

CoolAller

Новичок
Сообщения
24
Репутация
0
Alofa, я прочитал справку по Exit, но не понял как выводить в конец файла со скриптом цифры.
 
Автор
C

CoolAller

Новичок
Сообщения
24
Репутация
0
Alofa сказал(а):
Что вы подразумеваете под этой фразой?

В первом посте в самом конце скрипта есть пример записи. Т.е. нужно прервать дальнейшее выполнение и в конец скрипта писать либо ;0 либо ;1
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Не совсем понятна задача, но возможно нужно вынести Ваш скрипт в функцию и в зависимости от результата выполнения возвращать либо"0" , либо "1" , например так :
Код:
#RequireAdmin

ConsoleWrite(_MyFunc() & @CR)

Func _MyFunc()
	Local $Result = 0
	Run("C:\Program Files (x86)\NEC Electronics Tools\QBP\V3.11\bin\qbp.exe") ;запускаем экзешник
	$check = WinWait("QB-Programmer", "QB-Programmer startup...", 30) ;ждем окно QB-Programmer startup.. 30 секунд, если не дождались нужно выйти из скрипта и добавить цифру 0 в конец скрипта.
	If $check <> 0 Then
		BlockInput(1) ;блочим клаву только, если окно QB-Programmer startup.. есть
		$check = WinWait("QB-Programmer", "Success Read ParameterFile", 10) ;ждем окно Success Read ParameterFile 10 секунд,  если не дождались нужно выйти из скрипта и добавить цифру 0 в конец скрипта.
		If $check <> 0 Then
			$check = WinWait("QB-Programmer", "Success read Load file", 10) ;ждем окно Success read Load file 10 секунд,  если не дождались нужно выйти из скрипта и добавить цифру 0 в конец скрипта.
			If $check <> 0 Then
				WinActivate("QB-Programmer", "Success read Load file") ;принудительно активируем окно
				Send("{ALT}") ; последовательно передаем нажатия кнопок
				Send("{D}")
				Send("{A}")
				WinWait("QB-Programmer", "AutoProcedure(Epv) PASS", 60) ;ждем появления надписи "AutoProcedure(Epv) PASS" если не дождались нужно выйти из скрипта и добавить цифру 0 в конец скрипта.
				WinActivate("QB-Programmer", "AutoProcedure(Epv) PASS")
				Send("{ALT}")
				Send("{D}")
				Send("{G}")
			EndIf
		EndIf
		BlockInput(0) ;разблокируем клавиатуру и дальше нужно в конец скрипта записать цифру 1.
		$Result = 1
	EndIf

	Return $Result
EndFunc   ;==>_MyFunc
 
A

Alofa

Гость
CoolAller сказал(а):
... конец скрипта писать либо ;0 либо ;1
Не, ну дописать сам скрипт, поскольку это все-так текстовый документ, конечно можно,
Код:
Filewrite()

... но только что это вам даст?
 
Автор
C

CoolAller

Новичок
Сообщения
24
Репутация
0
Alofa сказал(а):
... но только что это вам даст?
Дальше другая программа просто будет смотреть в этот файл скрипта и в зависимости от найденного там значения - 0 или 1 будет выполнять дальнейшие действия.


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

ra4o сказал(а):
в зависимости от результата выполнения возвращать либо"0" , либо "1"
Да все верно, только после выполнения предложенного вами варианта в конец скрипта почему-то ничего не записывается.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
в конец скрипта почему-то ничего не записывается.
Функция "_MyFunc()" возвращает значение либо "0" либо "1" и так как я не знаю, что Вы хотите с этим значением делать , то просто вывожу результат в консоль в строке "ConsoleWrite(_MyFunc() & @CR)" замените эту строку на "ConsoleWrite('Результат выполнения функции - '&_MyFunc() & @CR)", может так проще будет эту строку в консоли искать.
 
Автор
C

CoolAller

Новичок
Сообщения
24
Репутация
0
ra4o, мне это значение нужно писать в этот же скрипт в последнюю строку.
 
Автор
C

CoolAller

Новичок
Сообщения
24
Репутация
0
ra4o, смысл в том, что другая программа просто будет смотреть в этот файл скрипта и в зависимости от найденного там значения - 0 или 1 будет выполнять дальнейшие действия. С Filewrite() у меня ничего не получилось, я что-то не так делаю, так как до конца не понимаю как должна выглядеть запись с данной функцией.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Вы скрипт компилировать не будете ? Если уж сильно охота писать результат в файл - создайте файл результата, где будет только значение выполнения скрипта и работайте с ним...
 
Автор
C

CoolAller

Новичок
Сообщения
24
Репутация
0
ra4o сказал(а):
Вы скрипт компилировать не будете ? Если уж сильно охота писать результат в файл - создайте файл результата, где будет только значение выполнения скрипта и работайте с ним...
Компилировать не буду. Создавать еще один файл не хочу, это дикий костыль.

Как воспользоваться функцией Filewrite() для записи в этот же файл я не знаю.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Так хотели ?
Код:
Local $MyFile=@ScriptDir&'\MyScript.au3';Здесь исправьте на название своего скрипта

 $hFile = FileOpen($MyFile, 1)
FileWriteLine($hFile,'; Вот результат в конце файла --> '&_MyFunc())
 FileClose($hFile)

Func _MyFunc()
    Local $Result = 0
    Run("C:\Program Files (x86)\NEC Electronics Tools\QBP\V3.11\bin\qbp.exe") ;запускаем экзешник
    $check = WinWait("QB-Programmer", "QB-Programmer startup...", 30) ;ждем окно QB-Programmer startup.. 30 секунд, если не дождались нужно выйти из скрипта и добавить цифру 0 в конец скрипта.
    If $check <> 0 Then
        BlockInput(1) ;блочим клаву только, если окно QB-Programmer startup.. есть
        $check = WinWait("QB-Programmer", "Success Read ParameterFile", 10) ;ждем окно Success Read ParameterFile 10 секунд,  если не дождались нужно выйти из скрипта и добавить цифру 0 в конец скрипта.
        If $check <> 0 Then
            $check = WinWait("QB-Programmer", "Success read Load file", 10) ;ждем окно Success read Load file 10 секунд,  если не дождались нужно выйти из скрипта и добавить цифру 0 в конец скрипта.
            If $check <> 0 Then
                WinActivate("QB-Programmer", "Success read Load file") ;принудительно активируем окно
                Send("{ALT}") ; последовательно передаем нажатия кнопок
                Send("{D}")
                Send("{A}")
                WinWait("QB-Programmer", "AutoProcedure(Epv) PASS", 60) ;ждем появления надписи "AutoProcedure(Epv) PASS" если не дождались нужно выйти из скрипта и добавить цифру 0 в конец скрипта.
                WinActivate("QB-Programmer", "AutoProcedure(Epv) PASS")
                Send("{ALT}")
                Send("{D}")
                Send("{G}")
            EndIf
        EndIf
        BlockInput(0) ;разблокируем клавиатуру и дальше нужно в конец скрипта записать цифру 1.
        $Result = 1
    EndIf

    Return $Result
EndFunc   ;==>_MyFunc
Только это уж точно
это дикий костыль.
 
Автор
C

CoolAller

Новичок
Сообщения
24
Репутация
0
ra4o, вместо ожидаемого 0 пишет 1 (разобрался переместил $Result = 1 после Send("{G}")).

Осталась проблема:

Если запустить скрипт еще раз, то цифра не будет переписана, а будет заноситься ниже предыдущей, т.е. нужно как-то указать номер строки чтобы в эту строку писалась цифра и при этом заменяла то значение, которое туда было записано при предыдущем запуске скрипта.
 
A

Alofa

Гость
OffTopic:
CoolAller, вы и сами понимаете, что это изврат.
Не пытались поинтересоваться, может есть другие пути передачи данных от одной программы к другой?
В какой последовательности запускаются ваши прграммы и какова логика их взаимодействия?
 
Автор
C

CoolAller

Новичок
Сообщения
24
Репутация
0
Alofa сказал(а):
В какой последовательности запускаются ваши прграммы и какова логика их взаимодействия?[/off]
Сначала запускается программа написанная на C#, она делает определенные операции, после она запускает данный скрипт, который запускает другую программу и ждет его выполнения, по окончании работы этого скрипта если она видит, что в строке в конце скрипта появился 0, то она выводит определенное окно№1, если видит 1, то выводит окно№2 и продолжает работу в зависимости от результата.
 
Автор
C

CoolAller

Новичок
Сообщения
24
Репутация
0
Garrett сказал(а):
Так сказать, убил наповал. ;D
Garrett, не понимаю что тут смешного? Лучше бы сказали возможно ли вообще реализовать так как нужно эту запись при помощи autoit.


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

В autoit нашел функцию: _FileWriteToLine (Записывает текст в определенную строку файла). Похоже это то что нужно, только теперь нужно понять как ей воспользоваться.
 
Верх