Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Отмена паузы при вызове меню из трея (http://forum.oszone.net/showthread.php?t=235810)

OSArev 02-06-2012 13:15 1926645

Отмена паузы при вызове меню из трея
 
Доброго времени!
Вот заготовка скрипта:
Код:

#Include <WinAPIEx.au3>
#include <GUIConstants.au3>

_WinAPI_EmptyWorkingSet(@AutoItPID)

Opt('MustDeclareVars', 1)

Global $hGui, $Lab1, $Lab2, $exit, $length_hGui, $day, $mon, $nMsg

TraySetClick(16)

;Opt('TrayAutoPause', 1)
Opt('TrayAutoPause', 0)
Opt("TrayMenuMode",1+2)
Opt("TrayOnEventMode", 1)

$exit = TrayCreateItem("Выход")
TrayItemSetOnEvent(-1, "_TrayEvent")

$hGui = GUICreate("Системное время", _Comparison_of_dates(), 23, -1, -1, $WS_POPUP, $WS_EX_TOOLWINDOW)
$Lab1 = GUICtrlCreateLabel(_today()&", "&_month(), 110, 00, 320, 25, -1, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetFont(-1, 15, 200, 1, 'Tahoma')
$Lab2 = GUICtrlCreateLabel("", 05, 00, 105, 25, -1, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetFont(-1, 15, 800, 1, 'Tahoma')

WinSetOnTop($hGui, "", 1)
GUISetState(@SW_SHOW, $hGui)

While 1
  $nMsg = GUIGetMsg()

  Local $systime = @HOUR&":"&@MIN&":"&@SEC

  If GUICtrlRead($Lab2) <> $systime Then GUICtrlSetData ( $Lab2,$systime)
Wend

Func _TrayEvent()
    Switch @TRAY_ID

        Case $exit
            _Exit()

    EndSwitch
EndFunc

Func _Comparison_of_dates()
;январь
  If _today()&", "&_month() = "воскресенье, " &@MDAY&" "&"января"&" "&@YEAR&"г." Then $length_hGui = "395"
  If _today()&", "&_month() = "понедельник, " &@MDAY&" "&"января"&" "&@YEAR&"г." Then $length_hGui = "400"
  If _today()&", "&_month() = "вторник, " &@MDAY&" "&"января"&" "&@YEAR&"г." Then $length_hGui = "355"
  If _today()&", "&_month() = "среда, " &@MDAY&" "&"января"&" "&@YEAR&"г." Then $length_hGui = "335"
  If _today()&", "&_month() = "четверг, " &@MDAY&" "&"января"&" "&@YEAR&"г." Then $length_hGui = "355"
  If _today()&", "&_month() = "пятница, " &@MDAY&" "&"января"&" "&@YEAR&"г." Then $length_hGui = "355"
  If _today()&", "&_month() = "суббота, " &@MDAY&" "&"января"&" "&@YEAR&"г." Then $length_hGui = "355"
;-----------------
;февраль
  If _today()&", "&_month() = "воскресенье, " &@MDAY&" "&"февраля"&" "&@YEAR&"г." Then $length_hGui = "400"
  If _today()&", "&_month() = "понедельник, " &@MDAY&" "&"февраля"&" "&@YEAR&"г." Then $length_hGui = "415"
  If _today()&", "&_month() = "вторник, " &@MDAY&" "&"февраля"&" "&@YEAR&"г." Then $length_hGui = "370"
  If _today()&", "&_month() = "среда, " &@MDAY&" "&"февраля"&" "&@YEAR&"г." Then $length_hGui = "350"
  If _today()&", "&_month() = "четверг, " &@MDAY&" "&"февраля"&" "&@YEAR&"г." Then $length_hGui = "370"
  If _today()&", "&_month() = "пятница, " &@MDAY&" "&"февраля"&" "&@YEAR&"г." Then $length_hGui = "375"
  If _today()&", "&_month() = "суббота, " &@MDAY&" "&"февраля"&" "&@YEAR&"г." Then $length_hGui = "370"
;------------------
;март
  If _today()&", "&_month() = "воскресенье, " &@MDAY&" "&"марта"&" "&@YEAR&"г." Then $length_hGui = "390"
  If _today()&", "&_month() = "понедельник, " &@MDAY&" "&"марта"&" "&@YEAR&"г." Then $length_hGui = "390"
  If _today()&", "&_month() = "вторник, " &@MDAY&" "&"марта"&" "&@YEAR&"г." Then $length_hGui = "345"
  If _today()&", "&_month() = "среда, " &@MDAY&" "&"марта"&" "&@YEAR&"г." Then $length_hGui = "325"
  If _today()&", "&_month() = "четверг, " &@MDAY&" "&"марта"&" "&@YEAR&"г." Then $length_hGui = "345"
  If _today()&", "&_month() = "пятница, " &@MDAY&" "&"марта"&" "&@YEAR&"г." Then $length_hGui = "350"
  If _today()&", "&_month() = "суббота, " &@MDAY&" "&"марта"&" "&@YEAR&"г." Then $length_hGui = "345"
;----------------
;апрель
  If _today()&", "&_month() = "воскресенье, " &@MDAY&" "&"апреля"&" "&@YEAR&"г." Then $length_hGui = "400"
  If _today()&", "&_month() = "понедельник, " &@MDAY&" "&"апреля"&" "&@YEAR&"г." Then $length_hGui = "405"
  If _today()&", "&_month() = "вторник, " &@MDAY&" "&"апреля"&" "&@YEAR&"г." Then $length_hGui = "360"
  If _today()&", "&_month() = "среда, " &@MDAY&" "&"апреля"&" "&@YEAR&"г." Then $length_hGui = "340"
  If _today()&", "&_month() = "четверг, " &@MDAY&" "&"апреля"&" "&@YEAR&"г." Then $length_hGui = "355"
  If _today()&", "&_month() = "пятница, " &@MDAY&" "&"апреля"&" "&@YEAR&"г." Then $length_hGui = "360"
  If _today()&", "&_month() = "суббота, " &@MDAY&" "&"апреля"&" "&@YEAR&"г." Then $length_hGui = "355"
;--------
;май
  If _today()&", "&_month() = "воскресенье, " &@MDAY&" "&"мая"&" "&@YEAR&"г." Then $length_hGui = "370"
  If _today()&", "&_month() = "понедельник, " &@MDAY&" "&"мая"&" "&@YEAR&"г." Then $length_hGui = "375"
  If _today()&", "&_month() = "вторник, " &@MDAY&" "&"мая"&" "&@YEAR&"г." Then $length_hGui = "325"
  If _today()&", "&_month() = "среда, " &@MDAY&" "&"мая"&" "&@YEAR&"г." Then $length_hGui = "305"
  If _today()&", "&_month() = "четверг, " &@MDAY&" "&"мая"&" "&@YEAR&"г." Then $length_hGui = "325"
  If _today()&", "&_month() = "пятница, " &@MDAY&" "&"мая"&" "&@YEAR&"г." Then $length_hGui = "330"
  If _today()&", "&_month() = "суббота, " &@MDAY&" "&"мая"&" "&@YEAR&"г." Then $length_hGui = "325"
;--------------------------
;июнь
  If _today()&", "&_month() = "воскресенье, " &@MDAY&" "&"июня"&" "&@YEAR&"г." Then $length_hGui = "380"
  If _today()&", "&_month() = "понедельник, " &@MDAY&" "&"июня"&" "&@YEAR&"г." Then $length_hGui = "385"
  If _today()&", "&_month() = "вторник, " &@MDAY&" "&"июня"&" "&@YEAR&"г." Then $length_hGui = "340"
  If _today()&", "&_month() = "среда, " &@MDAY&" "&"июня"&" "&@YEAR&"г." Then $length_hGui = "320"
  If _today()&", "&_month() = "четверг, " &@MDAY&" "&"июня"&" "&@YEAR&"г." Then $length_hGui = "340"
  If _today()&", "&_month() = "пятница, " &@MDAY&" "&"июня"&" "&@YEAR&"г." Then $length_hGui = "340"
  If _today()&", "&_month() = "суббота, " &@MDAY&" "&"июня"&" "&@YEAR&"г." Then $length_hGui = "340"
;------------------
;июль
  If _today()&", "&_month() = "воскресенье, " &@MDAY&" "&"июля"&" "&@YEAR&"г." Then $length_hGui = "380"
  If _today()&", "&_month() = "понедельник, " &@MDAY&" "&"июля"&" "&@YEAR&"г." Then $length_hGui = "385"
  If _today()&", "&_month() = "вторник, " &@MDAY&" "&"июля"&" "&@YEAR&"г." Then $length_hGui = "340"
  If _today()&", "&_month() = "среда, " &@MDAY&" "&"июля"&" "&@YEAR&"г." Then $length_hGui = "320"
  If _today()&", "&_month() = "четверг, " &@MDAY&" "&"июля"&" "&@YEAR&"г." Then $length_hGui = "340"
  If _today()&", "&_month() = "пятница, " &@MDAY&" "&"июля"&" "&@YEAR&"г." Then $length_hGui = "340"
  If _today()&", "&_month() = "суббота, " &@MDAY&" "&"июля"&" "&@YEAR&"г." Then $length_hGui = "340"
;-----------------------
;август
  If _today()&", "&_month() = "воскресенье, " &@MDAY&" "&"августа"&" "&@YEAR&"г." Then $length_hGui = "400"
  If _today()&", "&_month() = "понедельник, " &@MDAY&" "&"августа"&" "&@YEAR&"г." Then $length_hGui = "405"
  If _today()&", "&_month() = "вторник, " &@MDAY&" "&"августа"&" "&@YEAR&"г." Then $length_hGui = "360"
  If _today()&", "&_month() = "среда, " &@MDAY&" "&"августа"&" "&@YEAR&"г." Then $length_hGui = "340"
  If _today()&", "&_month() = "четверг, " &@MDAY&" "&"августа"&" "&@YEAR&"г." Then $length_hGui = "360"
  If _today()&", "&_month() = "пятница, " &@MDAY&" "&"августа"&" "&@YEAR&"г." Then $length_hGui = "365"
  If _today()&", "&_month() = "суббота, " &@MDAY&" "&"августа"&" "&@YEAR&"г." Then $length_hGui = "360"
;----------
;сентябрь
  If _today()&", "&_month() = "воскресенье, " &@MDAY&" "&"сентября"&" "&@YEAR&"г." Then $length_hGui = "410"
  If _today()&", "&_month() = "понедельник, " &@MDAY&" "&"сентября"&" "&@YEAR&"г." Then $length_hGui = "420"
  If _today()&", "&_month() = "вторник, " &@MDAY&" "&"сентября"&" "&@YEAR&"г." Then $length_hGui = "375"
  If _today()&", "&_month() = "среда, " &@MDAY&" "&"сентября"&" "&@YEAR&"г." Then $length_hGui = "355"
  If _today()&", "&_month() = "четверг, " &@MDAY&" "&"сентября"&" "&@YEAR&"г." Then $length_hGui = "375"
  If _today()&", "&_month() = "пятница, " &@MDAY&" "&"сентября"&" "&@YEAR&"г." Then $length_hGui = "380"
  If _today()&", "&_month() = "суббота, " &@MDAY&" "&"сентября"&" "&@YEAR&"г." Then $length_hGui = "375"
;-----------------
;октябрь
  If _today()&", "&_month() = "воскресенье, " &@MDAY&" "&"октября"&" "&@YEAR&"г." Then $length_hGui = "400"
  If _today()&", "&_month() = "понедельник, " &@MDAY&" "&"октября"&" "&@YEAR&"г." Then $length_hGui = "405"
  If _today()&", "&_month() = "вторник, " &@MDAY&" "&"октября"&" "&@YEAR&"г." Then $length_hGui = "360"
  If _today()&", "&_month() = "среда, " &@MDAY&" "&"октября"&" "&@YEAR&"г." Then $length_hGui = "340"
  If _today()&", "&_month() = "четверг, " &@MDAY&" "&"октября"&" "&@YEAR&"г." Then $length_hGui = "360"
  If _today()&", "&_month() = "пятница, " &@MDAY&" "&"октября"&" "&@YEAR&"г." Then $length_hGui = "365"
  If _today()&", "&_month() = "суббота, " &@MDAY&" "&"октября"&" "&@YEAR&"г." Then $length_hGui = "360"
;--------
;ноябрь
  If _today()&", "&_month() = "воскресенье, " &@MDAY&" "&"ноября"&" "&@YEAR&"г." Then $length_hGui = "400"
  If _today()&", "&_month() = "понедельник, " &@MDAY&" "&"ноября"&" "&@YEAR&"г." Then $length_hGui = "405"
  If _today()&", "&_month() = "вторник, " &@MDAY&" "&"ноября"&" "&@YEAR&"г." Then $length_hGui = "360"
  If _today()&", "&_month() = "среда, " &@MDAY&" "&"ноября"&" "&@YEAR&"г." Then $length_hGui = "340"
  If _today()&", "&_month() = "четверг, " &@MDAY&" "&"ноября"&" "&@YEAR&"г." Then $length_hGui = "355"
  If _today()&", "&_month() = "пятница, " &@MDAY&" "&"ноября"&" "&@YEAR&"г." Then $length_hGui = "360"
  If _today()&", "&_month() = "суббота, " &@MDAY&" "&"ноября"&" "&@YEAR&"г." Then $length_hGui = "355"
;--------------------
;декабрь
  If _today()&", "&_month() = "воскресенье, " &@MDAY&" "&"декабря"&" "&@YEAR&"г." Then $length_hGui = "410"
  If _today()&", "&_month() = "понедельник, " &@MDAY&" "&"декабря"&" "&@YEAR&"г." Then $length_hGui = "415"
  If _today()&", "&_month() = "вторник, " &@MDAY&" "&"декабря"&" "&@YEAR&"г." Then $length_hGui = "370"
  If _today()&", "&_month() = "среда, " &@MDAY&" "&"декабря"&" "&@YEAR&"г." Then $length_hGui = "350"
  If _today()&", "&_month() = "четверг, " &@MDAY&" "&"декабря"&" "&@YEAR&"г." Then $length_hGui = "370"
  If _today()&", "&_month() = "пятница, " &@MDAY&" "&"декабря"&" "&@YEAR&"г." Then $length_hGui = "370"
  If _today()&", "&_month() = "суббота, " &@MDAY&" "&"декабря"&" "&@YEAR&"г." Then $length_hGui = "370"

  Return $length_hGui
EndFunc

Func _today()
 $day=@WDAY
  If @WDAY = 1 Then $day = "воскресенье"
  If @WDAY = 2 Then $day = "понедельник"
  If @WDAY = 3 Then $day = "вторник"
  If @WDAY = 4 Then $day = "среда"
  If @WDAY = 5 Then $day = "четверг"
  If @WDAY = 6 Then $day = "пятница"
  If @WDAY = 7 Then $day = "суббота"
 return $day
EndFunc

Func _month()
 $day=@WDAY               
  If @MON = 01 Then $mon = "января"
  If @MON = 02 Then $mon = "февраля"
  If @MON = 03 Then $mon = "марта"
  If @MON = 04 Then $mon = "апреля"
  If @MON = 05 Then $mon = "мая"
  If @MON = 06 Then $mon = "июня"
  If @MON = 07 Then $mon = "июля"
  If @MON = 08 Then $mon = "августа"
  If @MON = 09 Then $mon = "сентября"
  If @MON = 10 Then $mon = "октября"
  If @MON = 11 Then $mon = "ноября"
  If @MON = 12 Then $mon = "декабря"
 return @MDAY&" "&$mon&" "&@YEAR&"г."
EndFunc

Func _Exit() 
    Exit
EndFunc

Что или как изменить (переделать), чтобы при вызове меню из системного трея часы продолжали "тикать"?
Буду рад любой помощи. Заранее благодарен...

ferget 02-06-2012 14:00 1926672

вот тут http://forum.oszone.net/thread-173724.html, можно посмотреть, одновременная работа

Creat0R 02-06-2012 19:05 1926826

Делается через Timer, и код можно значительно уменьшить:

Код:

#include <WinAPIEx.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Timers.au3>

Global $iFontSize = 15, $iFontWeight = 200, $iFontAttribs = 1, $sFontName = 'Tahoma'
Global $sDate_Str = _DateWDayToStr() & ", " & _DateMonthToStr()

_WinAPI_EmptyWorkingSet(@AutoItPID)

TraySetClick(16)

Opt("TrayAutoPause", 0)
Opt("TrayMenuMode", 1 + 2)
Opt("TrayOnEventMode", 1)

$iExit_TrayItem = TrayCreateItem("Выход")
TrayItemSetOnEvent(-1, "_TrayEvent")

$hGUI = GUICreate("Системное время", _GetDateGUIWidth($sDate_Str, $iFontSize, $iFontWeight, $iFontAttribs, $sFontName) + 110, 23, -1, -1, $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
$iLabel1 = GUICtrlCreateLabel($sDate_Str, 110, 00, 320, 25, -1, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetFont(-1, $iFontSize, $iFontWeight, $iFontAttribs, $sFontName)
$iLabel2 = GUICtrlCreateLabel(@HOUR & ":" & @MIN & ":" & @SEC, 05, 0, 105, 25, -1, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetFont(-1, $iFontSize, 800, $iFontAttribs, $sFontName)

GUISetState(@SW_SHOW, $hGUI)
$hTimer = _Timer_SetTimer($hGUI, 1000, "_SetTimeData_Proc")

While 1
    Sleep(100)
WEnd

Func _TrayEvent()
    Switch @TRAY_ID
        Case $iExit_TrayItem
            _Timer_KillTimer($hGUI, $hTimer)
            _Exit()
    EndSwitch
EndFunc

Func _SetTimeData_Proc($hWnd, $Msg, $iIDTimer, $dwTime)
    GUICtrlSetData($iLabel2, @HOUR & ":" & @MIN & ":" & @SEC)
EndFunc

Func _GetDateGUIWidth($sDate, $iSize = 8.5, $iWeight = 400, $iAttribs = 0, $sFontName = "")
    Local $hWnd, $hGUISwitch, $aCtrlSize, $aRetSize[2] = [0, 0]

    $hWnd = GUICreate($sDate, 0, 0, 0, 0, BitOR($WS_POPUP, $WS_MINIMIZE), BitOR($DS_MODALFRAME, $WS_EX_TRANSPARENT))
    $hGUISwitch = GUISwitch($hWnd)
    GUISetFont($iSize, $iWeight, $iAttribs, $sFontName, $hWnd)
    $aCtrlSize = ControlGetPos($hWnd, "", GUICtrlCreateLabel($sDate, 0, 0))
    GUIDelete($hWnd)
    GUISwitch($hGUISwitch)

    If Not IsArray($aCtrlSize) Then Return SetError(1, 0, 0)
    Return $aCtrlSize[2]
EndFunc

Func _DateWDayToStr()
    Local $aDay[7] = ["воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота"]
    Return $aDay[@WDAY-1]
EndFunc

Func _DateMonthToStr()
    Local $aMonth[12] = ["января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"]
    Return @MDAY & " " & $aMonth[@MON-1] & " " & @YEAR & "г."
EndFunc

Func _Exit()
    Exit
EndFunc


OSArev 02-06-2012 19:50 1926854

ferget, спасибо, с Вашей помощью я немного разобрался с многопоточостью, хотя признаюсь - трудновато...
Creat0R, Вам огромное спасибо за исщерпывающий ответ и особенно за конкретный пример. На примерах всегда легче разобраться в тех или иных фунукциях...

OSArev 20-06-2012 19:15 1937706

Доброго времени!
Возник ещё один вопрос. Как в предыдущем скрипте правильно организовать переход на следующие сутки.
Пытаюсь сделать добавив функцию _NewDayWatch(). Применить к label1 получилось, а дальше ступор, не получается применять новую ширину окна GUI, зависящую от новой даты:
Код:

#include <WinAPIEx.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Timers.au3>

Global $iFontSize = 15, $iFontWeight = 200, $iFontAttribs = 1, $sFontName = 'Tahoma'
Global $sDate_Str = _DateWDayToStr() & ", " & _DateMonthToStr()

_WinAPI_EmptyWorkingSet(@AutoItPID)

TraySetClick(16)

Opt("TrayAutoPause", 0)
Opt("TrayMenuMode", 1 + 2)
Opt("TrayOnEventMode", 1)

$iExit_TrayItem = TrayCreateItem("Выход")
TrayItemSetOnEvent(-1, "_TrayEvent")

$hGUI = GUICreate("Системное время", _GetDateGUIWidth($sDate_Str, $iFontSize, $iFontWeight, $iFontAttribs, $sFontName) + 110, 23, -1, -1, $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
$iLabel1 = GUICtrlCreateLabel($sDate_Str, 110, 00, 320, 25, -1, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetFont(-1, $iFontSize, $iFontWeight, $iFontAttribs, $sFontName)
$iLabel2 = GUICtrlCreateLabel(@HOUR & ":" & @MIN & ":" & @SEC, 05, 0, 105, 25, -1, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetFont(-1, $iFontSize, 800, $iFontAttribs, $sFontName)

GUISetState(@SW_SHOW, $hGUI)
$hTimer = _Timer_SetTimer($hGUI, 1000, "_SetTimeData_Proc")

While 1
  _NewDayWatch()
    Sleep(100)
WEnd

Func _TrayEvent()
    Switch @TRAY_ID
        Case $iExit_TrayItem
            _Timer_KillTimer($hGUI, $hTimer)
            _Exit()
    EndSwitch
EndFunc

Func _SetTimeData_Proc($hWnd, $Msg, $iIDTimer, $dwTime)
    GUICtrlSetData($iLabel2, @HOUR & ":" & @MIN & ":" & @SEC)
EndFunc

Func _GetDateGUIWidth($sDate, $iSize = 8.5, $iWeight = 400, $iAttribs = 0, $sFontName = "")
    Local $hWnd, $hGUISwitch, $aCtrlSize, $aRetSize[2] = [0, 0]

    $hWnd = GUICreate($sDate, 0, 0, 0, 0, BitOR($WS_POPUP, $WS_MINIMIZE), BitOR($DS_MODALFRAME, $WS_EX_TRANSPARENT))
    $hGUISwitch = GUISwitch($hWnd)
    GUISetFont($iSize, $iWeight, $iAttribs, $sFontName, $hWnd)
    $aCtrlSize = ControlGetPos($hWnd, "", GUICtrlCreateLabel($sDate, 0, 0))
    GUIDelete($hWnd)
    GUISwitch($hGUISwitch)

    If Not IsArray($aCtrlSize) Then Return SetError(1, 0, 0)
    Return $aCtrlSize[2]
EndFunc

Func _DateWDayToStr()
    Local $aDay[7] = ["воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота"]
    Return $aDay[@WDAY-1]
EndFunc

Func _DateMonthToStr()
    Local $aMonth[12] = ["января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"]
    Return @MDAY & " " & $aMonth[@MON-1] & " " & @YEAR & "г."
EndFunc

Func _NewDayWatch()
    $NextDate = _DateMonthToStr()

      While $NextDate = _DateMonthToStr()
        $NextDate = _DateMonthToStr()
        Sleep(100)
    WEnd

    GUICtrlSetData($iLabel1, _DateWDayToStr() & ", " & _DateMonthToStr())
EndFun

Func _Exit()
    Exit
EndFunc

Пока остановился на перезапуске скрипта, но хотелось бы более правильного решения.
Буду рад помощи. Заранее спасибо.


Время: 15:57.

Время: 15:57.
© OSzone.net 2001-