AutoIt/Przejmowanie kontroli

Wstęp

edytuj

O sile i przydatności AutoIt decyduje w dużej mierze łatwość sterowania zewnętrznymi procesami. W prosty sposób można uruchamiać programy, manipulować oknami, symulować użycie klawiatury i myszki, wprowadzać i odczytywać dane.

W zasadzie za pomocą skryptu możemy wykonać to, co normalnie robi człowiek. Łatwo i szybko stworzymy coś na kształt symulatora użytkownika.

Dzięki temu możliwe jest zautomatyzowanie często wykonywanych, pracochłonnych i monotonnych czynności.

Tego typu programy nazywa się botami (nazwa od słowa robot). Bot to program wykonujący pewne czynności w zastępstwie człowieka. Czasem jego funkcją jest udawanie ludzkiego zachowania.

Aby to lepiej zrozumieć, proponuję uruchomić poniższy skrypt i obejrzeć jego działanie. Nie robi on nic użytecznego, ale chyba nieźle naśladuje użytkownika.

Jest więc prostym, demonstracyjnym botem (instrukcje Sleep symulują "ludzkie" opóźnienie reakcji):

Opt("MouseCoordMode", 0) ;współrzędne względne
Opt("SendKeyDelay", 50)  ;czas między "wciśnięciami" klawiszy

Run(@WindowsDir & "\Notepad.exe") ;uruchomienie notatnika
Sleep(1000)
Send("Ala ma Asa," & @LF & "a Ola ma kota.") ;pisanie do edytora
Sleep(1000)
Send("{F1}") ;wciśnięcie klawisza F1 (wywołanie pomocy)
Sleep(1000)
Send("{TAB}{TAB}{TAB}") ;3 razy klawisz TAB
Sleep(1000)
Send("{ENTER}") ;klawisz ENTER
Sleep(2000)
Send("{ENTER}")
$aSize = WinGetClientSize("[ACTIVE]") ;odczytanie wielkości okna
MouseMove($aSize[0]-10, 10) ;przesunięcie kursora myszki
Sleep(500)
MouseClick("left") ;klik lewym klawiszem
Sleep(500)
MouseMove(680,300)
$aSize = WinGetClientSize("[ACTIVE]")
MouseMove($aSize[0]-10, 10) ;przesunięcie kursora myszki
Sleep(500)
MouseClick("left")
Sleep(1000)
Send("{TAB}")
Sleep(1000)
Send("{ENTER}")


Uruchamianie programów

edytuj
 Run ( "nazwa_programu" [, "folder_roboczy" [, stan_okna [, opcje ]]]

Funkcja uruchamia zewnętrzny program. Zwraca identyfikator procesu (PID) lub 0 gdy wystąpił błąd (makro @error otrzymuje niezerową wartość).

Dalej uruchomione procesy (skrypt i uruchomiony program) działają równolegle.

"nazwa_programu" - nazwa uruchamianego programu (może być ze ścieżką dostępu)

Pozostałe opcjonalnie:

"folder_roboczy" - folder roboczy programu, domyślnie jest to folder w którym został uruchomiony program.

stan_okna - stan okna, @SW_HIDE - okno ukryte (domyślnie), @SW_SHOW - okno widoczne, @SW_MINIMIZE - okno zminimalizowane, @SW_MAXIMIZE - okno zmaksymalizowane.

opcje - opcje związane z kontrolą procesów rodzic - dziecko (tylko dla zaawansowanych, więc na razie pomińmy to. Dokładniejszy opis: AutoIt / Konsola tekstowa / Uruchamiane programów konsolowych)

RunWait

edytuj
 RunWait ( "nazwa_programu" [, "folder_roboczy" [, stan_okna [, opcje ]]]

Funkcja uruchamia zewnętrzny program. Zwraca identyfikator procesu (PID) lub 0 gdy wystąpił błąd (makro @error otrzymuje niezerową wartość).

Wykonanie skryptu jest wstrzymane do czasu zakończenia działania uruchomionego programu.

"nazwa_programu" - nazwa uruchamianego programu (może być ze ścieżką dostępu).

Pozostałe opcjonalnie:

"folder_roboczy" - folder roboczy programu, domyślnie jest to folder w którym został uruchomiony program.

stan_okna - stan okna, @SW_HIDE - okno ukryte (domyślnie), @SW_SHOW - okno widoczne, @SW_MINIMIZE - okno zminimalizowane, @SW_MAXIMIZE - okno zmaksymalizowane.

opcje - opcje związane z kontrolą procesów rodzic - dziecko (tylko dla zaawansowanych, więc na razie pomińmy to. Dokładniejszy opis: AutoIt / Konsola tekstowa / Uruchamiane programów konsolowych)

RunAs ( "nazwa_użytkownika", "domena", "hasło", flaga_logowania, "program" [, "folder_roboczy" [, flaga_wyświetlania [, opcje]]] )

Funkcja powoduje uruchomienie programu na koncie innego użytkownika. Zwraca identyfikator procesu (PID) lub 0 gdy wystąpił błąd (makro @error otrzymuje niezerową wartość).

"nazwa_użytkownika" - nazwa (login) konta innego użytkownika

"domena" - nazwa domeny

"hasło" - hasło do konta

flaga_logowania - określa sposób logowania do konta:

0 - interaktywne logowanie bez profilu
1 - interaktywne logowanie z profilu
2 - logowanie przez poświadczenie sieciowe
4 - program odziedziczy i wykorzysta środowisko programu, który go wywołał a nie użytkownika podanego jako parametr 
np @UserProfileDir wskaże na ten sam katalog co program "rodzic"

"program" - nazwa uruchamianego programu, razem ze ścieżką dostępu

Pozostałe opcjonalnie:

"folder_roboczy" - nazwa folderu roboczego, domyślnie @SystemDir

flaga_wyświetlania - określa sposób prezentacji okna uruchamianego programu:

@SW_HIDE     - okno ukryte (wartość domyślna)
@SW_MINIMIZE - okno zminimalizowane
@SW_MAXIMIZE - okno zmaksymalizowane

opcje - opcje związane z kontrolą procesów rodzic - dziecko (tylko dla zaawansowanych, więc na razie pomińmy to. Dokładniejszy opis: AutoIt / Konsola tekstowa / Uruchamiane programów konsolowych)

Przykład:

;Uruchom wiersz poleceń jako inny użytkownik
RunAs("Hans Kloss", @ComputerName, "Najlepsze kasztany są na placu Pigalle", 0, @ComSpec, @SystemDir, @SW_MAXIMIZE)

RunAsWait

edytuj
 RunAsWait ( "nazwa_użytkownika", "domena", "hasło", flaga_logowania, "program" [, "folder_roboczy" [, flaga_wyświetlania [, opcje]]] )

Funkcja powoduje uruchomienie programu na koncie innego użytkownika. Zwraca identyfikator procesu (PID) lub 0 gdy wystąpił błąd (makro @error otrzymuje niezerową wartość).

Wykonanie skryptu jest wstrzymane do czasu zakończenia działania uruchomionego programu.

"nazwa_użytkownika" - nazwa (login) konta innego użytkownika

"domena" - nazwa domeny

"hasło" - hasło do konta

flaga_logowania - określa sposób logowania do konta:

0 - interaktywne logowanie bez profilu
1 - interaktywne logowanie z profilu
2 - logowanie przez poświadczenie sieciowe
4 - program odziedziczy i wykorzysta środowisko programu, który go wywołał a nie użytkownika podanego jako parametr 
np @UserProfileDir wskaże na ten sam katalog co program "rodzic"

"program" - nazwa uruchamianego programu, razem ze ścieżką dostępu

Pozostałe opcjonalnie:

"folder_roboczy" - nazwa folderu roboczego, domyślnie @SystemDir

flaga_wyświetlania - określa sposób prezentacji okna uruchamianego programu:

@SW_HIDE     - okno ukryte (wartość domyślna)
@SW_MINIMIZE - okno zminimalizowane
@SW_MAXIMIZE - okno zmaksymalizowane

opcje - opcje związane z kontrolą procesów rodzic - dziecko (tylko dla zaawansowanych, więc na razie pomińmy to. Dokładniejszy opis: AutoIt / Konsola tekstowa / Uruchamiane programów konsolowych)

ShellExecute

edytuj
ShellExecute ( "nazwa_pliku" [, "parametr" [, "folder_roboczy" [, "działanie" [, stan_okna ]]]] )

Funkcja pozwala uruchomić zewnętrzny program poprzez funkcję ShellExecute w Windows API. Jeżeli sukces Zwraca identyfikator procesu PID lub -1 gdy PID był niedostępny. Gdy wystąpił błąd funkcja zwraca 0 (makro @error otrzymuje niezerową wartość).

W odróżnieniu od funkcji RUN pozwala "uruchamiać" także pliki dokumentów, które nie są programami. Najpierw zostanie uruchomiony program skojarzony w systemie z danym typem dokumentów, a następnie do tego programu wczytany dokument. Warunkiem zadziałania jest istnienie odpowiedniego skojarzenia w systemie operacyjnym.

Dalej, podobnie jak dla funkcji RUN, uruchomione procesy (skrypt i uruchomiony program) działają równolegle.

"nazwa_pliku" - nazwa uruchamianego pliku (.EXE, .txt, .lnk, .jpg, itp.).

Pozostałe opcjonalnie:

"parametr" - parametr przekazywany do uruchamianego programu, domyślnie string pusty "", czyli brak parametrów.

"folder_roboczy" - folder roboczy programu, domyślnie jest to folder w którym został uruchomiony program.

"działanie" - działanie realizowane przez uruchomiony program:

"open" - otwiera określony plik. Plik może być plikiem wykonywalnym, plikiem dokumentu lub folderem.
"edit" - uruchamia edytor i otwiera dokument do edycji, 
         jeżeli plik nie jest plikiem dokumentu to funkcja nie zadziała
"print" - drukuje dokument, jeżeli plik nie jest plikiem dokumentu, to funkcja nie zadziała
"properties" - wyświetla plik lub własności folderu

stan_okna - stan okna, @SW_SHOW - okno widoczne (domyślnie), @SW_HIDE - okno ukryte, @SW_MINIMIZE - okno zminimalizowane, @SW_MAXIMIZE - okno zmaksymalizowane.

ShellExecuteWait

edytuj
ShellExecuteWait ( "nazwa_pliku" [, "parametr" [, "folder_roboczy" [, "działanie" [, stan_okna ]]]] )

Różnicą w stosunku do funkcji ShellExecute jest to, że działanie skryptu jest wstrzymane do momentu zakończenia pracy zewnętrznego programu. Funkcja zwraca kod wyjściowy zwracany przez uruchomiony program, jeżeli wystąpił błąd makro @error przyjmuje wartość różną od 0.

Przykład:

;tworzymy plik tekstowy do testowania funkcji
FileWrite ( "test.txt", "To jest tekst testowy!" )

ShellExecuteWait("test.txt", "", "", "edit") ;wczytanie dokumentu do skojarzonego programu

;po zamknięcia programu skrypt wznowi działanie
MsgBox(0, "", "Skrypt wznowił działanie!")

Zarządzanie procesami

edytuj

ProcessClose

edytuj
ProcessClose ( "proces" )

Funkcja powoduje zamknięcie procesu podanego jako argument. Zwraca 1 gdy sukces lub 0 gdy wystąpił błąd (makro @error przyjmuje wartość większą od zera).

proces - nazwa lub PID procesu.

Przykład:

Run("Notepad.exe")
Sleep(3000)
ProcessClose("Notepad.exe")

lub tak:

$PID = Run("Notepad.exe")
Sleep(3000)
ProcessClose($PID)


ProcessExists

edytuj
ProcessExists ( "proces" )

Funkcja sprawdza czy istnieje proces o podanej nazwie lub PID. Zwraca jego PID gdy proces istnieje lub 0 gdy nie istnieje.

proces - nazwa lub PID procesu.

Przykład:

If ProcessExists("notepad.exe") Then
   MsgBox(0, "Test:", "Notatnik uruchomiony.")
Else
   MsgBox(0, "Test:", "Notatnik nie uruchomiony.")
EndIf


ProcessGetStats

edytuj
ProcessGetStats ( ["proces" [, typ]] )

Funkcja zwraca tablicę z danymi o pamięci lub IO (wejście / wyjście) procesów, lub 0 gdy wystąpił błąd.

Parametry, oba opcjonalne:

"proces" - nazwa lub PID procesu, domyślnie bieżący proces.

typ - typ zwracanej informacji, 0 (domyślnie) - informacja o pamięci, 1 - informacja o IO.

Zwracana tablica jest jednowymiarowe i zbudowana jest w następujący sposób:

typ = 0 (Statystyki pamięci)
------------------------------
[0] - pamięć robocza procesu
[1] - szczytowa ilość pamięci roboczej procesu
typ = 1 (Statystyki IO)
------------------------------
[0] = liczba operacji odczytu
[1] = liczba operacji zapisu
[2] = liczba operacji wejścia / wyjścia, innych niż operacje odczytu i zapisu
[3] = liczba bajtów odczytanych
[4] = liczba bajtów zapisanych
[5] = liczba przesłanych bajtów podczas operacji innych niż operacje odczytu i zapisu

Przykład:

$aMem = ProcessGetStats()
MsgBox(0,"ProcessGetStats():", $aMem[0] & @LF & $aMem[1])

$aMem = ProcessGetStats(Default, 1)
MsgBox(0,"ProcessGetStats():", $aMem[0] & @LF & _
                               $aMem[1] & @LF & _
                               $aMem[2] & @LF & _
                               $aMem[3] & @LF & _
                               $aMem[4] & @LF & _
                               $aMem[5] & @LF )


ProcessList

edytuj
ProcessList ( ["nazwa"] )

Funkcja zwraca tablicę z wykazem aktualnie uruchomionych procesów (nazwa i PID). jeżeli wystąpił błąd makro @error przyjmuje wartość 1.

"nazwa" - (opcjonalnie) nazwa procesu, którego dane mają być zwrócone, jeżeli zostanie pominięty to zwracana tablica będzie zawierać dane wszystkich uruchomionych procesów.

Zwrócona tablica jest dwuwymiarowa i ma następującą budowę:

[0][0] - liczba procesów
[1][0] - nazwa 1 procesu
[1][1] - PID 1 procesu
[2][0] - nazwa 2 procesu
[2][1] - PID 2 procesu
      ... itd.

Przykład:

$aList = ProcessList()
MsgBox(0,"Ilość uruchomionych procesów:", $aList[0][0])
For $i = 1 To $aList[0][0]
   MsgBox(0, $aList[$i][0], $aList[$i][1],1)
Next

Run(@WindowsDir & "\Notepad.exe") ;uruchomienie notatnika
Sleep(1000)

$list = ProcessList("notepad.exe")
For $i = 1 To $aList[0][0]
   MsgBox(0, $aList[$i][0], $aList[$i][1])
Next


ProcessSetPriority

edytuj
ProcessSetPriority ( "proces", priorytet )

Funkcja zmiania priorytet procesu. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd (makro @error ustawiane na 1 lub 2 gdy próbowano użyć nieobsługiwanego priorytetu).

"proces" - nazwa lub PID procesu, domyślnie bieżący proces.

priorytet - liczbowy kod priorytetu

0 - bezczynność lub niski
1 - poniżej normy
2 - normalny
3 - powyżej normy
4 - wysoki
5 - czasu rzeczywistego (zachować ostrożność, może powodować niestabilność systemu)

Przykład:

Run("notepad.exe")
WinWait("[CLASS:Notepad]")
;nadanie niskiego poriorytetu procesowi notatnika
ProcessSetPriority("notepad.exe", 0)


ProcessWait

edytuj
ProcessWait ( "proces" [, czas ] )

Funkcja powoduje wstrzymanie działania skryptu jeżeli nie istnieje podany proces (oczekiwanie na proces). Zwraca PID gdy proces istnieje lub 0 gdy proces nie istnieje po upływie zadanego czasu.

proces - nazwa procesu.

czas - czas oczekiwania (w sekundach), domyślnie czas oczekiwania jest nieograniczony.

Przykład:

ProcessWait("notepad.exe")
;komunikat pojawi się dopiero po uruchomieniu notatnika
MsgBox(0, "", "Uruchomiłeś notatnik!")


ProcessWaitClose

edytuj
ProcessWaitClose ( "proces" [, czas ] )

Funkcja powoduje wstrzymanie działania skryptu jeżeli istnieje podany proces (oczekiwanie na zamknięcie procesu). Zwraca 1 gdy proces został zamknięty lub 0 gdy upłynął zadany czas.

proces - nazwa procesu.

czas - czas wstrzymania skryptu (w sekundach), domyślnie czas wstrzymania jest nieograniczony.

Przykład:

Run("notepad.exe")
ProcessWaitClose("notepad.exe")
;komunikat pojawi się dopiero po zamknięciu notatnika
MsgBox(0, "", "Notatnik nie działa!")


Zarządzanie oknami

edytuj

WinActivate

edytuj
WinActivate ( "nazwa" [, "tekst" ] )

Funkcja uaktywnia okno o podanej nazwie. Zwraca uchwyt do okna gdy sukces, lub 0 gdy wystąpił błąd np. okno nie istnieje.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - tekst jaki musi być w oknie aby zostało uaktywnione, domyślnie string pusty "" czyli tekst dowolny (także jego brak).

Przykład:

Run("notepad.exe")   ;uruchomienie notatnika
Run("explorer.exe")  ;uruchomienie explorera
;teraz aktywne jest okno explorera
Sleep(5000)
;po 5 sekundach uaktywnienie okna notatnika
WinActivate("[CLASS:Notepad]")


Nazwy okien

edytuj

A teraz kilka słów o nazwach okien. Nazwą okna jest tekst, z lewej strony na jego belce. Jest on obok uchwytu jednym z identyfikatorów, po którym AutoIt rozróżnia do jakiego okna odnoszą się wywołane funkcje. Nazwę okien można podawać na kilka sposobów w zależności od ustawionej opcji, i tak dla:

Opt("WinTitleMatchMode", 1) - (domyślne) podaje się dowolną część początku nazwy okna

Opt("WinTitleMatchMode", 2) - podaje się dowolną część nazwy okna

Opt("WinTitleMatchMode", 3) - nazwa musi być podana w całości.

Używając nazw należy zwrócić uwagę na fakt, że czasami okno zmienia nazwę w czasie działania programy, np. okno notatnika ma nazwę zależną od nazwy wczytanego pliku tekstowego. Może to powodować trudności z identyfikacją okien. Lepiej wtedy używać nazwy klasy (patrz poniżej).

Zamiast nazwy okna można także używać specjalnych opisów (opis taki ujmuje się w nawiasy prostokątne):

[TITLE] - nazwa okna np.: WintActivate("[TITLE:Notatnik]"), to samo co WintActivate("Notatnik").

[CLASS:nazwa_klasy] - wewnętrzna nazwa klasy np.: WintActivate("[CLASS:Notepad]").

[REGEXPTITLE:wyrażenie_regularne] - nazwa okna musi spełniać warunki opisane wyrażeniem regularnym np.: WinActivate("[REGEXPCLASS:#\d+]").

[REGEXPCLASS:wyrażenie_regularne] - nazwa klasy musi spełniać warunki opisane wyrażeniem regularnym.

[LAST] - okno używane w poprzedniej komendzie AutoIt'a.

[ACTIVE] - okno aktywne np.: WinClose("[ACTIVE]").

X \ Y \ W \ H - położenie i rozmiar okna np.: WinActivate("[X:200; Y:150]").

[INSTANCE:nr] - nr instancji (przypadku). Jeżeli kilka okien spełnia wszystkie wymienione warunki, to można je rozróżnić podając numer instancji, np.:

WinWaitActive("[CLASS:Notepad; INSTANCE:2]", "").

Warunki można łączyć, wtedy okno musi spełnić wszystkie wymienione warunki, separatorem jest średnik, np.: WintActivate("[CLASS:Moja klasa; TITLE:Moje okno]").

Zamiast nazw można także używać uchwytów. Uchwyty (ang. handle) to liczbowe identyfikatory, które system nadaje poszczególnym otwieranym oknom.

UWAGA:

Pełne informacje o oknach możemy uzyskać przy pomocy dołączonego do dystrybucji programu AutoIt Window Info Tool (plik w folderze AutiIt'a Au3Info.exe).

Okno pulpitu Windows ma nazwę Program Manager.


WinActive

edytuj
WinActive ( "nazwa" [, "tekst" ] )

Funkcja sprawdza, czy określone okno istnieje i jest aktywne. Zwraca uchwyt do okna jeśli jest aktywne, w innym przypadku zwraca 0.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za aktywne, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

Przykład:

Run("notepad.exe")
Sleep(3000) ;chwila czasu na otwarcie okna
;MsgBox wyświetli uchwyt do okna notatnika
MsgBox(0,"",WinActive("[CLASS:Notepad]")) 
Run("explorer.exe")
Sleep(3000)
;MsgBox wyświetli 0, okno notatnika jest teraz nieaktywne
MsgBox(0,"",WinActive("[CLASS:Notepad]"))

WinClose

edytuj
WinClose ( "title" [, "text"] )

Funkcja zamyka okno o podanej nazwie. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za aktywne, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

Przykład:

Run("notepad.exe")   ;uruchomienie notatnika
Run("explorer.exe")  ;uruchomienie explorera
ProcessWait("explorer.exe") ;oczekiwanie na explorera
Sleep(3000)
WinClose("[CLASS:CabinetWClass]") ;zamknięcie explorera
Sleep(3000)
WinClose("[CLASS:Notepad]")       ;zamknięcie notatnika


WinKill

edytuj
WinKill ( "title" [, "text"] )

Funkcja wymusza zamknięcie okna o podanej nazwie. Nie zwraca żadnej wartości.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za aktywne, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

Jest pewna różnica między WinClose, a WinKill. Aby ją poznać prześledźmy dwa przykłady:

Przykład z WinClose:

$pid = Run("notepad.exe")   ;uruchomienie notatnika
Sleep(3000)
Send("Ala ma Asa,"&@LF&"a Ola ma kota.") ;pisanie do edytora
Sleep(5000)
WinClose("[CLASS:Notepad]")

Przykład z WinKill:

$pid = Run("notepad.exe")   ;uruchomienie notatnika
Sleep(3000)
Send("Ala ma Asa,"&@LF&"a Ola ma kota.") ;pisanie do edytora
Sleep(5000)
WinKill("[CLASS:Notepad]")

W pierwszym przypadku zamknięcie okna jest wstrzymane, do czasu podjęcia decyzji o zapisaniu pliku. W drugim zamknięcie okna jest wymuszone, bez oczekiwania na decyzję.


WinExists

edytuj
WinExists ( "nazwa" [, "tekst" ] )

Funkcja sprawdza, czy istnieje określone okno. Zwraca 1 gdy istnieje, lub 0 gdy nie istnieje.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

Przykład:

;uruchamiamy notatnik z niewidocznym oknem
$pid = Run("notepad.exe","",@SW_HIDE)
ProcessWait($pid)
;WinExists zwraca 1, chociaż okno jest niewidoczne
MsgBox(0,"",WinExists("[CLASS:Notepad]"))
ProcessClose($pid) ;zamknięcie notatnika


WinList

edytuj
WinList ( [ "nazwa" [, "tekst" ]] )

Funkcja zwraca dwuwymiarową tablicę z danymi wszystkich otwartych okien spełniających zadane kryteria.

$array[0][0] - ilość okien
$array[1][0] - nazwa pierwszego okna 
$array[1][1] - uchwyt do pierwszego okna
$array[2][0] - nazwa drugiego okna 
$array[2][1] - uchwyt do drugiego okna
...
$array[n][0] - nazwa n-tego okna 
$array[n][1] - uchwyt don-tego okna

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

WinList() - zwróci dane wszystkich otwartych okien.

Przykład:

#include <Array.au3>
 $aTab=WinList()
_ArrayDisplay($aTab, "Zestawienie otwartych okien:")


WinWait

edytuj
WinWait ( "nazwa" [, "tekst" [, czas ] )

Funkcja powoduje wstrzymanie działania skryptu jeżeli nie istnieje podane okno (oczekiwanie na okno). Zwraca uchwyt do okna, lub 0 jeżeli upłynął zadany czas oczekiwania.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

czas - czas oczekiwania (w sekundach), domyślnie czas oczekiwania jest nieograniczony.

Przykład:

Run("notepad")
WinWait("[CLASS:Notepad]")
;dalej dopiero po otwarciu okna notatnika
MsgBox(0,"", "Okno notatnika otwarte!")


WinWaitClose

edytuj
WinWaitClose ( "nazwa" [, "tekst" [, czas ] )

Funkcja powoduje wstrzymanie działania skryptu jeżeli istnieje podane okno (oczekiwanie na zamknięcie okna). Zwraca 1 gdy sukces, lub 0 gdy upłynął zadany czas.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

czas - czas oczekiwania (w sekundach), domyślnie czas oczekiwania jest nieograniczony.

UWAGA: Należy zwrócić uwagę, że otwarcie okna trawa dość długo, więc między uruchomieniem programu, a wywołaniem funkcji WinWaitClose należy przewidzieć odpowiednio dużo casu. Poniższy przykład prawdopodobnie nie zadziała prawidłowo:

Run("notepad.exe")
WinWaitClose("[CLASS:Notepad]")
;WinWaitClose zadziała jeszcze przed otwarciem okna
;więc uzna, że okno nie istnieje
;i skrypt będzie działał dalej
MsgBox(0, "", "Notatnik nie działa!")

Trzeba poczekać na otwarcie okna, lub wymusić zatrzymanie skryptu na kilka sekund za pomocą funkcji Sleep. Teraz skrypt będzie działał zgodnie z oczekiwaniami:

Run("notepad.exe")
WinWait("[CLASS:Notepad]") ;oczekiwanie na otwarcie okna
WinWaitClose("[CLASS:Notepad]")
;komunikat dopiero po zamknięciu okna notatnika
MsgBox(0, "", "Notatnik nie działa!")


WinWaitActive

edytuj
WinWaitActive ( "nazwa" [, "tekst" [, czas ] )

Funkcja powoduje wstrzymanie działania skryptu jeżeli podane okno jest nieaktywne (oczekiwanie na aktywizację okna). Zwraca uchwyt gdy sukces, lub 0 gdy upłynął zadany czas.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

czas - czas oczekiwania (w sekundach), domyślnie czas oczekiwania jest nieograniczony.

Przykład:

Run("notepad.exe")   ;uruchomienie notatnika
Run("explorer.exe")  ;uruchomienie explorera
ProcessWait("explorer.exe") ;oczekiwanie na explorera
Sleep(3000)
WinWaitActive("[CLASS:Notepad]")
;komunikat dopiero po aktywacji okna notatnika
MsgBox(0, "", "Notatnik uaktywniony!")


WinWaitNotActive

edytuj
WinWaitNotActive ( "nazwa" [, "tekst" [, czas ] )

Funkcja powoduje wstrzymanie działania skryptu jeżeli podane okno jest aktywne (oczekiwanie na dezaktywizację okna). Zwraca 1 gdy sukces, lub 0 gdy upłynął zadany czas.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

czas - czas oczekiwania (w sekundach), domyślnie czas oczekiwania jest nieograniczony.

Przykład:

Run("notepad.exe")   ;uruchomienie notatnika
Sleep(3000)
WinWaitNotActive("[CLASS:Notepad]")
;komunikat dopiero po dezaktywacji okna notatnika
MsgBox(0, "", "Notatnik nieaktywny!")


WinGetPos

edytuj
WinGetPos ( "nazwa" [, "tekst" ] )

Funkcja zwraca 4-elementową, jednowymiarową tablicę zawierającą dane o położeniu i wielkości okna, lub 0 gdy okno nie istnieje (makro @error przyjmuje wartość 1).

$array[0] = pozycja x
$array[1] = pozycja y
$array[2] = szerokość
$array[3] = wysokość

Szerokość i wysokość łącznie z belką i ramką wokół okna.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

Przykład:

Run("notepad.exe")
Sleep(2000)
$aSize = WinGetPos("[active]")
$iX = "Poz.x = " & $aSize[0]
$iY = "Poz.y = " & $aSize[1]
$iH = "Szer. = " & $aSize[2]
$iV = "Wys.  = " & $aSize[3]
MsgBox(0, "Dane okna:", $iX&@LF&$iY&@LF&$iH&@LF&$iV)


WinGetClassList

edytuj
WinGetClassList ( "nazwa" [, "tekst"] )

Funkcja zwraca string zawierający nazwy klas (CLASS) wszystkich kontrolek okna, lub string pusty gdy wystąpił błąd (makro @error przyjmuje wartość 1).

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

UWAGA:

1. Poszczególne nazwy klas są rozdzielone znakiem nowego wiersza (@LF).

2. Może być pobrane do 64K tekstu.

3. Jeśli wiele okien spełnia kryteria, klasy są odczytywane z okna ostatnio aktywnego.

Przykład:

Run("msconfig.exe")
Sleep(4000)
$sTxt = WinGetClassList("Konfiguracja systemu", "")
MsgBox(0, "WinGetClassList:", $sTxt)


WinGetClientSize

edytuj
WinGetClientSize ( "nazwa" [, "tekst" ] )

Funkcja zwraca 2-elementową, jednowymiarową tablicę zawierającą dane o wielkości przestrzeni roboczej okna, lub 0 gdy okno nie istnieje (makro @error przyjmuje wartość 1).

$array[0] = szerokość
$array[1] = wysokość

Zwracane wymiary dotyczą tylko przestrzeni roboczej okna, nie jest uwzględniana belka i ramka wokół okna.

Dla okna zminimalizowanego szerokość i wysokość wynosi 0, dla okna ukrytego, ale nie zminimalizowanego zwracane są prawidłowe wartości, tak jak dla okna aktywnego.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien"). Jeżeli użyjemy nazwy "Program Manager" to funkcja zwróci wielkość pulpitu.

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

Przykład (różnica między wielkościami zwracanymi przez WinGetClientSize, a WinGetPos):

Run("notepad.exe")
Sleep(2000)
$aSize = WinGetClientSize("[CLASS:Notepad]")
MsgBox(0, "Wielkość przestrzeni roboczej:", $aSize[0] & " x " & $hSize[1])
$aSize = WinGetPos("[CLASS:Notepad]")
MsgBox(0, "Wielkość całego okna:", $aSize[2] & " x " & $aSize[3])

WinGetCaretPos

edytuj
WinGetCaretPos ( )

Funkcja zwraca 2-elementową, jednowymiarową tablicę zawierającą dane o położeniu kursora tekstowego w aktywnym oknie. Jeżeli wystąpi błąd to makro @error przyjmuje wartość 1.

$array[0] = pozycja x
$array[1] = pozycja y

UWAGA: Zwracane przez funkcję wartości nie dla wszystkich aplikacji są zgodne z rzeczywistością.


WinGetState

edytuj
WinGetState ( "nazwa" [, "tekst" ] )

Funkcja zwraca liczbowy kod statusu okna, lub 0 gdy okno nie istnieje (makro @error przyjmuje wartość 1).

 1 = okno istnieje
 2 = okno jest widoczne
 4 = okno jest włączone
 8 = okno jest aktywne
16 = okno jest zminimalizowane
32 = okno jest zmaksymalizowane

Rezultat jest więc 6-bitowym rejestrem, w którym każdy bit ma odrębne znaczenie.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

Przykład (dla lepszego rozeznania co jest ustawione wynik w postaci dwójkowej:

$PID = Run("notepad.exe")   ;uruchomienie notatnika
Do
   Sleep(4000) ;czas żeby zrobić coś z oknem
   $iState = WinGetState("[CLASS:Notepad]")
   $m = MsgBox(4, "Example", Bin($iState, 6))
Until $m=7
ProcessClose($PID)

;funkcja zmieniająca wyrażenie na string liczby dwójkowej
;patrz: "Ćwiczenia dla początkujących"
Func Bin($iLiczba, $iLen=32)
   Local $sBin, $i
   For $i=0 To $iLen-1
      If BitAND($iLiczba, 2^$i) Then
         $sBin = "1" & $sBin
      Else
         $sBin = "0" & $sBin
      EndIf
   Next
   Return $sBin
EndFunc

WinGetHandle

edytuj
WinGetHandle ( "nazwa" [, "tekst" ] )

Funkcja zwraca uchwyt do okna, lub string pusty "" jeżeli okno nie istnieje (makro @error przyjmuje wartość 1).

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

Funkcja ta pozwala na użycie uchwytów do okien zamiast nazwy, dzięki czemu można uzyskać dostępu do wymaganego okna, nawet jeśli nastąpi zmiana jego nazwy.

Przykład:

Run("notepad.exe")
Sleep(2000)
$hHandle = WinGetHandle("[CLASS:Notepad]")
MsgBox(0, "Uchwyt:", $hHandle)
WinClose ($hHandle)


WinGetProcess

edytuj
WinGetProces ( "nazwa" [, "tekst" ] )

Funkcja zwraca PID procesu, który otworzył dane okno, lub -1 gdy wystąpił błąd.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

UWAGA: Należy zwrócić uwagę na różnicę między PID i uchwytem do okna. PID to identyfikator procesu (programu) działającego na komputerze. Proces może tworzyć okna, ale nie musi. Może też tworzyć wiele okien. Okna są dla procesu interfejsem do komunikowania się z użytkownikiem. Jeżeli proces tworzy wiele okien to zamknięcie pojedynczego okna nie spowoduje zamknięcia procesu, natomiast zamknięcie procesu zamknie wszystkie otwarte przez niego okna. Nawet jeżeli proces otwiera tylko jedno okno to jego zamknięcie wcale nie musi powodować zamknięcia procesu.

Przykład:

Run("notepad.exe")
Sleep(2000)
$PID = WinGetProcess("[CLASS:Notepad]")
MsgBox(4096, "PID:", $PID)
ProcessClose($PID)

WinGetTitle

edytuj
WinGetTitle ( "nazwa" [, "tekst" ] )

Funkcja zwraca pełną nazwę danego okna, lub 0 gdy nazwy nie znaleziono.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

WinGetTitle ("[ACTIVE]") zwraca nazwę aktywnego okna. WinGetTitle działa także na zminimalizowanych i ukrytych oknach. Jeśli wiele okien spełnia kryteria, zwracana jest nazwa ostatnio używanego okna.

Przykład:

Run("notepad.exe")
Sleep(2000) ;chwila na otwarcie okna
$sTitle = WinGetTitle("[ACTIVE]")
MsgBox(0, "Pełna nazwa okna:", $sTitle)


WinGetText

edytuj
WinGetText ( "nazwa" [, "tekst" ] )

Funkcja zwraca tekst pobierany z danego okna, lub 0 jeżeli okno nie istnieje.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

Można pobrać z okna do 64KB tekstu. WinGetText działa także na zminimalizowanych oknach, na oknach ukrytych jeśli wcześniej ustawiono AutoItSetOption("WinDetectHiddenText",1).

Jeśli wiele okien spełnia kryteria WinGetText, zwracany jest tekst z najpóźniej aktywowanego okna. WinGetText("[ACTIVE]") zwraca tekst z aktywnego okna.

Przykład:

Run("notepad.exe")
sleep(5000)
MsgBox(0,"", "Jeżeli skończyłeś pisać naciśnij OK!")
$SText = WinGetText("[CLASS:Notepad]")
MsgBox(0, "Napisałeś:", $sText)


WinMove

edytuj
WinMove ( "nazwa", "tekst", x, y [, szerokość [, wysokość[, szybkość]]] )

Funkcja przesuwa i zmienia wymiary okien. Zwraca uchwyt do okna, lub 0 gdy okno nie istnieje.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

x i y - nowe współrzędne lewego górnego narożnika okna

szerokość i wysokość - nowe wymiary okna (domyślnie: wymiary bez zmian)

szybkość - szybkość przemieszczania okna, 1 - najszybciej, 100 - najwolniej (domyślnie: przemieszczenie natychmiastowe)

WinMove nie ma wpływu na zminimalizowane okna, ale działa na ukrytych oknach.

Jeśli szerokość i wysokość są małe (lub ujemne), okno nie będzie mniejsze niż 112 x 27 pikseli. Jeżeli szerokość i wysokość są za duże, okno nie będzie większe niż około [12 + @ DesktopWidth] x [​​12 + @ DesktopHeight] pikseli.

Dla współrzędne x i y wartości ujemne są dozwolone. Można nawet przenieść okno poza ekran.

Jeśli wielu okien spełnia kryteria, używane jest okno ostatnio aktywne.

Jeżeli chcemy zmienić wielkość okna bez przesuwania należy za parametry x i y wstawić słowo kluczowe Default.

Jeżeli jednocześnie podamy nowe parametry wielkości i położenia okna, to przemieszczane będzie okno już o nowych rozmiarach.

Przykład:

Run("notepad.exe")
sleep(2000)
$hHandle=WinGetHandle("[CLASS:Notepad]")
WinMove($hHandle, "", 0, 0, 400, 400, 10)
WinMove($hHandle, "", 500, 400, 200, 200, 10)
WinMove($hHandle, "", Default, Default, 500, 500)
Sleep(1000)
WinMove($hHandle, "",2000, -500, Default, Default, 10)
WinMove($hHandle, "",600, 400, Default, Default, 10)
Sleep(2000)
WinClose($hHandle)

WinMinimizeAll

edytuj
WinMinimizeAll ( )

Funkcja powoduje zminimalizowanie wszystkich okien. Nie przyjmuje i nie zwraca żadnych wartości.

Przykład:

WinMinimizeAll() ;wszystkie okna zostaną zminimalizowane


WinMinimizeAllUndo

edytuj
WinMinimizeAllUndo ( )

Funkcja cofa działanie WinMinimizeAll. Nie przyjmuje i nie zwraca żadnych wartości.

Przykład:

WinMinimizeAll() ;wszystkie okna zostaną zminimalizowane
Sleep(2000)      ;po 2 sekundach
WinMinimizeAllUndo() ;przywrócenie stanu pierwotnego

WinSetOnTop

edytuj
WinSetOnTop ( "nazwa", "tekst", flaga )

Funkcja nadaje lub zdejmuje atrybut "zawsze na wierzchu". Zwraca 1 gdy sukces, 0 gdy okno nie istnieje.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

flaga - parametr określa czy atrybut ma być nadany czy zdjęty (1 - nadanie atrybutu, 0 - zdjęcie atrybutu).

Przykład:

Run("notepad.exe")
sleep(1000)
WinSetOnTop("[CLASS:Notepad]", "", 1)


WinSetState

edytuj
WinSetState ( "nazwa", "tekst", flaga )

Funkcja nadaje status oknu. Zwraca 1 gdy sukces, 0 gdy okno nie istnieje.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

flaga - status nadawany oknu (podaje się jako makro):

@SW_HIDE     - okno ukryte
@SW_SHOW     - okno widoczne
@SW_MINIMIZE - okno zminimalizowane
@SW_MAXIMIZE - okno zmaksymalizowane
@SW_RESTORE  - zamiana okno zmaksymalizowane <-> zminimalizowane
@SW_DISABLE  - okno wyłączone
@SW_ENABLE   - okno włączone

Jeśli wielu okien spełnia kryteria, używane jest ostatnio aktywne okno.

Przykład:

Run("notepad.exe")
sleep(2000)
$h=WinGetHandle("[CLASS:Notepad]")
WinSetState($h, "", @SW_HIDE)
Sleep(2000)
WinSetState($h, "", @SW_SHOW)
Sleep(2000)
WinSetState($h, "", @SW_MAXIMIZE )
Sleep(2000)
WinSetState($h, "", @SW_MINIMIZE )
Sleep(2000)
WinClose($h)


WinSetTitle

edytuj
WinSetTitle ( "nazwa", "tekst", "nowa_nazwa" )

Funkcja nadaje nową nazwę oknu. Zwraca 1 gdy sukces, 0 gdy okno nie istnieje.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

"nowa_nazwa" - nowa nazwa nadawana oknu.

Jeśli wielu okien spełnia kryteria, używane jest ostatnio aktywne okno.

Przykład:

Run("notepad.exe")
Sleep(2000)
WinSetTitle("[CLASS:Notepad]", "", "Nowa nazwa notatnika!")
MsgBox(0, "", "Zmieniono nazwę okna.")
WinClose("[CLASS:Notepad]")


WinSetTrans

edytuj
WinSetTrans ( "nazwa", "tekst", przezroczystość )

Funkcja ustawia przezroczystość okna. Zwraca liczbę różną od zera gdy sukces, lub 0 gdy wystąpił błąd.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

przezroczystość - parametr określający przezroczystość okna (0-255), im niższa liczba tym okno bardziej przezroczyste, dla 0 okno jest niewidoczne.

Przykład (aktywne okno zacznie znikać, a potem znowu się pojawiać):

$hHandle = WinGetHandle("[ACTIVE]")
for $i=255 to 0 Step -1
   WinSetTrans($hHandle, "", $i)
   Sleep(15)
Next
for $i=0 to 255
   WinSetTrans($hHandle, "", $i)
   Sleep(15)
Next


WinFlash

edytuj
WinFlash ( "nazwa" [,"tekst" [,błyski [,przerwa ]]])

Funkcja powoduje migotanie okna. Nie zwraca żadnej wartości.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

błyski - ilość błysków, domyślnie 4.

przerwa - czas między poszczególnymi błyskami, domyślnie 500 ms.

Funkcja jest przydatna do zwrócenia uwagi użytkownika na dane okno. Jeżeli okno jest niewidoczne lub zminimalizowane to miga ikona na pasku zadań.

Przykład:

Run("notepad.exe")
Sleep(2000)
$hHandle = WinGetHandle("[CLASS:Notepad]")
WinFlash($hHandle)
WinSetState($hHandle, "", @SW_MINIMIZE )
WinFlash($hHandle)
Sleep(2000)
WinClose($hHandle)


Zarządzanie kontrolkami

edytuj

Jedną z najciekawszych funkcji AutoIt jest możliwość pracy bezpośrednio z niektórymi rodzajami kontrolek systemu Windows. Prawie wszystko, co widzimy w oknach jest pewnego rodzaju kontrolkami: przyciski, pola edycji itp. Dzięki bezpośredniemu oddziaływaniu na nie uzyskujemy bardziej niezawodny sposób na zautomatyzowanie pracy, niż tylko symulowanie naciśnięć klawiszy.

Uwaga: AutoIt działa tylko ze standardowymi kontrolkami Windows - niektóre aplikacje używają swoich własnych kontrolek, które mogą wyglądać jak standardowe lecz nie można na nie oddziaływać. Eksperymentuj!


ControlClick

edytuj
ControlClick ( "nazwa", "tekst", ID_kontrolki [, "przycisk" [, klik [, x [, y ]]]] )

Funkcja symuluje wciśnięcie klawisza myszki wewnątrz kontrolki. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

ID_kontrolki - identyfikator kontrolki (patrz podrozdział: "Identyfikatory kontrolek").

"przycisk" - nazwa symulowanego przycisku (niektóre zależą od ustawienia w systemie przycisków myszki dla prawo lub leworęcznych)

"left" lub ""          - lewy przycisk (domyślnie)
"middle"               - środkowy
"right"                - prawy
"primary" lub "main"   - lewy (prawy - ustawienia dla leworęcznych)
"secondary" lub "menu" - prawy (lewy - ustawienia dla leworęcznych)

klik - ilość kliknięć (domyślnie 1), 2 - dwuklik

x, y - współrzędne miejsca symulowanego kliknięcia wewnątrz kontrolki (domyślnie środek kontrolki)

Przykład (W7):

Run("write.exe")
Sleep(2000)
ControlClick("[CLASS:WordPadClass]", "", "[CLASS:NetUIHWND]", "", 1, 497, 77)


Identyfikatory kontrolek

edytuj

[ID:nr] - liczbowy identyfikator kontrolki, jest to najpewniejszy sposób identyfikacji kontrolki, np.:

ControlClick("My Window", "", "[ID:254]") lub ControlClick("Moje okno", "", 254).

[TEXT:tekst] - tekst na kontrolce, np.: ControlClick("Moje okno", "", "[TEXT:&Koniec]").

[CLASS:nazwa_klasy] - wewnętrzna nazwa klasy, np.: ControlSend("[CLASS:Notepad]", "", "[CLASS:Edit]", "Jakiś tekst").

[CLASSNN:nazwa_klasy] - nazwa klasy, np.: ControlSend("[CLASS:Notepad]", "", "[CLASSNN:Edit1]", "Jakiś tekst"). W skrócie zamiast "[CLASSNN:Edit1]", można zapisać "Edit1".

[NAME:nazwa] - wewnętrzna nazwa .NET Framework (jeżeli istnieje).

[REGEXPCLASS:wyrażenie_regularne] - nazwa klasy musi spełniać warunki opisane wyrażeniem regularnym.

X \ Y \ W \ H - położenie i rozmiar kontrolki.

[INSTANCE:nr] - nr instancji (przypadku). Jeżeli kilka kontrolek spełnia wszystkie wymienione warunki, to można je rozróżnić podając numer instancji, np.:

ControlClick("Moje okno", "", "[CLASS:Button; TEXT:Koniec; INSTANCE:2]")

UWAGA: Pełne informacje o kontrolkach możemy uzyskać przy pomocy dołączonego do dystrybucji programu AutoIt Window Info Tool (plik w folderze AutiIt'a Au3Info.exe).


ControlCommand

edytuj
ControlCommand ( "nazwa", "tekst", ID_kontrolki, "komenda" [, "opcja"] )

Funkcja wysyła komendę do kontrolki. Wartość zwracana w zależności od rodzaju komendy (wg tabelki poniżej).

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

ID_kontrolki - identyfikator kontrolki (patrz podrozdział: "Identyfikatory kontrolek").

 Komenda, opcja            | Opis
---------------------------------------------------------------------------------------
"IsVisible", ""            | 1 - gdy kontrolka widoczna
"IsEnabled", ""            | 1 - gdy kontrolka włączona
"ShowDropDown", ""         | Rozwinięcie listy COMBO_BOX
"HideDropDown", ""         | Zwinięcie listy COMBO_BOX
"AddString", 'string'      | Dodaje string na końcu w LIST_BOX lub COMBO_BOX
"DelString", poz           | Usunięcie pozycji w LIST_BOX lub COMBO_BOX
"FindString", 'string'     | Położenie stringu w LIST_BOX lub COMBO_BOX
"SetCurrentSelection", poz | Wybór pozycji w LIST_BOX lub COMBO_BOX
"SelectString", 'string'   | Wybór pozycji o podanej nazwie w LIST_BOX lub COMBO_BOX
"IsChecked", ""            | 1 - przycisk BUTTON wciśnięty
"Check", ""                | Zaznacza RADIO lub wciska BUTTON
"UnCheck", ""              | Odznacza RADIO lub wciska BUTTON
"GetCurrentLine", ""       | Zwraca nr wiersz, w którym znajduje się kursor (dla EDIT)
"GetCurrentCol", ""        | Zwraca nr kolumny, w której znajduje się kursor (dla EDIT)
"GetCurrentSelection", ""  | Zwraca nazwę wybranej pozycji LIST_BOX lub COMBO_BOX
"GetLineCount", ""         | Zwraca ilość wierszy (dla EDIT)
"GetLine", line            | Zwraca tekst z wiersza o podanym numerze (dla EDIT)
"GetSelected", ""          | Zwraca zaznaczony tekst (dla EDIT)
"EditPaste", 'string'      | Wklejenie tekstu 'string' w miejscu kursora
"CurrentTab", ""           | Zwraca bieżący tebulator
"TabRight", ""             | W prawo do następnego tabulatora
"TabLeft", ""              | W lewo do następnego tabulatora
"SendCommandID", ID_kom    | Symulacja zdarzenie WM_COMMAND, komendy wywoływanej przez 
                           | opcje menu, przyciski okna dialogowego i klawisza skrótów
---------------------------------------------------------------------------------------
Gdzie opcje:
poz       - nr pozycji
'string'  - wprowadzany lub szukany tekst
line      - numer wiersza
ID_kom    - identyfikator komendy


ControlDisable

edytuj
ControlDisable ( "nazwa", "tekst", ID_kontrolki)

Dezaktywacja kontrolki (wyświetlana na szaro). Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

ID_kontrolki - identyfikator kontrolki (patrz podrozdział: "Identyfikatory kontrolek").


ControlEnable

edytuj
ControlEnable ( "nazwa", "tekst", ID_kontrolki)

Aktywacja kontrolki (wyświetlanej na szaro). Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

ID_kontrolki - identyfikator kontrolki (patrz podrozdział: "Identyfikatory kontrolek").

Przykład:

Run("notepad.exe")
Sleep(2000)
ControlDisable("[CLASS:Notepad]", "", "[CLASSNN:Edit1]")
Sleep(2000)
ControlEnable("[CLASS:Notepad]", "", "[CLASSNN:Edit1]")


ControlFocus

edytuj
ControlFocus ( "nazwa", "tekst", ID_kontrolki)

Funkcja ustawia kursor wprowadzania wewnątrz podanej kontrolki. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

ID_kontrolki - identyfikator kontrolki (patrz podrozdział: "Identyfikatory kontrolek").

Przykład:

Run("notepad.exe")
Sleep(1500)
ControlFocus("[CLASS:Notepad]", "", "Edit1")


ControlGetFocus

edytuj
ControlGetFocus ( "nazwa"[ , "tekst" ] )

Funkcja zwraca ClassNameNN (CLASSNN) kontrolki, w której znajduje się kursor wprowadzania, lub string pusty "" gdy okna nie znalezione (@error przyjmuje wartość 1).

"nazwa" - nazwa okna do przeszukiwania (patrz podrozdział: "Nazwy okien"). String pusty "" oznacza przeszukanie wszystkich okien.

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

Przykład:

MsgBox(0, "", ControlGetFocus(""))


ControlGetHandle

edytuj
ControlGetHandle ( "nazwa", "tekst", ID_kontrolki)

Funkcja zwraca uchwyt do podanej kontrolki, lub pusty string "" gdy wystąpił błąd (@error przyjmuje wartość 1).

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

ID_kontrolki - identyfikator kontrolki (patrz podrozdział: "Identyfikatory kontrolek").

Przykład:

Run("notepad.exe")
Sleep(1500)
$hHandle = ControlGetHandle("[CLASS:Notepad]", "", "Edit1")
MsgBox(0, "", $hHandle)


ControlGetPos

edytuj
ControlGetPos ( "nazwa", "tekst", ID_kontrolki)

Funkcja zwraca 4-elementową tablicę zawierającą informacje o wielkości i położeniu kontrolki wewnątrz okna. Jeżeli wystąpił błąd makro @error przyjmuje wartość 1.

$array[0] = położenie w poziomie (x)
$array[1] = położenie w pionie (y)
$array[2] = szerokość
$array[3] = wysokość

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

ID_kontrolki - identyfikator kontrolki (patrz podrozdział: "Identyfikatory kontrolek").

Przykład:

Run("notepad.exe")
Sleep(1500)
$aSize = ControlGetPos("[CLASS:Notepad]", "", "Edit1")


ControlGetText

edytuj
ControlGetText ( "nazwa", "tekst", ID_kontrolki)

Funkcja zwraca tekst z wnętrza kontrolki, lub string pusty, jeżeli wystąpił błąd (@error przyjmuje wartość 1).

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

ID_kontrolki - identyfikator kontrolki (patrz podrozdział: "Identyfikatory kontrolek").

Przykład:

Run("notepad.exe")
Sleep(1500)
$sTxt = ControlGetText("[CLASS:Notepad]", "", "Edit1")


ControlHide

edytuj
ControlHide ( "nazwa", "tekst", ID_kontrolki)

Funkcja powoduje ukrycie kontrolki. Zwraca 1 gdy sukces, lub 0 gdy nie ma okna lub kontrolki.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

ID_kontrolki - identyfikator kontrolki (patrz podrozdział: "Identyfikatory kontrolek").


ControlShow

edytuj
ControlShow ( "nazwa", "tekst", ID_kontrolki)

Funkcja powoduje wyświetlenie uprzednio ukrytej kontrolki. Zwraca 1 gdy sukces, lub 0 gdy nie ma okna lub kontrolki.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

ID_kontrolki - identyfikator kontrolki (patrz podrozdział: "Identyfikatory kontrolek").

Przykład:

Run("notepad.exe")
Sleep(1500)
ControlHide("[CLASS:Notepad]", "", "Edit1")
Sleep(3000)
ControlShow("[CLASS:Notepad]", "", "Edit1")


ControlMove

edytuj
ControlMove ( "nazwa", "tekst", ID_kontrolki, x, y [, szerokość [, wysokość]] )

Funkcja przesuwa i zmienia wymiary kontrolki wewnątrz okna. Zwraca 1 gdy sukces, lub 0 gdy nie ma okna lub kontrolki.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

ID_kontrolki - identyfikator kontrolki (patrz podrozdział: "Identyfikatory kontrolek").

x i y - nowe położenie kontrolki we współrzędnych względnych okna (wstawienie słowa kluczowego Default - okno nie przesuwa się).

szerokość i wysokość - nowe rozmiary okna (domyślnie okno nie zmienia rozmiarów).

Przykład:

Run("notepad.exe")
Sleep(1500)
ControlMove("[CLASS:Notepad]", "", "Edit1", Default, Default, 200, 200)
Sleep(2000)
ControlMove("[CLASS:Notepad]", "", "Edit1", 500, 200)


ControlSend

edytuj
ControlSend ( "nazwa", "tekst", ID_kontrolki, "string" [, flaga] )

Funkcja wysyła ciąg znaków (string) do kontrolki. Zwraca 1 gdy sukces, lub 0 gdy nie ma okna lub kontrolki.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

ID_kontrolki - identyfikator kontrolki (patrz podrozdział: "Identyfikatory kontrolek").

"string" - przesyłany ciąg znaków

flaga - opcjonalny parametr określający sposób interpretacji zawartości stringu

0 - (domyślnie) rozpoznawane są klawisze specjalne np.: {F1}, {SHIFTDOWN} itp.
1 - cały string traktowany jest jako zwykły tekst (także opis klawiszy specjalnych)

UWAGA: Pełny opis klawiszy specjalnych w podrozdziale "Symulacja użycia klawiatury".

ControlSend w odróżnieniu od funkcji Send umożliwia wysyłanie danych nie tylko do aktywnego okna, ale do wszystkich otwartych okien.

Przykład:

Run("notepad.exe")
Sleep(1000)
ControlSend("[CLASS:Notepad]","","Edit1","Przykładowy tekst{SHIFTDOWN} w oknie{SHIFTUP}{ENTER}",0)
Sleep(1000)
ControlSend("[CLASS:Notepad]","","Edit1","Przykładowy tekst{SHIFTDOWN} w oknie{SHIFTUP}{ENTER}",1)


ControlListView

edytuj
ControlListView ( "nazwa", "tekst", ID_kontrolki, "polecenie" [, opcja1 [, opcja2]] )

Funkcja wysyła komendy i odbiera informacje z kontrolki typu LIST_VIEV (tabela).


"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

ID_kontrolki - identyfikator kontrolki (patrz podrozdział: "Identyfikatory kontrolek").

"polecenie" - polecenie do wykonania

opcja1 i opcja2 - dodatkowe parametry zależne od rodzaju polecenia

"polecenie", opcja1, opcja2
------------------------------------------------------------------------------------------------
"DeSelect", od [, do] - usuwa zaznaczenie w podanym zakresie. 
"FindItem", "string do znalezienia" [, kolumna] - indeks wiersza tabeli ze znalezionym stringiem
                                                  lub -1 jeżeli nie znaleziono stringu. 
"GetItemCount" - zwraca ilość wierszy w tabeli. 
"GetSelected" [, opcja] zwraca string zawierający indeksy zaznaczonych wierszy.
              Jeżeli opcja=0 (domyślne) zwraca indeks tylko pierwszego zaznaczonego wiersza.
              Jeżeli opcja=1 zwracany string zawiera indeksy wszystkich zaznaczonych wierszy,
              rozdzielone znakiem pionowej kreski |, np.: "0|3|4|10".
              Jeżeli żaden wiersz nie jest zaznaczony, zwraca pusty string. 
"GetSelectedCount" - zwraca ilość zaznaczonych wierszy. 
"GetSubItemCount" - zwraca ilość kolumn. 
"GetText", wiersz, kolumna - zwraca tekst z podanego wiersza i kolumny. 
"IsSelected", wiersz - zwraca 1 jeżeli podany wiersz jest zaznaczony,
                       w przeciwnym razie zwraca 0. 
"Select", od [, do] - zaznacza wiersze w podanym zakresie. 
"SelectAll" - zaznacza wszystkie wiersze. 
"SelectClear" - usuwa zaznaczenie wszystkich wierszy. 
"SelectInvert" - zmienia zaznaczenie wierszy na przeciwne. 
"ViewChange", "widok" - zmiana aktualnego widoku. Parametr "widok" może przyjmować wartości:
                        "list", "details", "smallicons", "largeicons".

UWAGA: Indeksy wierszy i kolumn rozpoczynają się od 0.

Przykład (W7):

Send("^+{ESC}")     ;uruchomienie skrótem klawiszowym menadżera zadań
Sleep(1000)
ControlClick("Menedżer zadań Windows", "", "[ClassNN:SysTabControl321]", "", 1, 81, 12)
$sMessage = ControlListView("Menedżer zadań Windows", "", "[ClassNN:SysListView321]", "GetItemCount")
MsgBox(0, "GetItemCount: ", $sMessage)
$sMessage = ControlListView("Menedżer zadań Windows", "", "[ClassNN:SysListView321]", "FindItem", "USŁUGA SIECIOWA", 1)
MsgBox(0, "FindItem: ", $sMessage)
ControlListView("Menedżer zadań Windows", "", "[ClassNN:SysListView321]", "Select", 8)
$sMessage = ControlListView("Menedżer zadań Windows", "", "[ClassNN:SysListView321]", "GetSelected")
MsgBox(0, "GetSelected: ", $sMessage)
$sMessage = ControlListView("Menedżer zadań Windows", "", "[ClassNN:SysListView321]", "GetText", 13, 1)
MsgBox(0, "GetText: ", $sMessage)


ControlSetText

edytuj
ControlSetText ( "nazwa", "tekst", ID_kontrolki, "nowy_tekst" [, flaga] )

Funkcja wstawia nowy tekst do kontrolki, zastępując nim stary. Zwraca 1 gdy sukces, lub 0 gdy nie ma okna lub kontrolki.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

ID_kontrolki - identyfikator kontrolki (patrz podrozdział: "Identyfikatory kontrolek").

"nowy_tekst" - tekst wstawiany do kontrolki

flaga - opcjonalny parametr określający czy okno ma być odświeżone. Domyślnie 0 - okno nieodświeżane, wartość różna od 0 - okno odświeżone.

Przykład:

Run("notepad.exe")
Sleep(1000)
ControlSend("[CLASS:Notepad]", "", "Edit1", "Przykładowy tekst")
Sleep(1000)
ControlSetText("[CLASS:Notepad]", "", "Edit1", "Nowy tekst")


ControlTreeView

edytuj
ControlTreeView ( "nazwa", "tekst", ID_kontrolki, "komenda" [, opcja1 [, opcja2]] )

Funkcja wysyła polecenia do drzewa kontrolki.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

ID_kontrolki - identyfikator kontrolki (patrz podrozdział: "Identyfikatory kontrolek") lub uchwyt uzyskany funkcją ControlGetHandle.

"komenda" - polecenie wysyłane do kontrolki.

opcja1 - dodatkowy parametr wymagany przez niektóre polecenia.

opcja2 - dodatkowy parametr wymagany przez niektóre polecenia.

komenda     | opcja1         | opcja2    |
------------------------------------------------------------------------------
Check       | pozycja drzewa |           | zaznacza pole checkbox
------------------------------------------------------------------------------
Collapse    | pozycja drzewa |           | zwinięcie poz. potomnych
------------------------------------------------------------------------------
Exists      | pozycja drzewa |           | zwraca 1 gdy poz. istnieje
------------------------------------------------------------------------------
Expand      | pozycja drzewa |           | rozwinięcie poz. potomnych
------------------------------------------------------------------------------
GetItemCount| pozycja drzewa |           | zwraca ilość poz. potomnych
------------------------------------------------------------------------------
GetSelected | [, 0] - domyślnie          | zwraca nazwę
            | [, 1]                      | zwraca indeks
            |                            | wybranej pozycji drzewa
------------------------------------------------------------------------------
GetText     | pozycja drzewa |           | zwraca tekst z poz. drzewa
------------------------------------------------------------------------------
IsChecked   |                |           | zwraca stan pola checkbox
------------------------------------------------------------------------------
Select      | pozycja drzewa |           | wybranie pozycji drzewa
------------------------------------------------------------------------------
Uncheck     | pozycja drzewa |           | usunięcie zaznaczenia pole checkbox

"pozycja drzewa" - string będący ciągiem nazw lub indeksów gałęzi prowadzących do określonej pozycji drzewa.

Przykładowo dla drzewa o schemacie:

Poz_0
---> Poz_0_0
---> Poz_0_1
---> Poz_0_2
---> ---> Poz_0_2_0
---> ---> Poz_0_2_1
Poz_1
Poz_2

String wyboru pozycji Poz_0_2_1 będzie miał postać:

"Poz_0|Poz_0_2|Poz_0_2_1" - za pomocą nazw gałęzi

lub

"#0|#2|#1" - za pomocą indeksów gałęzi

Numeracja indeksów rozpoczyna się od 0. Znak | służy do rozdzielenia poszczególnych poziomów.

Przykład oparty na powyższym schemacie drzewa:

#include <GUIConstantsEx.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>

;tworzenie GUI
$gui = GUICreate("Test ControlTreeview:", 250, 200,400,200)
$tree = GUICtrlCreateTreeView(6, 6, 240, 180, _
                              BitOR($TVS_HASLINES, $TVS_LINESATROOT, _
                              $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
$h_tree = ControlGetHandle($gui, "", $tree)

;tworzenie drzewa
$g0 = GUICtrlCreateTreeViewItem("Gałąź główna 0", $tree)
	GUICtrlCreateTreeViewItem("Podgałąź 0/0", $g0)
	GUICtrlCreateTreeViewItem("Podgałąź 0/1", $g0)
	$g0_2 = GUICtrlCreateTreeViewItem("Podgałąź 0/2", $g0)
		GUICtrlCreateTreeViewItem("Podgałąź 0/2/0", $g0_2)
		GUICtrlCreateTreeViewItem("Podgałąź 0/2/1", $g0_2)
$g1 = GUICtrlCreateTreeViewItem("Gałąź główna 1", $tree)
$g2 = GUICtrlCreateTreeViewItem("Gałąź główna 2", $tree)

GUISetState(@SW_SHOW)

;przykładowe operacje na drzewie
MsgBox(0,"Opis:", "Rozwinięcie gałęzi potomnych.")
ControlTreeView($gui, "", $h_tree, "Expand", "Gałąź główna 0")
MsgBox(0,"Opis:", "Rozwinięcie gałęzi potomnych - następny poziom.")
ControlTreeView($gui, "", $h_tree, "Expand", "Gałąź główna 0|Podgałąź 0/2")
MsgBox(0,"Opis:", "Zaznaczenie pola 'checkbox'.")
ControlTreeView($gui, "", $h_tree, "Check", "#0|#2|#0") ;dla odmiany indeksami
MsgBox(0,"Opis:", "Zwinęcie gałęzi potomnych.")
ControlTreeView($gui, "", $h_tree, "Collapse", "#0")
MsgBox(0,"Opis:", "Wybranie pozycji.")
ControlTreeView($gui, "", $h_tree, "Select", "#1")

Do
   $msg = GUIGetMsg()
   If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Until 0


StatusbarGetText

edytuj
StatusbarGetText ( "nazwa" [, "tekst" [, part]] )

Funkcja zwraca tekst odczytany z paska statusu (pasek w dolnej części okna), lub string pusty "" gdy wystąpił błąd (makro @error przyjmuje wartość 1).

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

part - określa z której części paska statusu ma być odczytana informacja, domyślnie 1 czyli z pierwszej części od lewej strony.

StatusbarGetText potrafi odczytać tekst tylko ze standardowych pasków statusu.


Zarządzanie i symulacja użycia klawiatury

edytuj
Send ( "klawisze" [, flaga] )

Funkcja wysyła do aktywnego okna symulację naciśnięcia klawiszy. Nie zwraca żadnej wartości.

klawisze - string opisujący sekwencję symulowanych klawiszy

flaga - opcjonalny parametr określający sposób interpretacji zawartości stringu

0 - (domyślnie) rozpoznawane są klawisze specjalne np.: {F1}, {SHIFTDOWN} itp.
1 - cały string traktowany jest jako zwykły tekst (także opis klawiszy specjalnych)

Znaki wysyłane przez funkcję Send:

Zwykłe klawisze:
----------------------------------------------------------------------------------------
Wszystkie klawisze z wyjątkiem specjalnych np.: Send("autoit") wyśle tekst "autoit"

Klawisze specjalne:
----------------------------------------------------------------------------------------
! - klawisz ALT np.: Send("!a") oznacza ALT+a, ale Send("!A") to ALT+SHIFT+a
+ - klawisz SHIFT np.: Send("autoi+t") wyśle "autoiT"
^ - klawisz kontrol np.: Send("^!a") oznacza CTRL+ALT+a
# - klawisz WIN np.: Send("#r") oznacza WIN+r, więc wywoła okno dialogowe "Uruchomienie"
{!} - !
{+} - +
{^} - ^
{#} - #
{{} - {
{}} - }
{ASC kod}            - znak o podanym kodzie ASC lub Unicode
{SPACE}              - SPACJA
{ENTER}              - ENTER
{ALT}                - ALT
{BACKSPACE} lub {BS} - BACKSPACE
{DELETE} lub {DEL}   - DELETE
{UP}                 - strzałka w górę
{DOWN}               - strzałka w dół
{LEFT}               - strzałka w lewo
{RIGHT}              - strzałka w prawo
{HOME}               - HOME
{END}                - END 
{ESCAPE} lub {ESC}   - ESCAPE 
{INSERT} lub {INS}   - INSERT
{PGUP}               - PageUp 
{PGDN}               - PageDown 
{F1} do {F12}        - klawisze funkcyjne F1 do F12
{TAB}                - TAB 
{PRINTSCREEN}        - Print Screen
{LWIN}               - lewy WIN
{RWIN}               - prawy WIN
{NUMLOCK on}         - włączenie NUMLOCK
{NUMLOCK off}        - wyłączenie NUMLOCK
{NUMLOCK toggle}     - przełączenie NUMLOCK
{CAPSLOCK on}        - włączenie CAPSLOCK
{CAPSLOCK off}       - wyłączenie CAPSLOCK
{CAPSLOCK toggle}    - przełączenie CAPSLOCK
{SCROLLLOCK on}      - włączenie SCROLLLOCK
{SCROLLLOCK off}     - wyłączenie SCROLLLOCK
{SCROLLLOCK toggle}  - przełączenie SCROLLLOCK
{BREAK}              - BRAKE
{PAUSE}              - PAUSE 
{NUMPAD0}do{NUMPAD9} - 0 do 9 (klawiatura numeryczna)
{NUMPADMULT}         - * (klawiatura numeryczna)
{NUMPADADD}          - + (klawiatura numeryczna)
{NUMPADSUB}          - - (klawiatura numeryczna)
{NUMPADDIV}          - / (klawiatura numeryczna)
{NUMPADDOT}          - . (klawiatura numeryczna)
{NUMPADENTER}        - ENTER (klawiatura numeryczna)
{APPSKEY}            - Windows App key (między prawym WIN a CTRL)
{LALT}               - lewy ALT
{RALT}               - prawy ALT
{LCTRL}              - lewy CTRL
{RCTRL}              - prawy CTRL
{LSHIFT}             - lewy SHIFT
{RSHIFT}             - prawy SHIFT
{SLEEP}              - SLEEP (klawisz uśpienia)
{ALTDOWN}            - przytrzymanie ALT, aż do {ALTUP}
{ALTUP}              - zwolnienie klawisza ALT
{SHIFTDOWN}          - przytrzymanie SHIFT, aż do {SHIFTUP}
{SHIFTUP}            - zwolnienie klawisza SHIFT
{CTRLDOWN}           - przytrzymanie CTRL, aż do {CTRLUP}
{CTRLUP}             - zwolnienie klawisza CTRL
{LWINDOWN}           - przytrzymanie lewego WIN,aż do {LWINUP}
{LWINUP}             - zwolnienie lewego klawisza WIN
{RWINDOWN}           - przytrzymanie prawego WIN, aż do {RWINUP}
{RWINUP}             - zwolnienie prawego klawisza WIN
{OEM_102}            - \ lub | na 102-klawiszowej klawiaturze

Klawisze multimedialne:
----------------------------------------------------------------------------------------
{VOLUME_MUTE}        - wyciszenie
{VOLUME_DOWN}        - zmniejszenie głośności
{VOLUME_UP}          - zwiększenie głośności
{MEDIA_NEXT}         - następny plik multimedialny
{MEDIA_PREV}         - poprzedni plik multimedialny
{MEDIA_STOP}         - zatrzymanie odtwarzania
{MEDIA_PLAY_PAUSE}   - pauza

Przyciski przeglądarki internetowej:
----------------------------------------------------------------------------------------
{BROWSER_BACK}       - do tyłu
{BROWSER_FORWARD}    - do przodu
{BROWSER_REFRESH}    - odświeżenie
{BROWSER_STOP}       - stop
{BROWSER_SEARCH}     - szukaj
{BROWSER_FAVORITES}  - ulubione
{BROWSER_HOME}       - strona startowa

Uruchamianie aplikacji:
----------------------------------------------------------------------------------------
{LAUNCH_MAIL}        - program pocztowy
{LAUNCH_MEDIA}       - media player 
{LAUNCH_APP1}        - aplikacja użytkownika 1
{LAUNCH_APP2}        - aplikacja użytkownika 2

W {ASC kod} dla 2-cyfrowego kodu ASCII należy użyć początkowego 0, np.: Send("{ASC 065}").

Aby wysłać znaki UNICODE należy wpisać kod znaku (dziesiętnie lub szesnastkowo), np.: Send("{ASC 2709}") lub Send("{ASC 0xA95}").

Wysyłanie klawiszy może być powtarzane, np.:

Send("{DEL 4}")  ; czterokrotne wciśnięcie klawisza DEL
Send("{s 10}")   ; 10-krotne wciśnięcie klawisza s
Send("+{TAB 2}") ; dwukrotne wciśnięcie kombinacji klawiszy SHIFT+TAB

Jeżeli licznik wynosi 0, to klawisz nie będzie wysłany.

Można za znak i licznik użyć zmiennych:

$n=10
$z="x"
Send("{"&$z&" "&$n&"}")  ; 10-krotne wciśnięcie klawisza x

Klawisz można przytrzymać wciśnięty:

Send("{x DOWN}")  ; przytrzymanie wciśniętego klawisza x
Sleep(2000)
Send("{x UP}")    ; zwolnienie klawisza x

Opt("SendKeyDelay",...) - ustawienie czasu przerwy między samo powtarzaniem klawiszy (patrz: AutoIt/Dyrektywy i funkcje konfiguracyjne translatora).

Opt("SendKeyDownDelay",...) - ustawienie czasu opóźnienia samo powtarzania klawiszy

UWAGA: System operacyjny uniemożliwia symulację wciśnięcia kombinacji klawiszy CTRL+ALT+DEL.


SendKeepActive

edytuj
SendKeepActive ( "nazwa" [, "tekst" ] )

Funkcja aktywizuje podane okno w czasie działania funkcji Send. Zwraca 1 gdy sukces, lub 0 gdy okno nie istnieje.

Dzięki użyciu tej funkcji będziemy mieć pewność, że klawisze są wysyłane do właściwego okna, nawet jak w międzyczasie jakiś inny proces zmieni jego stan.

"nazwa" - nazwa okna (patrz podrozdział: "Nazwy okien").

"tekst" - dodatkowy warunek, tekst jaki musi być w oknie aby zostało uznane za istniejące, domyślnie string pusty "", czyli tekst dowolny (także jego brak).

Przykład (spróbuj w czasie działania skryptu zminimalizować okno notatnika):

Run("notepad.exe")
$handle=WinWait("[CLASS:Notepad]")
SendKeepActive($handle)
For $i = 0 To 9
    Sleep(1000)
    Send($i&" ")
Next


BlockInput

edytuj
BlockInput ( flaga )

Funkcja powoduje zablokowanie/odblokowanie klawiatury i myszki. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.

Działa tylko w trybie administratora. Aby mieć pewność zadziałania należy użyć dyrektywy #requireAdmin (patrz: AutoIt/Dyrektywy i funkcje konfiguracyjne translatora).

flaga = 1 - blokowanie
flaga = 0 - odblokowanie

Blokowanie działa do czasu odblokowania lub zakończenia działania skrypt. Zablokowane są tylko fizyczne urządzenia symulacje takie jak Send czy MouseMove w dalszym ciągu działają. Funkcji używa się w przypadku gdy użycie fizycznej klawiatury bądź myszki zakłóciłoby działanie skryptu (na przykład podczas wysyłania symulacji klawiszy).

Przykład:

#requireAdmin
BlockInput(1)  ;przez 5 sek. klawiatura i myszka będą zablokowane
Sleep(5000)
BlockInput(0)  ;odblokowanie klawiatury i myszki


HotKeySet

edytuj
HotKeySet ( "klawisze" [, "funkcja"] )

Funkcja definiuje tzw. gorące klawisze (klawisze skrótów). Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.

"klawisze" - kombinacja klawiszy (sposób opisu jak dla funkcji Send). Nie można zdefiniować niektórych skrótów klawiszowych, które są zarezerwowane dla systemu: Ctrl+Alt+Delete, F12, Win+B,D,E,F,L,M,R,U, Win+Shift+M. Klawisze Alt, Ctrl, Shift, Win można zdefiniować tylko w kombinacji z innymi klawiszami.

"funkcja" - funkcja jaka zostanie wywołana po wykryciu zdefiniowanej kombinacji klawiszy, jeżeli pominiemy ten parametr to definicja gorących klawiszy zostanie odwołana. Zarejestrowana funkcja nie może przyjmować parametrów.

UWAGA: Jeżeli za pomocą funkcji Send() chcemy wysłać taką samą kombinację klawiszy jaka została zdefiniowana przez HotKeySet(), należy wcześniej wyrejestrować funkcję HotKeySet(). Jeżeli tego nie zrobimy wywołanie Send() może spowodować powstanie pętli bez końca. Można też, o ile jest to możliwe, zastąpić wywołanie Send() przez ControlSend().

Przykład (hibernacja komputera klawiszami CTRL+ALT+BREAK, CTR+ALT+k - zakończenie skryptu):

HotKeySet("^!{BREAK}", "hibernacja")
HotKeySet("^!k", "koniec")
Do
Until False

Func hibernacja()  ;hibernacja komputera
   Run("C:\WINDOWS\system32\rundll32.exe powrprof.dll,SetSuspendState Hibernate")
EndFunc

Func koniec()      ;zakończenie skryptu
   Exit
EndFunc

Zarządzanie i symulacja użycia myszki

edytuj

MouseClick

edytuj
MouseClick ( "przycisk" [, x, y [, klik [, szybkość]]] )

Funkcja symuluje wciśnięcie przycisku myszki. Zwraca 1 gdy sukces, lub 0 gdy nieprawidłowa nazwa przycisku lub podano parametr x bez y.

"przycisk" - nazwa symulowanego przycisku (niektóre zależą od ustawienia w systemie przycisków myszki dla prawo lub leworęcznych)

"left" lub ""          - lewy przycisk (domyślnie)
"middle"               - środkowy
"right"                - prawy
"primary" lub "main"   - lewy (prawy - ustawienia dla leworęcznych)
"secondary" lub "menu" - prawy (lewy - ustawienia dla leworęcznych)

x i y - współrzędne miejsca kliknięcia, domyślnie aktualne położenie kursora (jeżeli użyjemy tych parametrów to muszą być podane oba jednocześnie). Jeżeli chcemy wykonać ruch w jednej osi to za drugi parametr podstawiamy Default.

klik - ilość kliknięć, domyślnie 1 (2 to dwuklik).

szybkość - szybkość przemieszczania kursora, 1 - najszybciej, 100 - najwolniej. Domyślnie 10. Wartość 0 powoduje natychmiastowe przeniesienia kursora.

Przykład:

MouseClick("left", 200, 600, 2)


MouseClickDrag

edytuj
MouseClickDrag ( "przycisk", x1, y1, x2, y2 [, szybkość] )

Funkcja symuluje przeciągnięcie myszką. Zwraca 1 gdy sukces, lub 0 gdy podano niewłaściwą nazwę przycisku.

Realizuje następującą sekwencję działań myszki:

- najechanie kursorem na punk startowy

- wciśnięci żądanego klawisza

- przesunięcie kursora do punktu końcowego z przytrzymanym klawiszem

- zwolnienie klawisza

Jest to sposób przesuwania lub zaznaczania obiektów na ekranie.

"przycisk" - nazwa symulowanego przycisku (tak jak dla MouseClick).

x1 i y1 - współrzędne punktu startowego.

x2 i y2 - współrzędne punktu końcowego.

Przykład:

MouseClickDrag("left", 0, 200, 600, 400)


MouseMove

edytuj
MouseMove ( x, y [, szybkość] )

Funkcja przesuwa kursor myszki. Nie zwraca żadnych wartości.

x i y - współrzędne nowego położenia kursora. Jeżeli chcemy wykonać ruch w jednej osi to za drugi parametr podstawiamy Default.

szybkość - szybkość przemieszczania kursora, 1 - najszybciej, 100 - najwolniej. Domyślnie 10. Wartość 0 powoduje natychmiastowe przeniesienia kursora.

Przykład:

MouseMove(800, 200, 50)


MouseDown / MouseUp

edytuj
MouseDown ("przycisk")
MouseUp ("przycisk")

Funkcje symulują wciśnięcie i zwolnienie określonego przycisku myszki w miejscu aktualnego położenia kursora. Zwracają 1 gdy sukces, lub 0 gdy podano niewłaściwą nazwę przycisku.

"przycisk" - nazwa symulowanego przycisku (tak jak dla MouseClick).

Po MouseDown przycisk jest wciśnięty tak długo aż nie zostanie zwolniony przez MouseUp, lub skrypt nie zakończy działania.

Przykład:

MouseDown("left")
Sleep(100)
MouseUp("left")


MouseWheel

edytuj
MouseWheel ( "kierunek" [, obrót] )

Funkcja symuluje obrót kółkiem myszki. Zwracają 1 gdy sukces, lub 0 gdy podano niewłaściwą nazwę kierunku.

"kierunek" - nazwa opisująca kierunek obrotu kółka ("up" lub "down").

obrót - wielkość obrotu kółka (domyślnie 1 czyli obrót minimalny, podana tu liczba jest wielokrotnością minimalnego obrotu).

Przykład:

MouseWheel("up", 10)


MouseGetCursor

edytuj
MouseGetCursor ()

Funkcja zwraca ID kursora. Nie przyjmuje żadnych parametrów.

 0 = HAND        (łapka)
 1 = APPSTARTING (strzałka z animowanym niebieskim kółkiem)
 2 = ARROW       (strzałka)
 3 = CROSS       (krzyżyk)
 4 = HELP        (strzałka ze znakiem zapytania)
 5 = IBEAM       (jak wielkie I, tryb insert w edytorach)
 6 = ICON
 7 = NO          (czerwone kółko ze skośną poprzeczką)
 8 = SIZE
 9 = SIZEALL     (krzyżyk ze strzałkami na końcach)
10 = SIZENESW    (skośna linia ze strzałkami na końcach  /)
11 = SIZENS      (pionowa linia ze strzałkami na końcach |)
12 = SIZENWSE    (skośna linia ze strzałkami na końcach  \)
13 = SIZEWE      (pozioma linia ze strzałkami na końcach -)
14 = UPARROW     (strzałka z grotem do góry)
15 = WAIT        (animowane niebieskie kółko)
16 = UNKNOWN     (kursor ukryty)

Przykład:

MsgBox(0, "ID kursora:", MouseGetCursor())


MouseGetPos

edytuj
MouseGetPos ( [ par ] )

Funkcja zwraca położenie kursora myszki. Forma zwracanej informacji zależy od podanego parametru.

parametr pominięty - funkcja zwraca dwuelementową tablicę, $array[0] = x, $array[1] = y.

par = 0 - funkcja zwraca współrzędną x jako liczbę typu INTEGER.

par = 1 - funkcja zwraca współrzędną y jako liczbę typu INTEGER.

Przy operowaniu na współrzędnych bezwzględnych wartości zwracane są zawsze dodatnie, dla współrzędnych względnych mogą być także ujemne (patrz: AutoIt/Dyrektywy i funkcje konfiguracyjne translatora).

Przykład:

MsgBox(0, "Współrzędne kursora:", "X = "&MouseGetPos(0)&@LF&"Y = "&MouseGetPos(1))


Inne przydatne funkcje

edytuj

Shutdown

edytuj
Shutdown ( kod [, powód] )

Funkcja wymusza zamknięcie systemu. Sposób zamknięcia zależy od porametru kod. Zwraca 1 gdy sukces lub 0 gdy wystąpił błąd.

kod - kod sposobu zamknięcia systemu

 0 = Logoff (wylogowanie)
 1 = Shutdown (zamknięcie systemu)
 2 = Reboot (ponowne uruchomienie)
 4 = Force (natychmiastowe wylogowanie bez czekania na potwierdzenie)
 8 = Power down (wyłączenie zasilania)
16 = Force if hung (ponowne uruchomienie w wypadku awarii)
32 = Standby (wstrzymanie)
64 = Hibernate (hibernacja)

Można sumować niektóre wartości, np. kod = 9 (1 + 8 = 9).

UWAGA:

Tryb wstrzymania lub hibernacji jest ignorowany, jeśli inne kody są także wymienione (np.: kod 33 spowoduje zamknięcie systemu).

W nowszych komputerach nie ma różnicy między kodem 1 i 8. System i tak zrealizuje normalne zamknięcie.

Dla kodu 0 system prosi o potwierdzenie o ile są otwarte niezapisane dokumenty, kod 4 wymusza wylogowanie bez pytania o potwierdzenie (może to spowodować utratę niezapisanych danych).

Przykład (hibernacja komputera klawiszami CTRL+ALT+BREAK, tym razem bez uruchamiania systemowego programu, CTR+ALT+k - zakończenie skryptu):

HotKeySet("^!{BREAK}", "hibernacja")
HotKeySet("^!k", "koniec")
Do
Until False
 
Func hibernacja()  ;hibernacja komputera
   Shutdown(64)
EndFunc
 
Func koniec()      ;zakończenie skryptu
   Exit
EndFunc


PixelGetColor

edytuj
PixelGetColor ( x , y [, hwnd] )

Funkcja zwraca kod koloru piksela o podanych współrzędnych, lub -1 gdy złe współrzędne.

x i y - współrzędne badanego piksela na całym ekranie lub w oknie.

hwnd - uchwyt okna do którego odnosi się funkcja, jeżeli nie podamy to zakresem jest cały pulpit.

Przykład (odczytanie koloru piksela pod kursorem myszki, w miejscu kliknięcia lewym klawiszem):

#include <Misc.au3>
Do
Until _IsPressed("01")
$tab=MouseGetPos()
$col=Hex(PixelGetColor ($tab[0], $tab[1]), 6)
MsgBox(0,"Kolor:", $col)


PixelChecksum

edytuj
PixelChecksum ( lewo, góra, prawo, dół [, krok [, hwnd [, mode]]] )

Funkcja zwraca sumę kontrolną pikseli z zadanego obszaru, lub 0 gdy wystąpił błąd.

lewo, góra, prawo, dół - współrzędne narożników badanego obszaru (lewego-górnego i prawego-dolnego).

krok - co który punkt z zadanego obszaru ma być obliczany, domyślnie 1 czyli każdy.

hwnd - uchwyt okna do którego odnosi się funkcja, domyślnie cały ekran.

mode - metoda obliczania sumy kontrolnej, domyślnie mode = 0, metoda dla mode = 1 jest nieco wolniejsza, ale dokładniejsza.

Funkcja może być wykorzystana do monitorowania zmian w wybranym fragmencie ekranu. Nie określi niestety na czym te zmiany polegały.

$sk=PixelChecksum(0, 0, 50, 50)
Do
   Sleep(100)
Until $sk<>PixelChecksum(0, 0, 50, 50)
MsgBox(0, "UWAGA!", "Zmiana na ekranie!")


PixelSearch

edytuj
PixelSearch ( lewo, góra, prawo, dół, kolor [, odchyłka_koloru [, krok [, hwnd]]] )

Funkcja szuka w prostokątnym obszarze ekranu piksela o określonym kolorze. Zwraca dwuelementową tablicę ze współrzędnymi znalezionego piksela, jeżeli piksela nie znaleziono to makro @error przyjmuje wartość 1.

lewo, góra, prawo, dół - współrzędne narożników badanego obszaru (lewego-górnego i prawego-dolnego).

kolor - kod poszukiwanego koloru (patrz p.6.10.1: AutoIt/GUI).

odchyłka_kolor - dopuszczalna odchyłka każdej ze składowych RGB od zadanej wartości koloru, zawiera się w granicach (szesnastkowo) od 0 do FF (0-255). Domyślną wartością jest 0, co oznacza dokładne dopasowanie koloru.

krok - co który punkt z zadanego obszaru ma być sprawdzany, domyślnie 1 czyli każdy.

hwnd - uchwyt okna do którego odnosi się funkcja, domyślnie cały ekran.

UWAGA: Przeszukiwanie jest kończone po znalezieniu pierwszego piksela spełniającego zadane kryteria koloru.

Przykład:

$wsp=PixelSearch(0,0,200,300,0xFF0000,10) ;szukamy czerwonego piksela
If Not @error Then
   MsgBox(0,"PixelSearch:","(x, y) = ("&$wsp[0]&", "&$wsp[1]&")")
Else
   MsgBox(0,"PixelSearch:", "Nie ma piksela o zadanym kolorze!")
EndIf


Należało by w tym miejscu opisać działanie użytej w przykładzie funkcji _IsPressed. Jest to funkcja biblioteczna, więc jej użycie wymaga dołączenia za pomocą dyrektywy #Include, do skryptu odpowiedniej biblioteki ( w tym wypadku Misc.au3). W zasadzie podręcznik koncentruje się na funkcjach wewnętrznych interpretera, ale ze względu na użyteczność robię wyjątek (opis będzie skrócony - pełny w AutoIt Help).

_IsPressed

edytuj
 _IsPressed ( "kod" )

Funkcja sprawdza czy jest wciśnięty klawisz o podanym kodzie. Zwraca True gdy tak, lub False gdy nie.

"kod" - kod klawisza (obejmuje wszystkie klawisze myszki i klawiatury, tutaj podam tylko klawisze myszki)

kod = "01" - lewy klawisz myszki
kod = "02" - prawy klawisz myszki
kod = "03" - środkowy klawisz myszki


I co z tym wszystkim możemy zrobić?

edytuj

Wykorzystując opisane powyżej funkcje można pozbyć się konieczności wykonywania wielu monotonnych, wielokrotnie powtarzających się czynności. Za pomocą odpowiedniego skryptu czynności te możemy wykonać automatycznie, dokładniej i szybciej niż użytkownik.

Automatyzacja uruchamiania Total Commandera

edytuj

Zacznijmy od bardzo prostego przykładu. Jedynym utrudnieniem przy korzystaniu z niezarejestrowanej wersji Total Commandera jest konieczność wciśnięcia w oknie dialogowym przycisku 1, 2 lub 3 (numer jest losowany przy każdym uruchomieniu). Tą fatygującą czynność z łatwością możemy zlecić skryptowi:

Run("TOTALCMD.EXE")
$WinHandle=WinWaitActive("[CLASS:TNASTYNAGSCREEN]")
$num=ControlGetText($WinHandle,"","TPanel2")
ControlClick($WinHandle,"","TButton"&4-$num)

Ponieważ TC reaguje nie tylko na wciśnięcie klawisza myszką, ale także na wciśnięciu odpowiedniego klawisza klawiatury, nasz skrypt może wyglądać tak:

Run("TOTALCMD.EXE")
$WinHandle=WinWaitActive("[CLASS:TNASTYNAGSCREEN]")
Send(ControlGetText($WinHandle,"","TPanel2"))

Wystarczy teraz skompilować skrypt nazywając go np. startTC.exe, i uruchamiać TC nie bezpośrednio, ale za pomocą tego skryptu. Oczywiście TC i nasz skrypt muszą znajdować się w tym samym folderze.

Informacje niezbędne do stworzenia skryptu, a dotyczące okien i kontrolek automatyzowanego programu uzyskaliśmy za pomocą programu AutoIt Window Info Tool (plik w folderze AutiIt'a Au3Info.exe).

Jak widać nawet w tak prostym przykładzie, aby zautomatyzować jakąś czynność należy poznać działanie programu, którego ta czynność dotyczy.


Tworzenie środowiska pracy

edytuj

Jeżeli chcemy programować w AutoIt, to pracę musimy rozpocząć od stworzenia na ekranie wygodnego środowiska pracy. Czynność jest dość żmudna bo trzeba uruchomić kilka programów, pozycjonować okna ustalając ich wielkość i położenie. Czynność tę możemy zlecić skryptowi, mając jednocześnie gwarancję, że nasze środowisko będzie miało zawsze taką samą formę , do której już się przyzwyczailiśmy i uważamy za optymalną.

Przyjmijmy takie założenia środowiska (oczywiście każdy może to zrobić po swojemu):

- lewa strona ekranu z oknem edytora SciTe

- prawa strona ekranu z niniejszym podręcznikiem

- program Au3Info do odczytu danych okien i kontrolek (ikona na pasku zadań)

- kalkulator systemowy (ikona na pasku zadań).

Przykładowy skrypt może wyglądać tak (oczywiście ścieżki dostępu musimy dostosować do własnych realiów):

;Tworzenie środowiska do programowania w AutoIt
;
;strona Wikibooks z niniejszym podręcznikiem
ShellExecute("http://pl.wikibooks.org/wiki/AutoIt")
Sleep(1000)
$h1=WinGetHandle("[ACTIVE]")
WinMove($h1,"",880,0,800,1010) ;pozycjonowanie okna przeglądarki
if Not ProcessExists("Au3Info.exe") Then
   ;uruchomienie programu Au3Info
   Run("e:\Programowanie\WASTA - programowanie\AutoIt3\Au3Info.exe")
   Sleep(500)
   $h2=WinGetHandle("[ACTIVE]")
   WinSetState($h2,"",@SW_MINIMIZE)
EndIf
if Not ProcessExists("calc.exe") Then
   ;uruchomienie kalkulatora
   Run("calc.exe")
   Sleep(500)
   $h2=WinGetHandle("[ACTIVE]")
   WinSetState($h2,"",@SW_MINIMIZE)
EndIf
;uruchomienie edytora SciTe
$pid_1=Run("e:\Programowanie\WASTA - programowanie\AutoIt3\SciTE\SciTE.exe")
RunWait($pid_1)
Sleep(1000)
$h3=WinGetHandle("[ACTIVE]")
;pozycjonowanie okna edytora
WinMove($h3,"",0,0,880,1010,0)


Automatyzacja instalowania programów

edytuj

Załóżmy, że musimy na kilku komputerach zainstalować ten sam pakiet programów. Jest to czynność żmudna i pracochłonna. Musimy oddzielnie uruchamiać instalatory kolejnych programów, w czasie instalacji obserwować ekran i reagować na zapytania instalatora. I tak kilkanaście razy to samo. W takim przypadku opłaca się napisać skrypt, który cały proces instalacji przeprowadzi automatycznie. Wystarczy taki skrypt skompilować i zgrać na pendrive lub płytę razem z instalatorami programów. Następnie uruchamiamy skrypt na docelowym komputerze i spokojnie pijemy kawę. Cała praca wykona się sama.

Poniżej przykład skryptu do instalowania popularnej przeglądarki plików graficznych IrfanView:

;Instalator programu IrfanView
;WIN7
;przeglądarka Firefox
$pid=Run("iview432_setup.exe")
ProcessWait($pid)
Sleep(500)
Send("{TAB 3}")
Send("{SPACE}")
Send("{TAB}")
Send("{SPACE}")
Send("{TAB}")
Send("{DOWN}")
ControlCommand("IrfanView Setup","","Button11","IsChecked")
Send("{ENTER 3}")
Send("{TAB 6}")
Send("{ENTER 2}")
Send("{TAB}")
Send("{ENTER}")
Send("{SPACE}")
Send("{ENTER}")
Sleep(3000)
;po instalacji instalator wywołuje stronę domową Irfana,
;a ponieważ nie można tego wyłączyć, zamykamy zakładkę
;za pomocą skrótu klawiszowego przeglądarki (Ctrl+F4)
If WinExists("[CLASS:MozillaWindowClass]") Then Send("^{F4}")

Żeby napisać taki skrypt trzeba najpierw prześledzić działanie instalatora i ustalić jakie decyzje chcemy podejmować w czasie instalacji. Po prostu przeprowadzamy ręcznie proces instalacji, zapisując jakie klawisze i w jakiej kolejności należy wciskać, jakie pola zaznaczać bądź odznaczać, co gdzie wpisać itp. Następnie cały ten proces odtwarzamy za pomocą funkcji AutiIt'a.

W przykładzie mamy instalację tylko jednego programu, ale nic nie stoi na przeszkodzie aby dopisać do niego następne sekcje odnoszące się do kolejnych programów.

UWAGA: Czasami proces automatycznej instalacji jest utrudniany przez programy typu "Internet Security", które zgłaszają własne zapytania i komunikaty. Należy wtedy na czas instalacji wyłączy je lub niektóre ich funkcje, np. w używanym przeze mnie programie "COMODO Internet Security" należy wyłączyć funkcję "Defense+".


Ćwiczenia

edytuj

1. W oparciu o zdobyte w tym rozdziale informacje, zmodyfikować program zegara z ćwiczeń w GUI tak, aby możliwa była regulacja przejrzystości okna zegara.


Przykładowe rozwiązania: AutoIt/Ćwiczenia dla zaawansowanych - przykładowe rozwiązania