Co to jest makro?

edytuj

W AutoIt przez makra rozumie się pewien specjalny rodzaj predefiniowanych w interpreterze zmiennych globalnych.

Ich odrębność w stosunku do zwykłych zmiennych manifestuje się tym, że programista nie ma możliwości nadawania lub zmieniania ich wartości (z wyjątkiem dwóch przypadków, które zostaną później opisane).

Wartości tych zmiennych są nadawane i zmieniane przez system operacyjny lub interpreter AutoIt'a. Zmienne te są wykorzystywane w celu przekazywania do programu różnych informacji o systemie, sprzęcie lub wykonywanym skrypcie.

Aby podkreślić szczególnie znaczenie makr, ich nazwy poprzedza się znakiem @ (zamiast standardowego $) np.: @error.


Opis wybranych makr

edytuj

Ilość makr jest bardzo duża więc opis ograniczę do tych najbardziej użytecznych i najczęściej używanych (pełny opis w "AutoIt Help").

Znaki specjalne:
---------------------------------------------------------------------------------- 
@CR             - znak powrotu karetki, jak Chr(13)
@LF             - znak nowego wiersza, jak Chr(10)
@CRLF           - znak powrotu karetki i nowego wiersza, jak Chr(13)&Chr(10)
@TAB            - znak tabulatora, jak Chr(9)
----------------------------------------------------------------------------------
Wskazania zegara systemowego:
----------------------------------------------------------------------------------
@YEAR           - aktualny rok, format: rrrr (np.: 2011)
@MON            - aktualny miesiąc (od 01 do 12)
@YDAY           - aktualny dzień roku (od 001 do 365 lub 366)
@MDAY           - aktualny dzień miesiąca (od 01 do 28, 29, 30 lub 31)
@WDAY           - aktualny dzień tygodnia (od 1 do 7)
@HOUR           - aktualna godzina (od 00 do 23)
@MIN            - aktualna minuta (od 00 do 59)
@SEC            - aktualna sekunda (od 00 do 59)
@MSEC           - aktualna milisekunda (od 000 do 999)
----------------------------------------------------------------------------------
Obsługa funkcji:
----------------------------------------------------------------------------------
@error          - kod błędu (opis w rozdziale "Makra @error i @extended")
@extended       - dodatkowa wartość zwracana przez funkcję (opis j/w)
@exitCode       - kod zakończenia skryptu ustawiany przez funkcję Exit
@HotKeyPressed  - ostatnio wciśnięty "gorący klawisz"
@NumParams      - ilość parametrów przekazanych do funkcji
----------------------------------------------------------------------------------
GUI (używane jako argument funkcji GUISetState, WinSetState, Run, RunWait,
     FileCreateShortcut i FileGetShortcut):
----------------------------------------------------------------------------------
@SW_SHOW            - okno widoczne
@SW_SHOWNA          - okno widoczne, nieaktywne
@SW_SHOWDEFAULT     - okno aktywowane z ustawieniami domyślnymi programu
@SW_SHOWMAXIMIZED   - okno wyświetlane jako zmaksymalizowane
@SW_SHOWMINIMIZED   - okno wyświetlane jako zminimalizowane
@SW_SHOWMINNOACTIVE - okno wyświetlane jako zminimalizowane, nieaktywne
@SW_SHOWNOACTIVATE  - jak @SW_SHOWNORMAL, ale okno nieaktywne 
@SW_SHOWNORMAL      - włącza i wyświetla okno, jeżeli okno jest zminimalizowane
                      lub zmaksymalizowane systemu przywraca je do swojego
                      pierwotnego rozmiaru i położenia. 
@SW_HIDE            - okno ukryte
@SW_MINIMIZE        - okno zminimalizowane
@SW_MAXIMIZE        - okno zmaksymalizowane
@SW_RESTORE         - cofnięcie minimalizacji okna
@SW_DISABLE         - okno unieruchomione
@SW_ENABLE          - odblokowanie okna
@SW_LOCK            - okno zablokowane (nie można w nim nic narysować)
@SW_UNLOCK          - okno odblokowane
----------------------------------------------------------------------------------
GUI (inne):
----------------------------------------------------------------------------------
@GUI_CtrlId     - numer ID ostatni klikniętej kontrolki
@GUI_CtrlHandle - uchwyt do ostatnio klikniętej kontrolki
@GUI_WinHandle  - uchwyt do ostatnio klikniętego okna GUI
 ----------------------------------------------------------------------------------
Zasobnik systemowy (Tray):
----------------------------------------------------------------------------------
@TRAY_ID          - identyfikator ostatnio klikniętego elementu podczas działania 
                    funkcji TraySetOnEvent() lub TrayItemSetOnEvent()
@TrayIconFlashing - 1 gdy ikona w zasobniku miga, w przeciwnym razie 0
@TrayIconVisible  - 1 gdy ikona w zasobniku jest widoczna, w przeciwnym razie 0
----------------------------------------------------------------------------------
Skrypt AutoIt:
----------------------------------------------------------------------------------
@AutoItExe        - nazwa z pełną ścieżką dostępu do aktualnie uruchomionego 
                    programu AutoIt (nazwa skryptu jeżeli skrypt jest skompilowany)
@AutoItPID        - PID procesu uruchomionego skryptu
@AutoItX64        - 1 gdy skrypt uruchomiony natywnie w wersji 64-bitowej Windows
@AutoItVersion    - wersja translatora np. 3.3.14.0
@compiled         - 1 gdy uruchomiony skrypt jest skompilowany
@exitMethod       - kod metody zakończenia skryptu, 0 - normalne zakończenie,
                    1 - zakończenie funkcją Exit, 2 - zamknięcie opcją Exit
                    w tray'u, 3 - zakończenie przez wylogowanie użytkownika,
                    4 - zakończenie przez zamknięcie systemu Windows
@ScriptLineNumber - nr aktualnie wykonywanego wiersza skryptu
@ScriptDir        - folder uruchomionego skryptu
@ScriptFullPath   - ścieżka do uruchomionego skryptu (łącznie z jego nazwą)
@ScriptName       - nazwa uruchomionego skryptu
----------------------------------------------------------------------------------
Sprzęt i system:
----------------------------------------------------------------------------------
@OSArch         - architektura uruchomionego systemu operacyjnego 32 lub 64 bitowa
                  ("X86", "IA64", "X64")
@OSVersion      - wersja OS ("WIN_10", "WIN_81", "WIN_8", "WIN_7", "WIN_VISTA", "WIN_10,
                             "WIN_XP", "WIN_XPe", "WIN_2016", "WIN_2012R2",
                             "WIN_2012", "WIN_2008R2", "WIN_2008", "WIN_2003")
@OSType         - "WIN32_NT" dla XP/2003/Vista/2008/Win7/2008R2/Win8/2012/Win8.1/Win10
@OSServicePack  - numer zainstalowanego pakietu serwisowego
@CPUArch        - "X86" - procesor 32-bitowy, "X64 - procesor 64-bitowy
@KBLayout       - kod ustawienia klawiatury np. 0x407 - niemiecka,
                                                0x409 - angielska
                                                0x415 - polska
@ComputerName   - nazwa sieciowa komputera
@UserName       - nazwa aktualnego użytkownika
@HomeDrive      - nazwa dysku zawierającego bieżący folder domowy użytkownika
@ComSpec        - ścieżka do interpretera poleceń (plik cmd.exe)
@HomePath       - ścieżka do folderu domowego użytkownika (bez nazwy dysku)
@StartupDir     - ścieżka do bieżącego folderu auto-startu
@SystemDir      - ścieżka do folderu System32
@TempDir        - ścieżka do folderu tymczasowego
@WindowsDir     - ścieżka do folderu instalacyjnego systemu Windows
@WorkingDir     - ścieżka do folderu bieżącego
@DesktopHeight  - pionowa rozdzielczość ekranu
@DesktopWidth   - pozioma rozdzielczość ekranu
@DesktopDepth   - głębia kolorów wyświetlacza w bitach na piksel
@DesktopRefresh - częstotliwość odświeżania ekranu w hercach
@IPAddress1     - adres IP pierwszego adaptera sieciowego
@IPAddress2     - adres IP drugiego adaptera sieciowego  (0.0.0.0 jeżeli brak)
@IPAddress3     - adres IP trzeciego adaptera sieciowego (0.0.0.0 jeżeli brak)
@IPAddress4     - adres IP czwartego adaptera sieciowego (0.0.0.0 jeżeli brak)
----------------------------------------------------------------------------------
Foldery systemowe:
----------------------------------------------------------------------------------
@AppDataCommonDir   - ścieżka do folderu Dane aplikacji
@ComSpec            - Ścieżka do interpretera używanego przez wiersz poleceń
@DesktopCommonDir   - ścieżka do pulpitu
@DocumentsCommonDir - ścieżka do dokumentów
@FavoritesCommonDir - ścieżka do ulubionych
@MyDocumentsDir     - ścieżka do Moje dokumenty
@ProgramsCommonDir  - ścieżka folderu Start Menu na programy
@StartMenuCommonDir - ścieżka folderu Start Menu
@StartMenuDir       - ścieżka do menu Start bieżącego użytkownika
@StartupCommonDir   - ścieżka do folderu Autostart
@WindowsDir         - ścieżka do folderu Windows
@WorkingDir         - bieżący/aktywny katalog roboczy. Zawiera końcowy ukośnik odwrotny tylko wtedy, gdy skrypt znajduje się w katalogu głównym dysku.

Makra @error i @extended

edytuj

Jest to szczególny rodzaj makr, gdyż są to jedyne makra, które można zmieniać bezpośrednio wewnątrz skryptu. Nie można jednak nadać im wartości w sposób stosowany dla zwykłych zmiennych. Należy do tego użyć odpowiedniej funkcji.

UWAGA: Oba makra mogą przyjmować tylko wartości typu INTEGER.

Makro @error

edytuj

Makro to używane jest do przekazywania kodu błędu jaki ewentualnie powstał podczas działania wywołanej funkcji. Taką obsługę błędów ma prawie każda funkcja wbudowana i biblioteczna. Pisząc własne funkcje możemy także wyposażyć je w obsługę błędów. Służy do tego funkcja SetError:

SetError ( kod_błędu [, extended [, wartość_zwracana]] )

Funkcja nadaje wartość makru @error i opcjonalnie makru @extended. Zwraca podaną jako argument wartość (domyślnie funkcja nie zwraca żadnej wartości).

kod_błędu - liczba określająca kod błędu,tą wartość przyjmie makro @error, standardowo przyjęto: 0 - błąd nie wystąpił, 1 - błąd wystąpił.

extended - ewentualne kody określające rodzaj błędu, tą wartość przyjmie makro @extended

wartość_zwracana - wartość zwracana przez funkcję SetError, domyślnie funkcja nie zwraca żadnej wartości.

Przykład:

$c=podziel(2,0)
$er=@error
$ex=@extended
MsgBox(0,"","Wynik = "&$c)
MsgBox(0,"","@error = "&$er)
MsgBox(0,"","@extended = "&$ex)

Func podziel($a,$b)
   If $b=0 Then        ;gdy dzielenie przez zero
      SetError(1, -1)  ;nadanie wartości @error i @extended
      Return "-1.#IND" ;standardowa wartość zwracana gdy wynik nieokreślony
   else
      SetError(0)
      Return $a/$b     ;wynik dla prawidłowych danych
   EndIf
EndFunc

Makro @extended

edytuj

To makro wykorzystywane jest do zwracania z funkcji dodatkowych informacji. Przykładowo wbudowana funkcja StringReplace wykorzystuje makro @extended do zwrócenia ilości podmian (patrz rozdział: "Napisy (stringi) / Przetwarzanie stringów (funkcje AutoIt'a) / Tworzenie stringu przez zamianę w stringu argumentu jednego podstringu na inny")

SetExtended ( kod [, wartość_zwracana]] )

Funkcja nadaje wartość makru @extended. Zwraca podaną jako argument wartość (domyślnie funkcja nie zwraca żadnej wartości).

kod - liczba określająca dodatkową informację zwracaną przez funkcję, tą wartość przyjmie makro @extended.

wartość_zwracana - wartość zwracana przez funkcję SetExtended, domyślnie funkcja nie zwraca żadnej wartości.