#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#region ### START Koda GUI section
$Form1 = GUICreate("Имя формы", 216, 176, 496, 203)
$Label1 = GUICtrlCreateLabel("Маршруты:", 8, 8, 69, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Combo1 = GUICtrlCreateCombo("", 8, 32, 193, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
$Label2 = GUICtrlCreateLabel("", 8, 56, 193, 34)
$Label3 = GUICtrlCreateLabel("Графики:", 8, 104, 59, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Checkbox1 = GUICtrlCreateCheckbox("Следующий", 72, 104, 137, 17)
$Label4 = GUICtrlCreateLabel("", 8, 128, 196, 34)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
#include <GuiComboBox.au3>
Global $sTitleWait = "Выбор графика и смены"
;~ Global $sControlCheck = "[CLASS:ComboBox; INSTANCE:1]"
;~ Global $sControlCheck2 = "[CLASS:ComboBox; INSTANCE:2]"
Global $sControlCheck = "[CLASS:TComboBox; INSTANCE:3]"
Global $sControlCheck2 = "[CLASS:TComboBox; INSTANCE:2]"
Global $hWnd, $hLW, $hTCombo, $hTcombo2, $hCombo1 = GUICtrlGetHandle($Combo1)
Global $sFileConfig = "Config.ini"
Global $iLastRouteIndex
Global $bSetCombo1 = False, $bNewData = False, $bSet = False, $bReRead = False
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
;~ GUIRegisterMsg(0x0006 , "WM_ACTIVATE")
OnAutoItExitRegister("_SaveConfig") ;Закоментируй, если при старте скрипта он принимал текущее значение комбобокса
_ReadConfig() ;Закоментируй, если при старте скрипта он принимал текущее значение комбобокса
;~ GUICtrlSetData($Label2,"Ждем окно "&$sTitleWait)
Local $nMsg, $aList, $bLabel = False
Global $iNextSchedule, $bCheck = False, $bNext = False
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Checkbox1
;~ ConsoleWrite(GUICtrlRead($Checkbox1) & @LF) ;1 Установлен, 4 снят
If GUICtrlRead($Checkbox1) = 1 Then
$bCheck = True
GUICtrlSetData($Label4, "Грaфик отслеживается")
_NextShedule()
Else
$bCheck = False
$bNext = False
GUICtrlSetData($Label4, "Грфик не отслеживается")
$iNexSchedule = 0
EndIf
EndSwitch
If Not WinExists($sTitleWait) Then
;Окна нет, ждем
If Not $bLabel Then ;Костыль на немерцание
$bLabel = True
GUICtrlSetData($Label2, "Нет окна" & @CR & "Ждем окно " & $sTitleWait)
EndIf
$hWnd = 0
ContinueLoop
ElseIf Not $hWnd Then
;Окно есть, но требуется опознание
$hWnd = WinGetHandle($sTitleWait)
If _IsNewWin($hWnd) Then $bSet = True ;Новое окно
EndIf
If Not $bSetCombo1 Then
WinWait($hWnd)
$hTCombo = ControlGetHandle($hWnd, '', $sControlCheck)
$aList = _GUICtrlComboBox_GetListArray($hTCombo)
_GUICtrlComboBox_BeginUpdate($hTCombo)
_GUICtrlComboBox_ResetContent($hCombo1)
For $i = 1 To $aList[0]
_GUICtrlComboBox_AddString($hCombo1, $aList[$i])
Next
_GUICtrlComboBox_EndUpdate($hTCombo)
$bSetCombo1 = True
If $iLastRouteIndex Then ;$iLastRouteIndex нашли в конфиге
_SetCombo1()
_SetCombo2()
ContinueLoop
Else
_SetCombo3()
ContinueLoop
EndIf
EndIf
If $bSet Then ;Новое окно - "заморозка"
$bSet = False
_SetCombo2()
_NextShedule()
ContinueLoop
EndIf
If $bNewData Then ;Изменили свое комбо
$bNewData = False
_SetCombo1()
_SetCombo2()
ContinueLoop
EndIf
If $bReRead Then ;Активировали свое окно, проверяем изменились ли кобмо
Local $iIndex = _GUICtrlComboBox_GetCurSel($hTCombo)
If $iIndex <> $iLastRouteIndex Then
$iLastRouteIndex = $iIndex
$bNewData = True
EndIf
$bReRead = False
EndIf
WEnd
Func _NextShedule()
If $bCheck Then
If $bNext Then
_GUICtrlComboBox_SetCurSel($hTcombo2, $iNextSchedule)
EndIf
$iNextSchedule = _GUICtrlComboBox_GetCurSel($hTcombo2)
$iNextSchedule += 1
$bNext = True
$sText = ""
_GUICtrlComboBox_GetLBText($hTcombo2, $iNextSchedule, $sText)
If $sText Then
GUICtrlSetData($Label4, "Следующий график: " & $sText)
Else
GUICtrlSetData($Label4, "Следующий график: 1-ый в списке")
$iNextSchedule = 0
EndIf
EndIf
EndFunc ;==>_NextShedule
Func _IsNewWin($hW)
If $hW = $hLW Then Return 0
$hLW = $hW
WinWait($hW)
$hTCombo = ControlGetHandle($hWnd, '', $sControlCheck)
$hTcombo2 = ControlGetHandle($hWnd, '', $sControlCheck2)
$bLabel = False
GUICtrlSetData($Label2, "Новое окно")
Return 1
EndFunc ;==>_IsNewWin
Func _SetCombo1() ;Устанавливаем себе
_GUICtrlComboBox_SetCurSel($hCombo1, $iLastRouteIndex)
EndFunc ;==>_SetCombo1
Func _SetCombo2() ;Устанавливаем окну
_GUICtrlComboBox_SetCurSel($hTCombo, $iLastRouteIndex)
EndFunc ;==>_SetCombo2
Func _SetCombo3() ;Устанавливаем себе такой же как и у окна
$iLastRouteIndex = _GUICtrlComboBox_GetCurSel($hTCombo)
_SetCombo1()
EndFunc ;==>_SetCombo3
Func WM_ACTIVATE($hWnd, $Msg, $wParam, $lParam) ;Сообщение об активации окна
Local $nNotifyCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0x0000FFFF)
If $nID Then $bReRead = True
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_ACTIVATE
Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam) ;Сообщение об изменении комбо
Local $nNotifyCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0x0000FFFF)
Local $hCtrl = $lParam
Switch $nNotifyCode
Case 9
Switch $hCtrl
Case $hCombo1
$iLastRouteIndex = _GUICtrlComboBox_GetCurSel($hCombo1)
$bNewData = True
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Func _ReadConfig()
If Not FileExists($sFileConfig) Then Return 0
$iLastRouteIndex = IniRead($sFileConfig, "config", "lastrouteindex", 0)
EndFunc ;==>_ReadConfig
Func _SaveConfig()
If Not FileExists($sFileConfig) Then FileClose(FileOpen($sFileConfig, 8))
IniWrite($sFileConfig, "config", "lastrouteindex", $iLastRouteIndex)
EndFunc ;==>_SaveConfig