Что нового

Сворачивание окна в область уведомлений

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Простой способ сворачивания окна в область уведомлений (Tray).


Код:
#NoTrayIcon

#Include <Constants.au3>
#Include <GUIConstantsEx.au3>

Opt('TrayMenuMode', 1)

$TrayRestoreItem = TrayCreateItem('Restore')
TrayItemSetState(-1, $TRAY_DEFAULT)
TrayCreateItem('')
$TrayExitItem = TrayCreateItem('Exit')
TraySetClick(8)

$Form = GUICreate('My GUI')
GUISetState()

While 1
	$TrayMsg = TrayGetMsg()
	Switch $TrayMsg
		Case $TrayRestoreItem
			GUISetState(@SW_SHOW, $Form)
			GUISetState(@SW_RESTORE, $Form)
			TraySetState(2)
		Case $TrayExitItem
			ExitLoop
	EndSwitch
	$GUIMsg = GUIGetMsg()
	Switch $GUIMsg
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $GUI_EVENT_MINIMIZE
			GUISetState(@SW_HIDE, $Form)
			TraySetState(1)
	EndSwitch
WEnd
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Этот пример немного зависает при восстановлении с трея (кнопка на панели задач не сразу появляется). А всё из за того, что не учитывает золотое правило касающиеся созданию и активации окон: Сохранять обратный порядок (создания, активации, минимизирования, и т.п.) :smile:

Вот вариация на этот пример:

Код:
#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <Constants.au3>
;

Opt("TrayMenuMode", 1)
Opt("TrayOnEventMode", 1)

$hGUI = GUICreate("Minimize to Tray Example", 300, 200)

$RestoreItem = TrayCreateItem("Restore")
TrayItemSetOnEvent(-1, "_RestoreFromTray_Proc")

TraySetOnEvent($TRAY_EVENT_PRIMARYUP, "_RestoreFromTray_Proc")
TraySetClick(16)

GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $GUI_EVENT_MINIMIZE
			GUISetState(@SW_HIDE)
			TraySetState(1)
	EndSwitch
WEnd

Func _RestoreFromTray_Proc()
    If BitAND(WinGetState($hGUI), 2) = 2 Then Return
	
	TraySetState(2)
	GUISetState(@SW_SHOW)
	GUISetState(@SW_RESTORE)
EndFunc
 
Верх