Что нового

[Окна, Диалоги] Как в трее сделать активные кнопки и одновременно чтоб работал другой процесс

Primusx

Новичок
Сообщения
9
Репутация
0
Как в трее сделать активные кнопки и одновременно чтоб работал другой процесс?

Смысл такой у меня есть процесс (синхронизация двух каталогов) который повторяется через N промежуток времени (через 5 минут как пример), а мне нужно чтоб одновременно с ним еще можно было сделать меню в трее и чтоб кнопки были рабочие добавить кнопку Выход и добавить кнопку которая выводит форму.
Как этого можно добиться? И возможно ли это.
В скрипте 2 функции 1 ожидание 5 минут и вывод в трее счетчика до конца ожидания 2й сам процесс синхронизации. Пробовал добавить Select или Switch не работает(
 

Dimmak

Знающий
Сообщения
185
Репутация
9
Как вариант:
Ваш скрипт работает на тайминге Slep( 100 ), к примеру.
Код:
$time_loop= 10*60*5 ; 5 минут
$count=0
While 1
  $count+= 1
If $count> $time_loop Then
  Run(@AutoItExe & " " & $sFile_au3) ; Запуск 5мин скрипта или функции
EndIf
  Sleep(100)
WEnd

Вместо If можно использовать select/switch для управления нужным количеством скриптов.
Те каждые две минуты - запускать один скрипт, каждые 5ть другой и тд.
 
Автор
P

Primusx

Новичок
Сообщения
9
Репутация
0
НЕ понял вашего ответа... Я только начал изучать автоит ну к примеру вот такой у меня код программы:
(точно код не помню так как он на работе но как то смысл такой)


Код:
sinhronizasia() 

Func prostoi() 
   
   ;Opt("TrayMenuMode", 1 + 2) ; Не отображать в трее пункты меню по умолчанию (Script Paused/Exit) и не отмечать галочками при выборе.

$iSettings = TrayCreateMenu("Настройки") ; Создаёт меню трея и подменю с двумя пунктами.

$iExit = TrayCreateItem("Выход")

TraySetState(1) ; Показывает меню трея

   
   $TAIM = 300
   FOR $i = 1 TO $TAIM
	  $TAIMz = $TAIM-$i
   TraySetState ( "Время до запуска синхронизации"&$TAIMz )
   sleep (1000)
Next
sinhronizasia()
EndFunc

Func sinhronizasia() 
   FILECOPY ("C:\1","C:\2")
   prostoi()
EndFunc


Кнопки появились но они не работают. Как их сделать активными но при этом чтоб не нарушить основную работу программы.
Можно даже и остановить таймер на время запуска кнопки.
Например создать кнопку после нажатия которой запустится синхронизация папок миную ожидания простоя.
Или например при нажатии кнопки открывалось меню (настроек программы) и пусть даже таймер простоя после закрытия программы обновится или обнулится.
Я не пойму куда мне и что надо написать чтоб оживить кнопочки...
 

MaximK

Знающий
Сообщения
33
Репутация
5
Скорее всего тебе поможет функция
Код:
TrayItemSetOnEvent
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Primusx
Я не пойму... Вы "кнопками" пункты меню называете, что ли?
Код:
#include <TrayConstants.au3>

Opt("TrayMenuMode", 1 + 2)
AdlibRegister("Timer", 1000)

$Restart = 5 ; время автоматического перезапуска в минутах
$Start = TimerInit() ; запуск таймера перезапуска

$Set  = TrayCreateItem("Настройки")
$Sync = TrayCreateItem("Синхронизация") ; запуск вручную
TrayCreateItem("")
$Exit = TrayCreateItem("Выход")
TraySetState()

Do
  Switch TrayGetMsg()
    Case $Exit
      Exit
    Case $Set
      ShowGui() ; вызов настроек
    Case $Sync
      Synchronization() ; запуск синхронизации вручную
  EndSwitch
Until 0

Func ShowGui()
  GUICreate("Настройки")
  GUISetState()
  Do
    Switch TrayGetMsg() ; обработка событий трея
      Case $Exit
        Exit
      Case $Sync
        Synchronization()
    EndSwitch
    Switch GUIGetMsg() ; обработка событий окна
      Case -3
        ExitLoop
    EndSwitch
  Until 0
  GUIDelete()
EndFunc

Func Synchronization()
  TrayTip("", "Запущена синхронизация. Ждите", 0)
  Sleep(3000)
  TrayTip("", "", 0)
  TrayTip("", "Синхронизация завершена", 0)
  $Start = TimerInit() ; перезапуск таймера
EndFunc

Func Timer()
  If TimerDiff($Start) >= $Restart * 60000 Then
    Synchronization() ; автоматический запуск синхронизации
  Else
    TraySetToolTip("До синхронизации: " & Round($Restart * 60 - TimerDiff($Start) / 1000) & " сек")
  EndIf
EndFunc
 
Верх