Что нового

Автоматизация Баг

rem24

Новичок
Сообщения
15
Репутация
0
Всем добрый вечер. Есть прога которая ищет определённый цвет в указанной области. Но (я так понимаю) она начинает поиск сразу после запуска, а не после нажатия кнопки "Ок" в связи с этим во время ввода координат и цвета начинаются ложные срабатывания. помогите поправить, что не так?

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

OnAutoItExitRegister('CoordSave')

Local $Button_1, $sSettings = @ScriptDir & '\setting.ini'

$hGUI = GUICreate("PixelSearch", 200, 300)

GUICtrlCreateLabel('                Left', 10, 10, 180, 20)
$hLeft = GUICtrlCreateInput(IniRead($sSettings, 'main', 'left', ''), 10, 30, 180, 20)

GUICtrlCreateLabel('        Top', 10, 60, 180, 20)
$hTop = GUICtrlCreateInput(IniRead($sSettings, 'main', 'top', ''), 10, 80, 180, 20)

GUICtrlCreateLabel('        Right', 10, 110, 180, 20)
$hRight = GUICtrlCreateInput(IniRead($sSettings, 'main', 'right', ''), 10, 130, 180, 20)

GUICtrlCreateLabel('        Bottom', 10, 160, 180, 20)
$hBottom = GUICtrlCreateInput(IniRead($sSettings, 'main', 'bottom', ''), 10, 180, 180, 20)

GUICtrlCreateLabel('        Color', 10, 210, 180, 20)
$hColor = GUICtrlCreateInput(IniRead($sSettings, 'main', 'color', ''), 10, 230, 180, 20)


GUISetState(@SW_SHOW, $hGUI)

$Button_1 = GUICtrlCreateButton("Ок", 40, 260, 120)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
             ExitLoop
          Case $Button_1
              GUISetState(@SW_MINIMIZE)
    EndSwitch
Pixel_Search()
WEnd



Func Pixel_Search()
PixelSearch(GUICtrlRead($hLeft), GUICtrlRead($hTop), GUICtrlRead($hRight), GUICtrlRead($hBottom), GUICtrlRead($hColor), 1, 5) ; координаты области, цвет, допущение оттенка, шаг поиска
If Not @error Then
SoundSetWaveVolume(100) ; устанавливает громкость
SoundPlay(@WindowsDir & "\media\tada.wav", 1)

MsgBox(16 + 262144, "Сообщение", "Ошибка записи!", 1) ; Действие
EndIf
Sleep(100)
EndFunc

Func CoordSave()
IniWrite($sSettings, 'main', 'left', GUICtrlRead($hLeft))
IniWrite($sSettings, 'main', 'top', GUICtrlRead($hTop))
IniWrite($sSettings, 'main', 'right', GUICtrlRead($hRight))
IniWrite($sSettings, 'main', 'bottom', GUICtrlRead($hBottom))
IniWrite($sSettings, 'main', 'color', GUICtrlRead($hColor))
EndFunc
 

Webarion

Осваивающий
Сообщения
143
Репутация
24
Старайтесь придумывать, более смысловое название темы!
Ваше обращение к функции Pixel_Search() находится сразу в цикле While-WEnd и вне обработки события кнопки. Проще всего обращаться к ней по таймеру:
Код:
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $Button_1
            GUISetState(@SW_MINIMIZE)
            AdlibRegister('Pixel_Search', 10)
    EndSwitch
WEnd
 
Последнее редактирование:

IMStrelcov

CTPEJIbLLOB
Сообщения
253
Репутация
64
Если все же нужно в цикле то вот так можно, при клике на кнопке - запускается поиск/мониторинг пикселя и на кнопке меняется текст, при повторном нажатии поиск/мониторинг пикселя прекращается и кнопке возвращается прежний текст.
Код:
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>

OnAutoItExitRegister('CoordSave')

Global $Button_1, $iSearch, $sSettings = @ScriptDir & '\setting.ini'

$hGUI = GUICreate("PixelSearch", 200, 300)

GUICtrlCreateLabel('                Left', 10, 10, 180, 20)
$hLeft = GUICtrlCreateInput(IniRead($sSettings, 'main', 'left', ''), 10, 30, 180, 20)

GUICtrlCreateLabel('        Top', 10, 60, 180, 20)
$hTop = GUICtrlCreateInput(IniRead($sSettings, 'main', 'top', ''), 10, 80, 180, 20)

GUICtrlCreateLabel('        Right', 10, 110, 180, 20)
$hRight = GUICtrlCreateInput(IniRead($sSettings, 'main', 'right', ''), 10, 130, 180, 20)

GUICtrlCreateLabel('        Bottom', 10, 160, 180, 20)
$hBottom = GUICtrlCreateInput(IniRead($sSettings, 'main', 'bottom', ''), 10, 180, 180, 20)

GUICtrlCreateLabel('        Color', 10, 210, 180, 20)
$hColor = GUICtrlCreateInput(IniRead($sSettings, 'main', 'color', ''), 10, 230, 180, 20)

GUISetState(@SW_SHOW, $hGUI)

$Button_1 = GUICtrlCreateButton("Ок", 40, 260, 120)

While 1
   Switch GUIGetMsg()
      Case $GUI_EVENT_CLOSE
         ExitLoop
      Case $Button_1
         $iSearch = (Not $iSearch)
         GUICtrlSetData($Button_1, $iSearch ? 'Stop' : 'Ok')
         GUISetState(@SW_MINIMIZE)
      Case Else
         If $iSearch Then Pixel_Search()
    EndSwitch
WEnd

Func Pixel_Search()
   PixelSearch(GUICtrlRead($hLeft), GUICtrlRead($hTop), GUICtrlRead($hRight), GUICtrlRead($hBottom), GUICtrlRead($hColor), 1, 5) ; координаты области, цвет, допущение оттенка, шаг поиска
   If Not @error Then
      SoundSetWaveVolume(100) ; устанавливает громкость
      SoundPlay(@WindowsDir & "\media\tada.wav", 1)
      MsgBox(16 + 262144, "Сообщение", "Ошибка записи!", 1) ; Действие
   EndIf
EndFunc

Func CoordSave()
   IniWrite($sSettings, 'main', 'left', GUICtrlRead($hLeft))
   IniWrite($sSettings, 'main', 'top', GUICtrlRead($hTop))
   IniWrite($sSettings, 'main', 'right', GUICtrlRead($hRight))
   IniWrite($sSettings, 'main', 'bottom', GUICtrlRead($hBottom))
   IniWrite($sSettings, 'main', 'color', GUICtrlRead($hColor))
EndFunc
 
Верх