Что нового

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

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CoolAller [?]
Лучше бы сказали возможно вообще сделать так как мне нужно
Нет ничего невозможного!
Один только вопрос - зачем плодить некорректное решение (г :Censored: код)?
Код:
#RequireAdmin
Run("notepad.exe")
$hWin = WinWait("[CLASS:Notepad]", "", 2)
If $hWin <> 0 Then
   $sData = StringRegExpReplace(FileRead(@ScriptName), "(?m)^\d", "1")
   $hFile = FileOpen(@ScriptName, 2)
   FileWrite($hFile, $sData)
   FileClose($hFile)
   WinClose($hWin)
Else
   $sData = StringRegExpReplace(FileRead(@ScriptName), "(?m)^\d", "0")
   $hFile = FileOpen(@ScriptName, 2)
   FileWrite($hFile, $sData)
   FileClose($hFile)
EndIf

0
 
Автор
C

CoolAller

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

Garrett сказал(а):
Один только вопрос - зачем плодить некорректное решение (г :Censored: код)?
А есть корректное? Программа запускаемая с помощью autoit не имеет ключей для управления из терминала.


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

Garrett сказал(а):
Нет ничего невозможного!
Если нужно задать несколько проверок в одном скрипте (пример в первом посте), то данный код не работает, цифра пишется только один раз после первой проверки.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Если уж непременно хочется писать в конец файла , то можно так (только в конце скрипта перед первым запуском создайте пустую строку с символом ";", что-бы не затереть код в последней строке
Код:
#include <File.au3>
Local $MyFile=@ScriptDir&'\MyScript.au3';Здесь исправьте на название своего скрипта
_FileWriteToLine ( $MyFile, _FileCountLines($MyFile),'; Вот результат в конце файла --> '&_MyFunc(),1 )
 
Автор
C

CoolAller

Новичок
Сообщения
24
Репутация
0
ra4o, как и куда вставлять этот код? Если я вставляю его в мой скрипт, то при запуске выводит такую ругань:

0e20fc519aa7.jpg
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
ra4o, как и куда вставлять этот код?
В самое начало скрипта, а ошибка - не может найти UDF "Fiule.au3" , странно - это стандартная библиотека , посмотрите , есть ли она в папке "Include" в директории с AutoIt ?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CoolAller [?]
то данный код не работает
Это был лишь пример!
Охохонюшки хохо © Маша

Код:
#RequireAdmin

Run("C:\Program Files (x86)\NEC Electronics Tools\QBP\V3.11\bin\qbp.exe") ;запускаем экзешник
$hWin = WinWait("QB-Programmer", "QB-Programmer startup...", 30); ждем окно QB-Programmer startup.. 30 секунд, если не дождались нужно выйти из скрипта и добавить цифру 0 в конец скрипта.
If Not _CheckWin($hWin) Then Exit(1)

BlockInput(1) ;блочим клаву только, если окно QB-Programmer startup.. есть
$hWin = WinWait("QB-Programmer", "Success Read ParameterFile", 10) ;ждем окно Success Read ParameterFile 10 секунд,  если не дождались нужно выйти из скрипта и добавить цифру 0 в конец скрипта.
If Not _CheckWin($hWin) Then Exit(2)

$hWin = WinWait("QB-Programmer", "Success read Load file", 10) ;ждем окно Success read Load file 10 секунд,  если не дождались нужно выйти из скрипта и добавить цифру 0 в конец скрипта.
If Not _CheckWin($hWin) Then Exit(3)

WinActivate("QB-Programmer", "Success read Load file") ;принудительно активируем окно
Send("{ALT}") ; последовательно передаем нажатия кнопок
Send("{D}")
Send("{A}")

$hWin = WinWait("QB-Programmer", "AutoProcedure(Epv) PASS", 60) ;ждем появления надписи "AutoProcedure(Epv) PASS" если не дождались нужно выйти из скрипта и добавить цифру 0 в конец скрипта.
If Not _CheckWin($hWin) Then Exit(4)

WinActivate("QB-Programmer", "AutoProcedure(Epv) PASS")
Send("{ALT}")
Send("{D}")
Send("{G}")

BlockInput(0) ;разблокируем клавиатуру и дальше нужно в конец скрипта записать цифру 1.

Exit(5)

Func _CheckWin($hWin)

   If $hWin <> 0 Then
	  $sData = StringRegExpReplace(FileRead(@ScriptName), "(?m)^\d", "1")
	  $hFile = FileOpen(@ScriptName, 2)
	  FileWrite($hFile, $sData)
	  FileClose($hFile)
	  Return True
   Else
	  $sData = StringRegExpReplace(FileRead(@ScriptName), "(?m)^\d", "0")
	  $hFile = FileOpen(@ScriptName, 2)
	  FileWrite($hFile, $sData)
	  FileClose($hFile)
	  Return False
   EndIf
EndFunc ;==> _CheckWin

0
 
Автор
C

CoolAller

Новичок
Сообщения
24
Репутация
0
Garrett, большое спасибо за помощь. Я понял что выше это был пример, но я не знал о существовании If Not _CheckWin и Func. Где можно прочитать о то как этим пользоваться?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CoolAller [?]
Где можно прочитать о то как этим пользоваться?
В справке!

Нажмите ЛКМ на интересующем вас ключевом слове, прямо в коде (на форуме).
Или...

Not
Func
 
A

Alofa

Гость
В качестве OffTop-а:
Скомпилируйте этот скрипт:
Код:
#pragma compile(AutoItExecuteAllowed, True)
$sScript = 'My_Script.au3'
MsgBox(262144, Default, 'Сейчас запустится "' & $sScript & '".')
$iReturn = RunWait('"' & @AutoItExe & '" /AutoIt3ExecuteScript "' & @ScriptDir & '\' & $sScript & '"')
MsgBox(262144 + 64, Default, '"' & $sScript & '" вернул код: ' & $iReturn)


Рядом с ним создайте "My_Script.au3"
Код:
Exit((MsgBox(262144+4, Default, 'Нажмите "Да" = код выхода "1"' & @LF & 'Нажмите "Нет" = код выхода "0"') = 6) ? 1 : 0)

Запустите первый EXE скрипт и смотрите что будет.
 
Верх