AutoIt/Zasobnik systemowy (Tray)

Co to jest zasobnik systemowy?

edytuj

Zasobnik 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

edytuj

Tworzenie menu

edytuj

TrayCreateMenu

edytuj
TrayCreateMenu ( "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

edytuj
TrayCreateItem ( "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

edytuj

TrayGetMsg

edytuj
TrayGetMsg ( )

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

edytuj

TrayItemDelete

edytuj
TrayItemDelete ( 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

edytuj

TrayItemGetHandle

edytuj
TrayItemGetHandle ( 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

edytuj
TrayItemGetState ( 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

edytuj
TrayItemGetText ( 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

edytuj

TraySetOnEvent

edytuj
TraySetOnEvent ( 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

edytuj
TrayItemSetOnEvent ( 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

edytuj
TraySetState ( [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

edytuj
TrayItemSetState ( 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

edytuj
TrayItemSetText ( 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

edytuj
TraySetClick ( 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

edytuj
TraySetIcon ( ["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

edytuj
TraySetPauseIcon ( ["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

edytuj
TrayTip ( "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

edytuj
TraySetToolTip ( ["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