Что нового

Элементы GUI Как назначить завершение цикла на GUI кнопку?

DmitryT

Новичок
Сообщения
8
Репутация
0
Столкнулся с проблемой назначения принудительного завершения цикла на кнопку.
Вот код:

#include <GUIConstants.au3>

#Region ### S
$Form3 = GUICreate("Signalization", 278, 95, 434, 275)
GUISetBkColor(0xB9D1EA)
$Button1 = GUICtrlCreateButton("Stop", 8, 40, 113, 41, $BS_DEFPUSHBUTTON)
GUICtrlSetBkColor(-1, 0xFF0000)
$Button2 = GUICtrlCreateButton("Start", 144, 40, 113, 41, $BS_DEFPUSHBUTTON)
GUICtrlSetBkColor(-1, 0x00FF00)
GUISetState(@SW_SHOW)
#EndRegion ###

$Color = 0x00FF00

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitLoop

Case $Button2
While 1
If PixelGetColor (1072 , 110) <> $Color Then
SoundPlay ('C:\Users\User\Desktop\02070.mp3' , 1)
EndIf
Wend
Case $Button1
ExitLoop
EndSwitch
Wend
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Из этого цикла скрипт никогда не выйдет
Код:
While 1
         If PixelGetColor(1072, 110) <> $Color Then
               SoundPlay('C:\Users\User\Desktop\02070.mp3', 1)
         EndIf
WEnd

Трудно дать однозначный ответ без полного понимания целей скрипта, но можно так:
Код:
While 1
         If PixelGetColor(1072, 110) <> $Color Then
            SoundPlay('C:\Users\User\Desktop\02070.mp3', 1)
             Exitloop
          EndIf
WEnd

Но, опять же после нажатия $Button2 скрипт уйдёт в бесконечное ожидание , пока не исчезнет нужный цвет пикселя, что бы обеспечить выход со скрипта не дожидаясь условия воспользуйтесь HotKey
 
Последнее редактирование:
Автор
D

DmitryT

Новичок
Сообщения
8
Репутация
0
Из этого цикла скрипт никогда не выйдет
Код:
While 1
         If PixelGetColor(1072, 110) <> $Color Then
               SoundPlay('C:\Users\User\Desktop\02070.mp3', 1)
         EndIf
WEnd

Трудно дать однозначный ответ без полного понимания целей скрипта, но можно так:
Код:
While 1
         If PixelGetColor(1072, 110) <> $Color Then
            SoundPlay('C:\Users\User\Desktop\02070.mp3', 1)
             Exitloop
          EndIf
WEnd

Но, опять же после нажатия $Button2 скрипт уйдёт в бесконечное ожидание , пока не исчезнет нужный цвет пикселя, что бы обеспечить выход со скрипта не дожидаясь условия воспользуйтесь HotKey
Из этого цикла скрипт никогда не выйдет
Код:
While 1
         If PixelGetColor(1072, 110) <> $Color Then
               SoundPlay('C:\Users\User\Desktop\02070.mp3', 1)
         EndIf
WEnd

Трудно дать однозначный ответ без полного понимания целей скрипта, но можно так:
Код:
While 1
         If PixelGetColor(1072, 110) <> $Color Then
            SoundPlay('C:\Users\User\Desktop\02070.mp3', 1)
             Exitloop
          EndIf
WEnd

Но, опять же после нажатия $Button2 скрипт уйдёт в бесконечное ожидание , пока не исчезнет нужный цвет пикселя, что бы обеспечить выход со скрипта не дожидаясь условия воспользуйтесь HotKey
Цель скрипта отслеживать индикатор работы программы, и хотелось как-нибудь с помощью кнопки "Stop" в GUI окне останавливать скрипт при его срабатывании, чтобы он не воспроизводил сигнал бесконечно до решения проблемы с программой. Пытался внутри цикла прописать Case $Button1 Break то тогда он работает не на цикл а на Case. При ExitLoop он же перестанет работать как цикл (при компиляции доходя до ExitLoop)
 

IMStrelcov

CTPEJIbLLOB
Сообщения
253
Репутация
64
Код:
#include <GUIConstants.au3>

$iSignal = False

#Region ### S
$Form3 = GUICreate("Signalization", 278, 95, 434, 275)
GUISetBkColor(0xB9D1EA)
$Button1 = GUICtrlCreateButton("Stop", 8, 40, 113, 41, $BS_DEFPUSHBUTTON)
GUICtrlSetBkColor(-1, 0xFF0000)
$Button2 = GUICtrlCreateButton("Start", 144, 40, 113, 41, $BS_DEFPUSHBUTTON)
GUICtrlSetBkColor(-1, 0x00FF00)
GUISetState(@SW_SHOW)
#EndRegion ###

$Color = 0x00FF00

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $Button2
            $iSignal = True
        Case $Button1
            $iSignal = False
        Case Else
            If (PixelGetColor (1072 , 110) <> $Color) And ($iSignal = True) Then
                SoundPlay ('C:\Users\User\Desktop\02070.mp3' , 1)
            EndIf
    EndSwitch
Wend
 
Автор
D

DmitryT

Новичок
Сообщения
8
Репутация
0
Код:
#include <GUIConstants.au3>

$iSignal = False

#Region ### S
$Form3 = GUICreate("Signalization", 278, 95, 434, 275)
GUISetBkColor(0xB9D1EA)
$Button1 = GUICtrlCreateButton("Stop", 8, 40, 113, 41, $BS_DEFPUSHBUTTON)
GUICtrlSetBkColor(-1, 0xFF0000)
$Button2 = GUICtrlCreateButton("Start", 144, 40, 113, 41, $BS_DEFPUSHBUTTON)
GUICtrlSetBkColor(-1, 0x00FF00)
GUISetState(@SW_SHOW)
#EndRegion ###

$Color = 0x00FF00

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $Button2
            $iSignal = True
        Case $Button1
            $iSignal = False
        Case Else
            If (PixelGetColor (1072 , 110) <> $Color) And ($iSignal = True) Then
                SoundPlay ('C:\Users\User\Desktop\02070.mp3' , 1)
            EndIf
    EndSwitch
Wend
Спасибо, помогло
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
С двумя кнопками непонятно - следит программа или нет. Вариант с одной кнопкой
Код:
#include <GUIConstants.au3>

$Form3 = GUICreate("Signalization", 278, 95, 434, 275)
GUISetBkColor(0xB9D1EA)
$Button = GUICtrlCreateButton("Start", 8, 40, 257, 41)
GUICtrlSetBkColor(-1, 0x00FF00)
GUICtrlSetFont(-1, 20, 700)
GUISetState(@SW_SHOW)
$Start = False

$Color = 0x00FF00

While 1
  $nMsg = GUIGetMsg()
  Switch $nMsg
    Case $GUI_EVENT_CLOSE
      Exit
    Case $Button
      $Start = Not $Start
      If $Start Then
        GUICtrlSetData($Button, "Stop")
        GUICtrlSetBkColor($Button, 0xFF0000)
      Else
        GUICtrlSetData($Button, "Start")
        GUICtrlSetBkColor($Button, 0x00FF00)
      EndIf
  EndSwitch
  If $Start And PixelGetColor(1072, 110) <> $Color Then SoundPlay('C:\Users\User\Desktop\02070.mp3', 1)
WEnd
 

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Спасибо, помогло
У вас видимо короткие звуковые сигналы стоят. Попробуйте поставить длинную песню. Пока не попадете на окончание, не прервется. Попробуйте вот так:
Код:
#include <GUIConstants.au3>

#Region ### S
$Form3 = GUICreate("Signalization", 278, 95, 434, 275)
GUISetBkColor(0xB9D1EA)
$Button1 = GUICtrlCreateButton("Stop", 8, 40, 113, 41, $BS_DEFPUSHBUTTON)
GUICtrlSetBkColor(-1, 0xFF0000)
$Button2 = GUICtrlCreateButton("Start", 144, 40, 113, 41, $BS_DEFPUSHBUTTON)
$ColButton = GUICtrlSetBkColor(-1, 0x00FF00)
GUISetState(@SW_SHOW)
#EndRegion ###

;$Color = 0x00FF00

While 1
$nMsg = GUIGetMsg()
Local $iPid
   Switch $nMsg
   Case $GUI_EVENT_CLOSE
          If ProcessExists($iPid) Then
               ProcessClose($iPid)
          Else
             Exit
             EndIf
         ExitLoop
      Case $Button2
         GUICtrlSetBkColor(-1, 0xFF00FF)
         $iPid = Run(@AutoItExe & ' /AutoIt3ExecuteScript sound.txt')
      Case $Button1
         ProcessClose($iPid)
         $ColButton = GUICtrlSetBkColor(-1, 0x00FF00)
         ConsoleWrite('Завершение' & @CR)
   EndSwitch
Wend

И в текстовом файле вот так:
Код:
$Color = 0x00FF00

    While 1
         If PixelGetColor (1072 , 110) <> $Color Then
         SoundPlay ('C:\Users\User\Desktop\длинная песня.mp3' , 1)
         EndIf
    Wend
 
Последнее редактирование:
Верх