#Region Имитируем программу изменяющую цвета. Этот регион можно поместить в отдельный скрипт
#include <WindowsConstants.au3>
Local $iControlsGen = 6
Local $iFormW = (75 * $iControlsGen) + 5
Local $hForm = GUICreate("ColorGenerator", $iFormW, 80, @DesktopWidth - $iFormW - 50, 50, -1, $WS_EX_TOPMOST)
For $i = 1 To $iControlsGen
Local $iLB = GUICtrlCreateLabel(' Control' & $i, 5 + (($i - 1) * 75), 5, 70, 70)
GUICtrlSetBkColor(-1, 0x00FF00)
Assign('iLabel' & $i, $iLB)
Next
GUISetState(@SW_SHOW)
AdlibRegister('_GenerateColor', 500)
Func _GenerateColor()
Local $iRnd = Random(0, 100, 1)
Local $iColor = $iRnd > 90 ? 0xFF0000 : 0x00FF00
Local $iRndLabel = Random(1, $iControlsGen, 1)
Execute('GUICtrlSetBkColor($iLabel' & $iRndLabel & ', $iColor)')
EndFunc
#EndRegion Имитируем программу изменяющую цвета. Этот регион можно поместить в отдельный скрипт
#Region Скрипт Сигнализатора
#include <GuiConstants.au3>
AutoItSetOption("PixelCoordMode", 2)
Global $iControls = 6
Global $iWarningHideTime = 2000
Global $iColorWarning = 0xFF0000
Global $sAudioPath = @WindowsDir & "\media\tada.wav"
Global $aPosCtrl1 = [5, 5, 70, 70]
Global $aPosCtrl2 = [80, 5, 70, 70]
Global $aPosCtrl3 = [155, 5, 70, 70]
Global $aPosCtrl4 = [230, 5, 70, 70]
Global $aPosCtrl5 = [305, 5, 70, 70]
Global $aPosCtrl6 = [380, 5, 70, 70]
Global $hThisForm = GUICreate("ColorWarning", 200, 200, -1, -1, -1, $WS_EX_TOPMOST)
For $i = 1 To $iControls
Local $iLB = GUICtrlCreateLabel('' & $i, 2, 2 + (($i - 1) * 27), 196, 25, $SS_CENTERIMAGE)
GUICtrlSetFont(-1, 12, 700, 0)
Assign('iThisLabel' & String($i), $iLB, 2)
Next
GUISetState(@SW_HIDE, $hThisForm)
Global $hFormColorGen = WinGetHandle("ColorGenerator")
Global $iTrigAudio = 0, $iTimer = 0
AdlibRegister('IsWarning', 50)
While 1
If GUIGetMsg() = $GUI_EVENT_CLOSE Then Exit
Sleep(10)
WEnd
Func IsWarning()
Local $iColors = 0
For $i = 1 To $iControls
If GUIGetMsg() = $GUI_EVENT_CLOSE Then Exit
If IsHWnd($hFormColorGen) Then
Local $aPos = Eval('aPosCtrl' & $i)
If UBound($aPos) = 4 Then
Local $aIsPixels = PixelSearch($aPos[0], $aPos[1], $aPos[0] + $aPos[2], $aPos[1] + $aPos[3], $iColorWarning, 0, 1, $hFormColorGen)
Local $iCtrl = Eval('iThisLabel' & $i)
If UBound($aIsPixels) Then
GUICtrlSetData($iCtrl, ' Control' & $i & ' - Внимание')
GUICtrlSetBkColor($iCtrl, 0xFF0000)
$iColors += 1
Else
GUICtrlSetData($iCtrl, ' Control' & $i & ' - Норма')
GUICtrlSetBkColor($iCtrl, 0x00FF00)
EndIf
EndIf
EndIf
Sleep(20)
Next
If $iColors Then
Local $iState = WinGetState($hThisForm)
If BitAND($iState, 16) Then GUISetState(@SW_RESTORE, $hThisForm)
If Not $iTrigAudio Then
_Audio()
$iTrigAudio = 1
$iTimer = 0
AdlibUnRegister('_HideForm')
EndIf
If Not BitAND($iState, 2) Then GUISetState(@SW_SHOW, $hThisForm)
Else
$iTrigAudio = 0
_TimerHide()
EndIf
EndFunc
Func _TimerHide()
If Not $iTimer And $iWarningHideTime Then
$iTimer = 1
AdlibRegister('_HideForm', $iWarningHideTime)
EndIf
EndFunc
Func _HideForm()
AdlibUnRegister('_HideForm')
GUISetState(@SW_HIDE, $hThisForm)
EndFunc
Func _Audio()
If FileExists($sAudioPath) Then
SoundPlay($sAudioPath)
Else
ConsoleWrite('! Not audio file: ' & $sAudioPath & @CRLF)
EndIf
EndFunc
#EndRegion Скрипт Сигнализатора