признаки бага в автоите. Позавчера обнаружил и эти дни сокращал код до минимума, чтобы понять, как именно не работает. Сейчас только систематизировал. Итак, код:
#include <GDIPlus.au3>
#include <WinAPI.au3>
#include <GuiConstantsEx.au3>
#include <GUIConstants.au3>
#include <Misc.au3>
Global $vyrav, $Label,$ok_2, $otmena_2, $radio3, $radio4, $radio5, $vozvrat
$okno = WinGetTitle("[active]")
$stolb = inputBox("Ввод окружения array",">Введите необходимое количество столбцов","7")
If @error = 1 Then
Exit
Else
Endif
$strok = inputBox("Ввод окружения array",">Введите необходимое количество строк","3")
If @error = 1 Then
Exit
Else
Endif
send("\иупштХфккфнЪ{Enter 2}\утвХфккфнЪ{up 2}{End}Х")
Sleep(500)
$GUI_1 = GUICreate("Ввод окружения array", 300, 170)
;GUISetIcon(@ScriptDir & "\matrix.ico")
GUICtrlCreateLabel("Выберите желаемое горизонтальное" & @CRLF & "ыравнивание", 10, 5)
$radio1 = GUICtrlCreateRadio("l", 10, 40, 120, 20)
$radio2 = GUICtrlCreateRadio("c", 10, 70, 120, 20)
$radio3 = GUICtrlCreateRadio("r", 10, 100, 120, 20)
GUICtrlSetState($radio3,$GUI_CHECKED)
$ok_1 = GUICtrlCreateButton("OK", 10, 130, 88, 28, $BS_DEFPUSHBUTTON) ;
$otmena_1 = GUICtrlCreateButton("Cancel", 202, 130, 88, 28)
GUISetState()
Func Massiv_2($vyrav)
GUIDelete($GUI_1)
WinWaitClose("Ввод окружения array")
;Massiv_1()
$a = mod($stolb, 5)
$b =($stolb-$a)/5
If $a = 0 Then
For $c=1 To $b-1
send($vyrav & $vyrav & $vyrav & $vyrav & $vyrav & " ")
Next
send($vyrav & $vyrav & $vyrav & $vyrav & $vyrav)
Else
For $c=1 To $b
send($vyrav & $vyrav & $vyrav & $vyrav & $vyrav & " ")
Next
For $d=1 To $a
send($vyrav)
Next
Endif
send("Ъ{Down}")
Sleep(1000)
Global $GUI_2 = GUICreate("Ввод окружения array", 300, 170)
GUICtrlCreateLabel("По окончании работы программы курсор" & @CRLF & "в окне редактора перемещать туда," & @CRLF & "где он находится сейчас?", 10, 5)
$radio4 = GUICtrlCreateRadio("Да", 10, 40, 120, 20)
$radio5 = GUICtrlCreateRadio("Нет", 10, 70, 120, 20)
GUICtrlSetState($radio5,$GUI_CHECKED)
;$otmena_2 = GUICtrlCreateButton("Cancel", 202, 130, 88, 28)
$ok_2 = GUICtrlCreateButton("OK", 10, 130, 88, 28, $BS_DEFPUSHBUTTON)
$otmena_2 = GUICtrlCreateButton("Cancel", 202, 130, 88, 28)
GUISetState()
EndFunc
Func Massiv_3($vozvrat)
GUIDelete($GUI_2)
WinWaitClose("Ввод окружения array ")
MsgBox(4096, "Test", $vozvrat)
Exit
EndFunc
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $ok_1
If BitAND(GUICtrlRead($radio1), $GUI_CHECKED) = $GUI_CHECKED Then Massiv_2("l")
If BitAND(GUICtrlRead($radio2), $GUI_CHECKED) = $GUI_CHECKED Then Massiv_2("c")
If BitAND(GUICtrlRead($radio3), $GUI_CHECKED) = $GUI_CHECKED Then Massiv_2("r")
Case $otmena_1
ExitLoop
Case $ok_2
If BitAND(GUICtrlRead($radio4), $GUI_CHECKED) = $GUI_CHECKED Then Massiv_3(1)
If BitAND(GUICtrlRead($radio5), $GUI_CHECKED) = $GUI_CHECKED Then Massiv_3(0)
Case $otmena_2
ExitLoop
EndSwitch
WEnd
Что удалось подметить? Вот сейчас кнопка $ok_2 работает в каждом из двух случаев: и при да, и при нет. Зато нажатие кнопки $otmena_2 не вызывает ничего. Более того, после ее нажатия перестает работать и кнопка $ok_2 и становится не возможным закрыть окно красной кнопкой - только через Диспетчер задач. Если же раскомментировать первую Отмену2 и закомментировать вторую, ситуация становится ровно обратной: нажатие кнопки $ok_2 вызывает ровно ту же реакцию, что и нажатие кнопки $otmena_2, зато сама кнопка $otmena_2 начинает работать отменно. И вот, как по-вашему, это баг автоита или что? Все указывает на баг.
на момент входа в While 1 $msg = GUIGetMsg() $ok_2 и $otmena_2 не созданы а следовательно это 0 (на деле там пусто, но case прировнял к нулю) а $msg == 0 если ничего не происходит можно подпереть костылем, добавив в самый верх Case '' ContinueLoop
Так а разве этот вход не повторяется снова и снова? Там же цикл.
Не помогло. Сейчас добавил и ничего не изменилось: точно так же закрывал через Диспетчер. Да, оно и по симптомам было видно, что дело не в этом.
Обсуждают сегодня