AutoIt/Zasobnik systemowy (Tray)
Co to jest zasobnik systemowy?
edytujZasobnik systemowy (ang. system tray) - obszar w prawej części paska zadań, w którym niektóre programy lub aplikacje systemowe (np. Data/Godzina) umieszczają swoje panele kontrolne.
AutoIt umożliwia tworzenie tego typu menu, oraz manipulowanie nim za pomocą zestawu stosownych funkcji.
Obsługa zasobnika systemowego
edytujTworzenie menu
edytujTrayCreateMenu
edytujTrayCreateMenu ( "tekst_menu" [, ID_menu [, poz_menu]] )
Funkcja tworzy menu w zasobniku systemowym. Zwraca ID menu, lub 0 gdy wystąpił błąd.
"tekst_menu" - tekst wypisywany w pozycji menu.
ID_menu - pozwala tworzyć podmenu w innym menu, wartość -1 oznacza pierwszy poziom menu.
poz_menu - pozwala zdefiniować numer pozycji do utworzenia. Pozycje są numery od 0.
UWAGA: Po użyciu tej funkcji możliwe jest utworzenie podmenu w tej pozycji menu.
TrayCreateItem
edytujTrayCreateItem ( "tekst" [, ID_menu [, poz_menu [, radio ]]] )
Funkcja tworzy pozycję menu w zasobniku systemowym. Zwraca ID pozycji menu, lub 0 gdy wystąpił błąd.
"tekst" - tekst wypisywany w pozycji menu, pusty string ("") oznacza podkreślenie w menu.
ID_menu - pozwala tworzyć podmenu w innym menu, wartość -1 (domyślna) oznacza pierwszy poziom menu.
poz_menu - pozwala zdefiniować numer pozycji do utworzenia. Pozycje są numery od 0.
radio - 0 (domyślnie) zwykła pozycja menu, 1 pozycja typu radio.
UWAGA: Po użyciu tej funkcji nie można utworzyć podmenu w tej pozycji menu.
Zdarzenia w zasobniku systemowym
edytujTrayGetMsg
edytujTrayGetMsg ( )
Funkcja zwraca kod zdarzenia jakie zaszło w zasobniku, lub 0 jeżeli nie zaszło żadne zdarzenie.
Najczęściej zwracane jest ID użytej kontrolki (pozycji menu), chyba że jest to zdarzenie specjalne (takie jak kliknięcie na ikonę w zasobniku).
Zwracane wartości:
0 - nie zaszło żadne zdarzenie ID kontrolki - wybrano pozycję menu o zwracanym ID
Zdarzenia specjalne (nazwy zmiennych wg Constants.au3):
$TRAY_EVENT_PRIMARYDOWN - główny przycisk myszy został naciśnięty $TRAY_EVENT_PRIMARYUP - główny przycisk myszy został zwolniony $TRAY_EVENT_SECONDARYDOWN - drugi przycisk myszy został naciśnięty $TRAY_EVENT_SECONDARYUP - drugi przycisk myszy został zwolniony $TRAY_EVENT_PRIMARYDOUBLE - główny przycisk myszy został naciśnięty dwukrotnie $TRAY_EVENT_SECONDARYDOUBLE - dodatkowy przycisk myszy został naciśnięty dwukrotnie
UWAGA: Funkcja w minimalnym stopniu obciąża procesora, dlatego może być używana w pętli bez obawy blokowania CPU.
Przykład (użycie funkcji TrayCreateMenu, TrayCreateItem, TrayGetMsg):
Opt("TrayMenuMode", 1) ;nie wyświetlamy standardowych pozycji menu
$iUs = TrayCreateMenu("Ustawienia") ;tworzenie menu
$iEk = TrayCreateItem("Ekran", $iUs) ;pozycja podmenu
$iDr = TrayCreateItem("Drukarka", $iUs) ;pozycja podmenu
TrayCreateItem("") ;podkreślenie
$iOp = TrayCreateItem("Opis")
TrayCreateItem("")
$iKo = TrayCreateItem("Koniec")
Do
$msg = TrayGetMsg()
Select
Case $msg = $iOp
MsgBox(64, "Opis:", "AutoIt3-Tray test:")
Case $msg = $iKo
Exit
EndSelect
Until False
Usuwanie menu
edytujTrayItemDelete
edytujTrayItemDelete ( ID )
Funkcja usuwa całe menu lub pozycję w nim. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.
ID - identyfikator menu lub pozycji w nim, zwracany przez funkcję TrayCreateMenu lub TrayCreateItem.
Przykład:
Opt("TrayMenuMode", 1)
$iMe = TrayCreateMenu("MENU")
$iP1 = TrayCreateItem("Pozycja 1",$iMe)
$iP2 = TrayCreateMenu("Pozycja 2",$iMe)
$iP3 = TrayCreateItem("Pozycja 3",$iMe)
MsgBox(0, "Test:", "Pełne menu")
TrayItemDelete($iP2)
MsgBox(0,"Test:","Menu bez: Pozycja 2")
TrayItemDelete($iMe)
MsgBox(0,"Test:","Menu zlikwidowane")
Odczyt danych z menu zasobnika
edytujTrayItemGetHandle
edytujTrayItemGetHandle ( ID )
Funkcja zwraca uchwyt do menu lub jego pozycji, lub 0 jeżeli wystąpił błąd.
ID - identyfikator menu lub pozycji w nim zwracany, przez funkcję TrayCreateMenu lub TrayCreateItem. Wpisanie zera oznacza menu główne.
UWAGA: Uzyskanie uchwytu do kontrolki umożliwia odwołanie się do niej także z po za skryptu, np. w funkcji biblioteki DLL.
Więcej o użyciu biblitek DLL w rozdziale AutoIt/Biblioteki DLL .
Przykład - zmiana koloru tła menu zasobnika za pomocą funkcji systemu operacyjnego z biblioteki DLL (gdi32.dll):
Opt("TrayMenuMode", 1)
$iOpcje = TrayCreateMenu("Opcje")
$iO1 = TrayCreateItem("Opcja 1", $iOpcje)
$iO2 = TrayCreateItem("Opcja 2", $iOpcje)
$iOpis = TrayCreateItem("Opis")
$iKoniec = TrayCreateItem("Koniec")
SetMenuColor(0, 0xEEBB99)
SetMenuColor($iOpcje, 0x55FF55)
Do
$Msg = TrayGetMsg()
Switch $Msg
Case $iKoniec
Exit
Case $iOpis
MsgBox(64, "", "Test zasobnika systemowego")
EndSwitch
Until 0
Func SetMenuColor($iID, $iColor)
Local $hMenu = TrayItemGetHandle($iID)
Local $aBrush = DllCall("gdi32.dll", "hwnd", "CreateSolidBrush", "int", $iColor)
Local $stMenuInfo = DllStructCreate("dword;dword;dword;uint;ptr;dword;ptr")
DllStructSetData($stMenuInfo, 1, DllStructGetSize($stMenuInfo))
DllStructSetData($stMenuInfo, 2, BitOR(0x80000000, 2))
DllStructSetData($stMenuInfo, 5, $aBrush[0])
DllCall("user32.dll", "int", "SetMenuInfo", "hwnd", $hMenu, "ptr", DllStructGetPtr($stMenuInfo))
EndFunc
TrayItemGetState
edytujTrayItemGetState ( ID )
Funkcja zwraca status podanej kontrolki menu zasobnika.
Wartość| Wg Constants.au3 | Opis ------------------------------------------------ 1 | $TRAY_CHECKED | pozycja zaznaczone 4 | $TRAY_UNCHECKED | pozycja odznaczona 64 | $TRAY_ENABLE | pozycja dostępna 128 | $TRAY_DISABLE | pozycja niedostępna 256 | $TRAY_FOCUS | pozycja wybrana 512 | $TRAY_DEFAULT | pozycja domyślna
ID - identyfikator menu lub pozycji w nim, zwracany przez funkcję TrayCreateMenu lub TrayCreateItem.
TrayItemGetText
edytujTrayItemGetText ( ID )
Funkcja zwraca tekst z podanej kontrolki menu zasobnika.
ID - identyfikator menu lub pozycji w nim, zwracany przez funkcję TrayCreateMenu lub TrayCreateItem.
Przykład użycia funkcji TrayItemGetState i TrayItemGetText:
Opt("TrayMenuMode", 1) ;nie wyświetlamy standardowych pozycji menu
$iUs = TrayCreateMenu("Ustawienia") ;tworzenie menu
$iEk = TrayCreateItem("Ekran", $iUs) ;pozycja podmenu
$iDr = TrayCreateItem("Drukarka", $iUs) ;pozycja podmenu
TrayCreateItem("") ;podkreślenie
$iSt = TrayCreateItem("Status")
TrayCreateItem("")
$iKo = TrayCreateItem("Koniec")
Do
$msg = TrayGetMsg()
Select
Case $msg = $iSt
$sTxt = "Status: " & TrayItemGetState ($iUs) & @LF
$sTxt &= "Tekst: " & TrayItemGetText ($iUs)
MsgBox(0, "Test:", $sTxt)
Case $msg = $iKo
Exit
EndSelect
Until 0
Ustawienie danych menu zasobnika
edytujTraySetOnEvent
edytujTraySetOnEvent ( ID_specjalne, "nazwa_funkcji" )
Rejestruje funkcję, która zostanie wywołana po zajściu specjalnego zdarzenia. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd (makro @error = 1 gdy rejestrowana funkcja nie została zdefiniowana).
ID_specjalne - identyfikator specjalnego zdarzenia:
Wartość| Wg Constants.au3 | Opis -------------------------------------------------------------------------------- -3 | $TRAY_EVENT_SHOWICON | ikona w zasobniku widoczna -4 | $TRAY_EVENT_HIDEICON | ikona w zasobniku ukryta -5 | $TRAY_EVENT_FLASHICON | włączone migotanie ikony -6 | $TRAY_EVENT_NOFLASHICON | wyłączone migotanie ikony -7 | $TRAY_EVENT_PRIMARYDOWN | główny przycisk myszy naciśnięty na ikonie -8 | $TRAY_EVENT_PRIMARYUP | główny przycisk myszy zwolniony na ikonie -9 | $TRAY_EVENT_SECONDARYDOWN | drugi przycisk myszy naciśnięty na ikonie -10 | $TRAY_EVENT_SECONDARYUP | drugi przycisk myszy zwolniony na ikonie -11 | $TRAY_EVENT_MOUSEOVER | kursor myszy porusza się po pasku zadań -13 | $TRAY_EVENT_PRIMARYDOUBLE | dwuklik głównym klawiszem na ikonie -14 | $TRAY_EVENT_SECONDARYDOUBLE | dwuklik drugim klawiszem na ikonie
"nazwa_funkcji" - nazwa zarejestrowanej funkcji.
UWAGA:
1. Funkcja zadziała tylko wtedy gdy ustawimy Opt("TrayOnEventMode", 1).
2. Podanie jako nazwy pustego stringu ("") spowoduje wyrejestrowanie funkcji.
Przykład:
#include <Constants.au3>
Opt("TrayOnEventMode", 1)
Opt("TrayMenuMode", 1)
;zakończenie skryptu dwuklikiem na ikonie w zasobniku
TraySetOnEvent($TRAY_EVENT_PRIMARYDOUBLE , "koniec")
Do
Sleep(20)
Until 0
;definicja rejestrowanej funkcji
Func koniec()
Exit
EndFunc
TrayItemSetOnEvent
edytujTrayItemSetOnEvent ( ID, "nazwa_funkcji" )
Rejestruje funkcję, która zostanie wywołana po kliknięciu określonej kontrolki w zasobniku. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd (makro @error = 1 gdy rejestrowana funkcja nie została zdefiniowana).
ID - identyfikator menu lub pozycji w nim, zwracany przez funkcję TrayCreateMenu lub TrayCreateItem.
"nazwa_funkcji" - nazwa zarejestrowanej funkcji.
UWAGA:
1. Funkcja zadziała tylko wtedy gdy ustawimy Opt("TrayOnEventMode", 1).
2. W definicji rejestrowanej funkcji funkcji można użyć makra @TRAY_ID, w celu poznania ID użytej kontrolki.
3. Podanie jako nazwy pustego stringu ("") spowoduje wyrejestrowanie funkcji.
Przykład:
Opt("TrayOnEventMode", 1) ;aktywacja obsługi zdarzeń zasobnika
Opt("TrayMenuMode", 1) ;nie wyświetlamy standardowych pozycji menu
$iUs = TrayCreateMenu("Ustawienia") ;menu
$iEk = TrayCreateItem("Ekran", $iUs) ;podmenu
$iDr = TrayCreateItem("Drukarka", $iUs) ;podmenu
$iOp = TrayCreateItem("Opis")
$iKo = TrayCreateItem("Koniec")
TrayItemSetOnEvent($iKo, "koniec")
TrayItemSetOnEvent($iOp, "opis")
Do
Sleep(20)
Until 0
;definicje rejestrowanych funkcji
Func koniec()
Exit
EndFunc
Func opis()
MsgBox(0,"Test TrayItemSetOnEvent:", "To jest komunikat testowy!")
EndFunc
lub:
Opt("TrayOnEventMode", 1) ;aktywacja obsługi zdarzeń zasobnika
Opt("TrayMenuMode", 1) ;nie wyświetlamy standardowych pozycji menu
$iUs = TrayCreateMenu("Ustawienia") ;menu
$iEk = TrayCreateItem("Ekran", $iUs) ;podmenu
$iDr = TrayCreateItem("Drukarka", $iUs) ;podmenu
$iOp = TrayCreateItem("Opis")
$iKo = TrayCreateItem("Koniec")
TrayItemSetOnEvent($iKo, "use")
TrayItemSetOnEvent($iOp, "use")
Do
Sleep(20)
Until 0
;definicje rejestrowanej funkcji
Func use()
If @TRAY_ID = $iKo Then Exit
If @TRAY_ID = $iOp Then MsgBox(0,"Test TrayItemSetOnEvent:", "To jest komunikat testowy!")
EndFunc
TraySetState
edytujTraySetState ( [flaga] )
Funkcja ustawia stan ikony zasobnika.
flaga - kod stanu ikony w zasobniku:
1 - ikona widoczna (domyślnie) 2 - ikona ukryta 4 - ikona migająca 8 - ikona przestaje migać 16 - przywrócenie ustawień domyślnych (nie miga, tekst podpowiedzi domyślny, nie przywraca widoczności)
Przykład:
TraySetState(4)
sleep(4000)
TraySetState(2)
sleep(4000)
TraySetState(16)
TraySetState(1)
MsgBox(0, "Test TraySetState:", "Koniec testu, przywrócono ustawienia")
TrayItemSetState
edytujTrayItemSetState ( ID, status )
Funkcja ustawia status kontrolki w zasobniku. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.
ID - identyfikator menu lub pozycji w nim, zwracany przez funkcję TrayCreateMenu lub TrayCreateItem.
'status - kod ustawianego statusu:
Wartość| Wg Constants.au3 | Opis ------------------------------------------------ 0 | | bez zmian 1 | $TRAY_CHECKED | pozycja zaznaczone 4 | $TRAY_UNCHECKED | pozycja odznaczona 64 | $TRAY_ENABLE | pozycja dostępna 128 | $TRAY_DISABLE | pozycja niedostępna 256 | $TRAY_FOCUS | pozycja wybrana 512 | $TRAY_DEFAULT | pozycja domyślna
UWAGA: Można sumować wartości, np. $TRAY_CHECKED + $TRAY_DEFAULT.
Przykład:
#include <Constants.au3>
Opt("TrayMenuMode", 1) ;nie wyświetlamy standardowych pozycji menu
$iUs = TrayCreateMenu("Ustawienia") ;tworzenie menu
$iEk = TrayCreateItem("Ekran", $iUs) ;pozycja podmenu
$iDr = TrayCreateItem("Drukarka", $iUs) ;pozycja podmenu
$iOp = TrayCreateItem("Opis")
$iKo = TrayCreateItem("Koniec")
TrayItemSetState($iEk, $TRAY_DISABLE)
TrayItemSetState($iDr, $TRAY_DISABLE)
TrayItemSetState($iKo, $TRAY_CHECKED + $TRAY_FOCUS)
Do
$msg = TrayGetMsg()
Select
Case $msg = $iOp
MsgBox(64, "Opis:", "AutoIt3-Tray test:")
Case $msg = $iKo
Exit
EndSelect
Until 0
TrayItemSetText
edytujTrayItemSetText ( ID, "tekst" )
Funkcja zmienia tekst w kontrolce zasobnika. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.
ID - identyfikator menu lub pozycji w nim, zwracany przez funkcję TrayCreateMenu lub TrayCreateItem.
"tekst" - nowy tekst pozycji menu.
UWAGA: Aby zmienić tekst standardowych pozycji menu należy skorzystać ze stałych $TRAY_ITEM_EXIT i $TRAY_ITEM_PAUSE jako ID kontrolki.
Przykład:
#include <Constants.au3>
TrayItemSetText($TRAY_ITEM_EXIT ,"KONIEC")
TrayItemSetText($TRAY_ITEM_PAUSE ,"PRZERWA")
Do
Sleep(20)
Until 0
TraySetClick
edytujTraySetClick ( flaga )
Funkcja ustawia rodzaj kliknięcia na ikonie w zasobniku powodującego rozwinięcie menu.
flaga - kod kliknięcia:
0 - menu nie będzie widoczne po kliknięciu myszką 1 - wciśnięcie głównego przycisku myszy (domyślnie) 2 - zwolnienie głównego przycisk myszy 4 - dwukrotne klikniecie głównego przycisku myszy 8 - naciśnięcie drugiego przycisku myszy (domyślnie) 16 - zwolnienie drugiego przycisku myszy 32 - dwukrotne kliknięcie drugiego przycisku myszy 64 - najechanie na ikonę
Wartości można sumować, np. domyślną wartością jest 9 (1+8).
Przykład:
TraySetClick(4) ;otwarcie menu dwuklikiem głównego klawisza myszy
Do
Sleep(20)
Until 0
TraySetIcon
edytujTraySetIcon ( ["nazwa_pliku" [, ID_ikony ]] )
Funkcja ustala ikonę w zasobniku.
"nazwa_pliku" - nazwa pliku ikony.
ID_ikony - ID ikony (jeżeli plik zawiera więcej ikon).
Przykład:
TraySetIcon("Shell32.dll", 41)
Do
Sleep(20)
Until 0
TraySetPauseIcon
edytujTraySetPauseIcon ( ["nazwa_pliku" [, ID_ikony ]] )
Funkcja ustala ikonę pauzy w zasobniku.
"nazwa_pliku" - nazwa pliku ikony.
ID_ikony - ID ikony (jeżeli plik zawiera więcej ikon).
Przykład:
TraySetPauseIcon("Shell32.dll", 31)
Do
Sleep(20)
Until 0
TrayTip
edytujTrayTip ( "tytuł", "tekst", czas [, opcja] )
Funkcja wyświetla "chmurkę" z podpowiedzią obok ikony skryptu.
"tytuł" - tytuł chmurki, max. 63 znaki.
"tekst" - tekst w chmurce, max. 255 znaków.
czas - czas wyświetlania chmurki w sek., domyślnie chmurka pokazywana jest przez 10 do 30 sek.
opcje - kod ikony w chmurce:
0 - brak ikony (domyślnie) 1 - ikona informacji 2 - ikona ostrzeżenia 3 - ikona błędu
UWAGA:
1. Windows XP zazwyczaj odtwarza dźwięk podczas wyświetlania chmurki. Ten dźwięk może być wyłączony przez dodanie 16 do parametru opcja lub ustawiając pusty tytuł.
2. Funkcja działa tylko wtedy, gdy ikona jest widoczna w zasobniku.
Przykład:
TrayTip("Test TrayTip:", 'To jest test "chmurki".', 5, 1)
Sleep(5000)
TrayTip("Test TrayTip:", "A teraz bez ikony.", 0)
Sleep(5000)
TrayTip ("", "A teraz bez tytułu.", 0)
Sleep(5000)
TraySetToolTip
edytujTraySetToolTip ( ["tekst"] )
Funkcja zmienia standardowy tekst w okienku podpowiedzi. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.
"tekst" - nowy tekst w okienku podpowiedzi, max. 128 znaków. Pusty string ("") lub pominięcie tego parametru powoduje przywrócenie domyślnej podpowiedzi.
UWAGA: Funkcja działa tylko wtedy, gdy ikona jest widoczna w zasobniku.
Przykład:
TraySetToolTip("To jest niestandardowa podpowiedź!")
While 1
Sleep(20)
WEnd