Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[TuT] Full Autoit V3 Tutorial


Rekomendowane odpowiedzi

Opublikowano

Dziękuję za podpięcie.

Ostatnia aktualizacja: 17.08.10 01:50

< OMG, 60k wyświetleń, nie liczyłem na taki wynik >

Witam! Robię ten tutorial z myślą o początkujących koderach autoit. Najpierw chciałem zrobić go w wersji pdf i wystawić na allegro, ale stwierdziłem, że nie miałby dużego wzięcia. Dlatego udostępnię go tutaj, w 100% za darmo. No to go!

Spis Treści:NEW! Zamiast obrazków są duże, dobrze widoczne linki. Mam nadzieję że to się lepiej sprawdzi!
Część I: Wprowadzenie
Część II: Zmienne & Pętle
Część III: Własne Funkcje & Łatwe KODA
Część IV: Instrukcje Warunkowe & _isPressed
Część V: DllOpen & DllCall

1. Potrzebne oprogramowanie

1.1. Kompilator

Jeśli masz już kompilator możesz pominąć ten punkt. Jeśli jeszcze nie ściągnąłeś lub nie zainstalowałeś kompilatora AutoIt 3 to czytaj dalej.
Jak w każdym języku programowania żeby cokolwiek 'ulepić' potrzebny będzie nam kompilator. Jest to tak jakby komunikator między nami a komputerem. Dzięki niemu komputer wie jak ma zinterpretować kod programu. Kompilator AutoIt 3 możesz pobrać tutaj:
>> STRONA PRODUCENTA <<
Pobieramy dwie pierwsze pozycje z listy (dla niekumatych – Rys. 1.1)
img11.png

Rys. 1.1
1.2. SciTE

Jeśli pobrałeś i zainstalowałeś oba pliki które pokazałem wyżej to masz na komputerze główny program AutoIt'a i zaawansowaną wersję edytora skryptów SciTE (tyle musisz wiedzieć). Czym jest SciTE? To taki notatnik po tuningu. Tylko zamiast neonów, alufelg i metalicznego lakieru ten dostał kolorowanie składni, pomoc dla funkcji AutoIt v3 i mnóstwo dodatkowych narzędzi ułatwiających pracę ze skryptami. Prawdopodobnie i tak nie użyjesz wszystkich, ale na 99% najczęściej będziesz używał Pomocy i Koda (pomijam oczywisty kompilator).

2. 'Hello World!'

2.1. Wstęp

Na wstępie napiszę, że jak wiadomo kulturalnie jest przywitać się z kimś gdy go spotykamy, prawda? Ludzie robią to odruchowo, nawet o tym nie myśląc. Jeśli czytałeś już jakiś kurs do jakiegokolwiek języka programowania to zapewne wiesz co oznacza tytuł tego rozdziału. Jeśli nie, to postaram się to wyjaśnić. Tytułowe 'Hello World!' to nazwa pierwszego programu jaki napiszesz w jakimkolwiek języku jeśli zaczynasz się go uczyć z książki lub kursu internetowego. Te powitanie ze światem jest formą treningu, zapoznania się z edytorem i kompilatorem.

2.2. Poznanie SciTE

Zanim coś napiszesz powinieneś poznać edytor. Na poniższej ilustracji postaram się go opisać (Rys. 2.1).

img21.png

Rys. 2.1

To tyle na temat przycisków. Teraz przejdźmy do czegoś poważniejszego, czyli do pierwszego programu.

2.3. Pierwszy program – 'Hello World!'

Poniżej po kolei wytłumaczę funkcje potrzebne do napisania tego programiku. To jedziemy:

MsgBox ( flag, "title", "text" [, timeout [, hwnd]] )

wyświetla na ekranie okienko z informacją.
flag - tutaj ustawia się typ okienka i wartości przycisków. Ten atrybut może przybierać różne wartości, podam je trochę niżej,
"title" - tytuł okienka które się wyświetli,
"text" - tekst który się w tym okienku pojawi, do łamania linii (zamiast entera) używa się znaku @LF, ale o tym później.
timeout - atrybut opcjonalny, tu ustawia się czas po jakim okienko ma zniknąć (domyślnie do naciśnięcia przycisku okienko będzie na ekranie) w milisekundach (1/1000 s)
hwnd - handle, inaczej uchwyt, a tutaj używany aby ustawić do którego okna należy ten komunikat, nam na razie niepotrzebne.

Możliwe do użycia liczby przy atrybucie flag:

table1r.png


Aby uzyskać odpowiednią flagę, liczby można dodawać. Np jeśli chcę otrzymać komunikat z przyciskami OK i Cancel, z ikoną błędu i przyciskiem cancel jako przyciskiem domyślnym, to dodaję liczby 1 (odpowiada za przyciski OK i Cancel) + 16 (Ikona błędu) + 256 (Drugi przycisk domyślny) = 273. I liczby 273 używam jako atrybutu flag.

Sleep (delay)

Zatrzymuje wykonywanie skryptu na pewien czas.
delay - czas w milisekundach przez jaki skrypt ma być zatrzymany.

Na razie wystarczą nam te dwie funkcje. To teraz odpalaj SciTE i nabazgraj tam to:

MsgBox(0, "Hello World!", "Hello World!")
Sleep(1000)
MsgBox(16, "Goodbye World!", "Goodbye World!")



Następnie zapisz plik poprzez File>Save As... i naciśnij F5 aby uruchomić skrypt. Jeśli wszystko poszło dobrze powinieneś zobaczyć komunikat:
helloworld.png


Wypróbuj działanie programu i czekaj na następną częśc kursu (prawdopodobnie jutro)

CREATIVE COMMONS:
88x31.png

This document is licensed under a
Creative Commons Uznanie autorstwa-Użycie niekomercyjne-Bez utworów zależnych 3.0 Polska License.

[TUT] Full Autoit V3 Tutorial

yo po 1 nie kayloger tylko bot który zapamiętuje hasła -_-

stop1.png

Opublikowano

3. Zmienne

3.1. Coś o zmiennych


Zmienne (ang. variables) to takie jakby magazyny informacji, które są dostępne w każdej chwili dostępne i możliwe do edycji z poziomu skryptu. Czyli po prostu za pomocą zmiennych można zapisywać różne dane i potem wracać do nich w każdej chwili. Ale dosyć gadania, teraz wyjaśnię jak ich używać.


3.1.1. Deklaracja zmiennej


Deklaracja zmiennej jest dziecinnie prosta, aczkolwiek (lubię to słowo biggrin.gif) zmienną można deklarować na kilka sposobów.
Ułatwieniem w AutoIT jest to, że zmienne nie mają określonych typów zawartości - nie ma tutaj czegoś takiego jak deklarowanie typu zawartości zmiennej - i można je deklarować w dowolnym momencie, przypisując im od razu wartość. A oto sposoby ich deklarowania:

1. Deklaracja zmiennej lokalnej, taki zapis polecam wykorzystywać kiedy chcecie od razu zadeklarować zawartość zmiennej:

$zmienna = "tekst"
$zmienna2 = 12345

2. Deklaracja zmiennej lokalnej, taki zapis radzę wykorzystywać kiedy zmiennych będziecie używać później, teraz mają pozostać puste. Wtedy można zapisać wszystko w jednej linii:


Local $zmienna, $zmienna2, $zmienna3

3. Deklaracja zmiennej globalnej, tego typu zmiennych nie polecam wykorzystywać za często, bo zmienne globalne zamulają skrypt, zużywają więcej pamięci. Używaj ich tylko w ostateczności, np. kiedy musisz zadeklarować zawartość zmiennej która została wykorzystana wcześniej w kodzie i nie ma możliwości zmiany ich kolejności:


Global $zmienna, $zmienna2, $zmienna3

3.1.2. Uwagi dot. zmiennych


Jak zapewne zauważyłeś(aś) (jeśli nie to teraz masz na to czas smile.gif) przed nazwą każdej zmiennej napisałem "$". To nie przypadek, ani nie moje widzi-mi-się. AutoIT wymaga takiego zapisu, gdyż inaczej kompilator nie wiedziałby kiedy używasz zmiennej. Nazwa zmiennych może być zbudowana z liter alfabetu łacińskiego (a-z bez polskich znaków) i cyfr. Jeśli zawartością zmiennej ma być jakiś łańcuch znaków musi być zapisany w cudzysłowie (" "), zawartość liczbową wpisujemy bez niego.

3.2. Wykorzystanie w praktyce


Więc skoro w teorii już potrafisz używać zmiennych, teraz pora na program. Będzie on bardzo prosty, z wykorzystaniem poznanego już wcześniej MsgBox i nowej funkcji:

MouseGetPos ([dimension])

Pobiera pozycję myszy.
dimension - atrybut opcjonalny, na tym etapie kursu użyjesz go zamiast tabel - jeszcze nie musisz wiedzieć o co z nimi chodzi. 0 - pozycja X myszy, 1 - pozycja Y myszy.

 

A oto kod:

Local $x, $y, $title$title = "To jest tytuł okna."
$x = MouseGetPos(0)
$y = MouseGetPos(1)

MsgBox(0, $title, "Pozycja myszy to: " & @LF & $x &", " & $y & "!")


Zwróć uwagę na zapis atrybutu "text" - poszczególne łańcuchy tekstu zostały połączone ze zmiennymi za pomocą znaku "&". Ten znak służy właśnie do łączenia ze sobą różnych części tekstu, zmiennych i znaków specjalnych, takich jak użyty tu @LF - czyli łamanie linii (zamiast entera).

Po wpisaniu tego do SciTE zrób tak jak poprzednio, czyli File>Save As... i F5 aby uruchomić. Efektem powinien być podobny komunikat:
http://img339.imageshack.us/img339/3744/mousepos.png


4. Pętle

4.1. O pętlach


Pętle to fundamentalna część kodu. Za pomocą pętli możemy sobie łatwo uprościć życie jeśli chcemy aby skrypt powtarzał jakąś czynność wiele razy. Po co pisać tysiące razy tą samą linijkę gdy można zamiast tego napisać 3-4 linijki i będzie działać tak samo, a będzie zużywało dużo mniej pamięci.

4.2. Rodzaje pętli i ich użycie


Pętli mamy trzy rodzaje, a mianowicie:

4.2.1. For...To...(Step)...Next


Pętla For...To...(Step)...Next, w skrócie po prostu For powinna być używana najczęściej, bo jeśli chcemy coś powtarzać x razy to jest ona do tego idealna. Poniżej jej deklaracja:

For <variable> = <start> To <stop> [Step <stepval>]
    ... funkcje do wykonania
Next

<variable> - nazwa zmiennej która będzie użyta w tej pętli, nie musi być deklarowana wcześniej, najlepiej używać jednoznakowych zmiennych (np. $i)
<start> - wartość początkowa w.w. zmiennej, najczęściej 0 lub 1
<stop> - wartość przy jakiej pętla ma się już nie wykonać
[step <stepval>] - atrybut opcjonalny, jest to liczba o jaką ma się powiększać zmienna po każdym wykonaniu pętli. Oczywiście wartość wpisujemy zamiast <stepval>, słowo Step musi tam zostać jeśli chcemy używać tego atrybutu.

4.2.2. Do...Until


Pętla Do...Until, jest trochę inna niż powyższa For. Będzie powtarzana dopóki wyrażenie na końcu będzie prawdziwe. Deklaracja:

Do
    ... funkcje do wykonania
Until <expression>

<expression> - wyrażenie które ma być prawdziwe jeśli pętla ma zostać wykonana, np. $x = 0

4.2.3. While...WEnd
Pętla bardzo podobna do Do...Until, tyle że wyrażenie jest sprawdzane przed kolejnym wykonaniem a nie po nim. Deklaracja:


While <expression>
    ... funkcje do wykonania
WEnd

<expression> - wyrażenie które ma być prawdziwe jeśli pętla ma zostać wykonana, np. $x = 0[/center]

4.3. Programik


Program nie będzie wykorzystywał żadnych nowych funkcji. Oto kod:

For $i = 0 To 10
    MsgBox(0, "Test pętli FOR", "Wykonanie nr " & $i & ".")
Next


Jak widać prosty i krótki. Robisz to co zawsze, a efektem powinno być 10 komunikatów typu:
http://img80.imageshack.us/img80/6070/forloop.png

To koniec tej części, miało być jeszcze o KODA i czymś jeszcze, ale nie mam już czasu. Jutro będzie kolejna część!

[TUT] Full Autoit V3 Tutorial

yo po 1 nie kayloger tylko bot który zapamiętuje hasła -_-

stop1.png

Opublikowano

5. Własne funkcje

5.1. Po co to?


W AutoIT'cie poza używaniem funkcji które są już wbudowane w program, można tworzyć swoje własne. Można to zrobić na dwa sposoby, pierwszy lokalny, którego używa się najczęściej do krótkich, prostych funkcji potrzebnych tylko raz, w tym jednym danym programie. Drugi to stworzenie tzw. Include'a (ang. include - zawierać, uwzględniać) czyli oddzielnego pliku który zawiera funkcję i może być potem szybko używany później. Niezależnie od sposobu ich utworzenia, funkcje bardzo ułatwiają życie, czasem są nawet niezbędne aby aplikacja działała tak jak chcemy.

5.2. Tworzenie własnej funkcji


Najpierw stworzysz funkcję lokalną, bo robiąc własnego include'a i tak będziesz używał tego samego sposobu.

5.2.1. Funkcja lokalna


Funkcję lokalną zamieszcza się w dowolnym miejscu skryptu między słowami Func i EndFunc. Jak łatwo się domyślić Func to początek funkcji a EndFunc to jej zakończenie. Przykładowe użycie:

Func ext()
    Exit
EndFunc

Powyższa funkcja służy do zamknięcia programu. Po słowie Func wstawia się własną nazwę dla funkcji, nie może być ona jednak już wykorzystana przez program (wtedy program ją pogrubi i pokoloruje na niebiesko) i w nawiasach "(" i ")" atrybuty funkcji. Przerób więc tą funkcję tak aby wykorzystywała atrybuty. Możesz to zrobić np. tak:

Func ext($delay)
    Sleep($delay)
    Exit
EndFunc

I ta funkcja będzie działać w taki sposób, że odczeka $delay milisekund zanim zakończy program. Chciałbym tu zauważyć, że atrybut musi być zmienną, nie trzeba jej wcześniej deklarować, po prostu wpisać jej nazwę w nawiasy i już, a potem w kodzie funkcji można się do tej zmiennej odwołać.

5.2.2. Tworzymy Include'a!


Jak widać po nazwie podrozdziału teraz zajmiesz się robieniem include'a. Jest to dosyć proste, najpierw utwórz nowy plik autoit'a (Ctrl+N) i wpisz w nim tekst powyższej funkcji, tej którą stworzyłeś w poprzednim podrozdziale. Teraz wystarczy zapisać ten plik w katalogu (folderze) "C:/Program Files/AutoIt3/Include" pod dowolną nazwą, jednak nie może zawierać spacji i znaków specjalnych, poza tym polecam zapisywać nazwy incude'ów w taki sposób:

JakasTamNazwaFunkcji.au3

Potem łatwiej się połapać w katalogu include. No dobra, ale funkcja sama się nie wykona, teraz trzeba jej użyć!

 


5.3. Wykorzystanie własnej funkcji
5.3.1. Funkcja lokalna


Użycie funkcji lokalnej jest banalnie proste, można to zrobić na dwa sposoby.
Można po prostu wpisać nazwę funkcji gdzieś w kodzie, ale będzie ona na szaro, bo program nie ma jej zapisanej do kolorowania składni. Przykład użycia:

Func ext($delay)
    Sleep($delay)
    Exit
EndFuncext(1400)

Taki program po prostu skończy działanie po 1400 milisekundach. Ale istnieje też drugi sposób, moim zdaniem lepiej wyglądający:

Func ext($delay)
    Sleep($delay)
    Exit
EndFunc

Call("ext", 1400)

Tym sposobem używamy nowej funkcji, Call. Nie służy ona wbrew pozorom do dzwonienia biggrin.gif. Jej użycie jest także dosyć proste:

Call ("function", [parameter1, [parameter2]])

"function" - nazwa funkcji zadeklarowanej wcześniej
[parameter1, [parameter2]] - części opcjonalne, tutaj można wpisywać atrybuty wcześniej wywołanej funkcji, może być ich nieskończoność.
Ok, teraz pora na include.

 

5.3.2. Include


Funkcję z include'a deklaruje się identycznie jak lokalną. To po co zrobiłem ten podrozdział? Bo żeby móc zadeklarować funkcję z include trzeba najpierw zadeklarować include. Logiczne, nie? Include deklaruje się w następujący sposób:

#Include <NazwaInclude.au3>

Proste no nie? Dodajemy tą linijkę nad całym kodem, najlepiej jako jedną z pierwszych. Potem już można używać funkcji zawartych w incude. Ex:

#Include <ExitWithDelay.au3>

Call("ext", 1500)

Pod nazwą ExitWithDelay.au3 zapisałem poprzednio stworzoną funkcję, wpisz tam nazwę której ty użyłeś.


W dalszej części poradnika umieszczę wykorzystanie funkcji np. w hotkeyach. Teraz coś moim (i nie tylko moim biggrin.gif) zdaniem ważniejszego...


6. KODA

6.1. Co to w ogóle jest?!?


KODA to zaawansowany graficzny edytor GUI (GUI - ang. Graphics User Interface - Graficzny Interfejs Użytkownika). Użycie jest bardzo proste, po prostu wstawiamy odpowiednie elementy, ustawiamy ich rozmiar i gotowe! Edytor KODA uruchamiamy poprzez Tools>Koda(Form Designer) lub skrótem klawiszowym alt+m, ale dokument musi być wcześniej zapisany, inaczej nie będzie możliwe uruchomienie KODA.

6.2. Zapoznanie z KODA
6.2.1. Opis przycisków


Na poniższym obrazku postaram się wyjaśnić co do czego służy:
koda1.png
Rys. 6.1

Resztę zakładek wyjaśnię kiedy będą potrzebne, teraz to nie ma sensu.

6.2.2. Pierwsze GUI


Teraz stworzysz pierwsze GUI, za pomocą koda. Stwórz nowy plik w AutoIT i zapisz go pod jaką nazwą chcesz. Teraz uruchom koda (alt+m) i zmniejsz okienko formy do jakich rozmiarów chcesz, łapiąc za prawy dolny róg okienka Form1.
form11.png
Teraz wstaw na formę przycisk, niech wygląda jakoś tak:
form12.png
Teraz w okienku Obiect Inspector w polu Caption możesz zmienić tekst na przycisku, napisz tam np. Hello!
form13.png
Powinno wyjść coś takiego:
form14.png
Teraz naciśnij przycisk eksportu (lub F9), powinieneś zobaczyć coś takiego:
form15.png
Naciśnij przycisk zaznaczony na czerwono (nie wiem po co to zrobiłem ;p). Kiedy to zrobisz KODA się zamknie, a kod formy pojawi się w SciTE. Możesz teraz nacisnąć F5 i zobaczyć działanie swojego GUI.
Jak widzisz nazwa okna to Form1. Specjalnie nie kazałem tego zmieniać (wystarczyło w oknie Object TreeView wybrać Form1 i zmienić Caption) żeby pokazać jak teraz łatwo można to naprawić. Wystarczy znaleźć linijkę:

$Form1 = GUICreate("Form1", 227, 118, 377, 237)

I zamiast "Form1" wpisać cokolwiek innego, np. "Hello!". Działanie programu powinno teraz wyglądać tak:
form16.png
No dobra, ale aplikacja nic nie robi, można ją tylko zamknąć. Przy okazji wyjaśnię działanie instrukcji Switch:

Switch <warunek>Case <wartość>;działanieEndSwitch


<warunek> - tu wpisujemy np zmienną która może przyjąć różne wartośći
<wartość> - tu po słowie Case wpisujemy wartość jaką może przyjąć <warunek> i co ma się potem stać.

W swoim kodzie masz takie coś:

While 1
    $nMsg = GUIGetMsg()

    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

W znanej ci już pętli While (z warunkiem 1 czyli nigdy sama się nie zakończy) masz poznaną przed chwilą instrukcję switch. Jest tam też zmienna $nMsg równa funkcji GUIGetMsg(). Nie będę jej tłumaczył tak jak poprzednich, bo nie ma czego tłumaczyć. Funkcja zwraca wiadomości odebrane od GUI (ex. naciśnięcie przycisku itp.). Zmienna $nMsg jest przypisana do switch'a. Pierwszy Case jest równy $GUI_EVENT_CLOSE. Jest to zmienna pobrana z include'a <GUIConstants.au3> i oznacza że naciśnięty został przycisk służący do zamykania okna (X). Teraz dodajmy swoją część. Niech po naciśnięciu przycisku "Hello!" (przypisany do zmiennej $Button1) wyświetli się MsgBox jak w pierwszym programie. Czyli dodajesz nowy Case tak jak tutaj:

Case $Button1
    MsgBox(0, "Hello!", "Hello World!")

I razem to wygląda tak:

While 1
    $nMsg = GUIGetMsg()

    Switch $nMsg
​ ​ ​ ​     Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            MsgBox(0, "Hello!", "Hello World!")
    EndSwitch
WEnd

Uruchom program (F5) i sprawdź jego działanie. Czekając na kolejną część poradnika możesz pokombinować z poznanymi funkcjami. W razie czego pisz tutaj, postaram się pomóc każdemu.

[TUT] Full Autoit V3 Tutorial

yo po 1 nie kayloger tylko bot który zapamiętuje hasła -_-

stop1.png

Opublikowano

7. Instrukcje Warunkowe
Instrukcje warunkowe to jedna z głównych części skryptu, zaraz po pętlach. W AutoIT są ich trzy rodzaje, zaprezentowane poniżej:

7.1. If...Then...(Else)...EndIf


If to chyba najpopularniejsza instrukcja warunkowa, występuje w każdym języku programowania, bo bez niej ciężko byłoby cokolwiek zrobić. Ogólny zarys If'a wygląda tak:

If <condition> Then
    ;co ma zrobić jeśli <condition> będzie prawdziwy
[Else]
    ;co ma zrobić gdy warunek nie jest spełniony
EndIf

<condition> - warunek który ma zostać spełniony (być prawdziwy) aby instrukcje poniżej zostały wykonane (ex. $zmienna == 1)
Else - dodatkowa instrukcja, nie jest konieczna, ale czasem ciężko się bez nie obyć. Jeśli jej użyjemy skrypt wykona instrukcje zamieszczone pod nią, jeśli warunek <condition> nie będzie prawdziwy.

7.1.1. ElseIf


ElseIf jest specjalnym "dodatkiem" do If'a. Dzięki niemu można brać pod uwagę więcej niż jedną możliwość. Oto przykład zastosowania:

$zmienna = 0

If $zmienna == 0 Then
    MsgBox(0, "IF", "$zmienna = 0")
ElseIf $zmienna == 1 Then
    MsgBox(0, "IF", "$zmienna = 1")
Else
    MsgBox(0, "IF", "$zmienna = ?")
EndIf

7.2. Select...Case...(Case)...EndSelect


Select to instrukcja której z powodzeniem można używać zamiast ElseIf. Jej budowa jest dosyć prosta i intuicyjna:

Select
    Case <condition>
        ;co ma zrobic
    Case <condition>
        ;co ma zrobic
    Case <condition>
        ;co ma zrobic
EndSelect

Case <condition> - jest to oczywiście warunek, jaki ma zostać spełniony aby instrukcje poniżej zostały wykonane. Ilość Case'ów jest nieograniczona - może ich być tyle ile sobie wymyślisz.

Wadą (a może i zaletą) Select'a jest to, że nie ma w nim odpowiednika Else, można jednak poradzić sobie bez niego, co jest w sumie bez sensu bo przecież po to jest If.


Przykład użycia Select'a:

$x = 1

Select
    Case $x == 1
        MsgBox(0, "SELECT", "$x = 1")
    Case $x == 2
        MsgBox(0, "SELECT", "$x = 2")
EndSelect

7.3. Switch...Case...(Case)...EndSwitch


Instrukcja Switch jest bardzo podobna do w.w. Select'a, z tym że warunek jest umieszczony wcześniej i odnosi się do całej instrukcji, a nie do poszczególnych Case'ów:

Switch <condition>
    Case <case1>
        ;...
    Case <case2>
        ;...
EndSwitch

<condition> - pierwsza część warunku, nie wstawiamy tu warunku tak jak zawsze (ex. $zmienna == 1) tylko całkiem inaczej (ex. $zmienna), bo wszystko co miało być po == jest zastąpione przez Case'y
Case <case...> - druga część warunku, to co miało być po ==, (ex. 1)

Tak więc Switch jest dużo wygodniejszy od Selecta jeśli ma się odnosić do tego samego warunku. Przykład zastosowania Selecta macie za każdym razem gdy wklejacie kod formy z KODA:

$nMsg = GUIGetMsg()

Switch $nMsg
    Case $GUI_EVENT_CLOSE
        Exit
EndSwitch

7.4. Podsumowanie


Podsumowując, mogę stwierdzić że najczęściej powinno używać się IF'a, potem w zależności od zastosowania Switch i Select. Ale to i tak zależy od waszego przyzwyczajenia, jeśli bardziej spodobał ci się Select to będziesz go częściej używał, to oczywiste.


8. _isPressed
Może za wcześnie na taką funkcję, ale doskonale pasuje ona do instrukcji warunkowych, więc zdecydowałem się ją dać tak wcześnie.

8.1. Opis i wymagania
8.1.1. Opis


Funkcja _isPressed sprawdza czy dany klawisz został wciśnięty. Chyba nie takie trudne no nie? Funkcja jest bardzo przydatna do wielu zastosowań, nie będę ich wypisywał. Teraz deklaracja funkcji:

_IsPressed($sHexKey [, $vDLL = 'user32.dll'])

$HexKey - kod heksadecymalny klawisza który ma być sprawdzany (poniżej lista kodów i klawiszy)
[$vDLL = 'user32.dll'] - zmienna zawierająca otwartą dll'kę z której funkcja ma pobierać klawisze - na razie nie potrzebne (DllOpen wyjaśnię w następnej części)

 

Lista kodów klawiszy:

 

8.1.2. Wymagania


Ta funkcja nie ma zbyt dużych wymagań, jedyne to następujący Include:

#Include <Misc.au3>

8.2. Progamik


Bez gadania, tu kod:

#include <Misc.au3>

While 1
    Local $x
    If _IsPressed("45") Then
        $x = "e"
    EndIf
    If _IsPressed("58") and $x = "e" Then
        $x = "ex"
    EndIf
    If _IsPressed("49") and $x = "ex" Then
        $x = "exi"
    EndIf
    If _IsPressed("54") and $x = "exi" Then
        $x = "exit"
    EndIf
    If $x = "exit" Then
        $x = ""
        MsgBox(0, "", "Kod aktywowany")
    EndIf
WEnd

Analizę pozostawiam wam smile.gif (ofc jeśli będą jakieś problemy to wyjaśnię sam). Ale jedna rzecz - spójrzcie że po uruchomieniu, proces AutoIt'a zużywa 50% procka! (Ctrl+Alt+Delete, zakładka procesy) Wyjaśnię to w następnej części kursu (w tej o DllOpen)!

[TUT] Full Autoit V3 Tutorial

yo po 1 nie kayloger tylko bot który zapamiętuje hasła -_-

stop1.png

  • 1 miesiąc temu...
Opublikowano

9. DllOpen
Ta instrukcja odpowiada za 'otwarcie' biblioteki dll. Poniżej wyjaśnię 'z czym to się je'.


9.1. Po co mi to?



A więc tak, pamiętacie jak w poprzedniej części finalny program zużywał ponad połowę procka? Działo się tak ponieważ instrukcja która przechwytuje klawisze (_isPressed) używa dllki z kodami klawiszy (o ile dobrze pamiętam). Parametr $vDLL był opcjonalny, czyli nie trzeba było podawać kompilatorowi której dll'ki ma użyć, bo używał domyślnej (user32.dll). Znaczyło to że program za każdym wykonaniem pętli musiał sobie tą bibliotekę otworzyć, co strasznie wykorzystywało procesor. No bo wyobraźcie sobie że pracujecie przy - dajmy na to - produkcji długopisów i te długopisy składacie. I za każdym razem jak macie złożyć długopis to musicie zaglądać do instrukcji jak to zrobić, mimo iż tych długopisów złożyliście już tysiące to nadal musicie to robić. Więc nauczmy program jak nie zaglądać do instrukcji za każdym razem...



9.2. Opis




Funkcja DllOpen, jak już wcześniej napisałem otwiera bibliotekę dll. Dzięki jej użyciu można zmniejszyć zużycie podzespołów w skrypcie/aplikacji. A używa się jej następująco:

DllOpen ( "filename" )

filename - nazwa lub lokalizacja dll'ki do otwarcia
 


9.3. Zastosowanie




Nie będzie nic nowego, poprawimy program z poprzedniej części, który wyglądał następująco:

#include <Misc.au3>
While 1
    Local $x
    If _IsPressed("45") Then
        $x = "e"
    EndIf
    If _IsPressed("58") and $x = "e" Then
        $x = "ex"
    EndIf
    If _IsPressed("49") and $x = "ex" Then
        $x = "exi"
    EndIf
    If _IsPressed("54") and $x = "exi" Then
        $x = "exit"
    EndIf
    If $x = "exit" Then
        $x = ""
        MsgBox(0, "", "Kod aktywowany")
    EndIf
WEnd

Teraz, zaraz po

#Include <Misc.au3>

dodajemy

$vDLL = DllOpen("user32.dll")

No ale samo otwarcie biblioteki nic nie da, teraz trzeba pokazać _isPressed że ma używać tej otwartej a nie otwierać nową. Po kodach klawiszy (ex. "45") dodajemy:

, $vDLL

tak aby przykładowa instrukcja wyglądała tak:

_IsPressed("45", $vDLL)

I tak robimy ze wszystkimi _isPressed. Teraz cały kod powinien wyglądać mniej więcej tak:

#include <Misc.au3>
$vDLL = DllOpen("user32.dll")

While 1
    Local $x

    If _IsPressed("45", $vDLL) Then
        $x = "e"
    EndIf
    If _IsPressed("58", $vDLL) and $x = "e" Then
        $x = "ex"
    EndIf
    If _IsPressed("49", $vDLL) and $x = "ex" Then
        $x = "exi"
    EndIf
    If _IsPressed("54", $vDLL) and $x = "exi" Then
        $x = "exit"
    EndIf
    If $x = "exit" Then
        $x = ""
        MsgBox(0, "", "Kod aktywowany")
    EndIf
WEnd

Możecie sobie to skompilować i odpalić (F5) żeby zobaczyć jak działa.

9.3. Zastrzeżenia

Niby wszystko ładnie, ale powyższy kod nie jest poprawny, ponieważ w razie nieprzewidzianego zakończenia aplikacji dll'ka pozostanie otwarta, zużywając pamięć. Aby temu zapobiec użyjemy DllClose

9.4.1. DllClose

Deklaracja funkcji wygląda tak:DllClose( handle )handle - zmienna do której została przypisana instrukcja DllOpen.

9.4.2. Modyfikacja przykładu

To teraz na końcu (po WEnd) dopiszemy następującą linijkę: DllClose($vDLL)Teraz już wszystko powinno działać.

10. Dll'ek ciąg dalszy, czyli DllCallJak już zacząłem temat bibliotek dll, to pomyślałem że grzechem byłoby nie 'wspomnieć' o DllCall - głównym celu używania bibliotek dll.

10.1. Opis

DllCall służy do - jak sama nazwa wskazuje - wywoływania funkcji z dll'ek. Używa się jej w następujący sposób:DllCall ( "dll", "return type", "function" [, type1, param1 [, type n, param n]] )"dll" - nazwa biblioteki lub zmienna zawierająca otwartą dll'kę"return type" - typ tego co funkcja ma zwrócić, poniżej lista dostępnych typów"function" - nazwa funkcji zawartej w bibliotece do wykonaniatype1 - typ pierwszego parametru, tak jak "return type"param1 - pierwszy parametr funkcjitype n - typ kolejnego parametruparam n - kolejny parametrJak widać lista parametrów DllCall jest długa, ale wymagane są parametry "dll", "return type" i "function", reszta jest opcjonalna i używana zależnie od funkcji. Poniżej przedstawię listę dostępnych typów do użycia w "return type" i przy typach parametrów (listę bez opisów, po opisy zajrzyjcie do helpa, nie są one tu potrzebne bo zazwyczaj przy dokumentacji biblioteki jest podany typ do użycia):none (odpowiednik void), BYTE, BOOLEAN, short, USHORT, WORD, int, long, BOOL, UINT, ULONG, DWORD, INT64, UINT64, ptr, HWND, HANDLE, float, double, INT_PTR, LONG_PTR, LRESULT, LPARAM, UINT_PTR, ULONG_PTR, DWORD_PTR, WPARAM, str, wstr.

10.2. Przykład

Przykład nie będzie jakiś specjalnie wyszukany, prosto z helpa, ale wyjaśniony i lekko zmodyfikowany. To zaczniemy od DllOpen:$dll = DllOpen("user32.dll")

Teraz wywołamy ręcznie funkcję wyświetlającą okienko z informacją:

DllCall($dll, "int", "MessageBox", "hwnd", 0, "str", "Tekst do wyświetlenia.", "str", "Tytuł okna", "int", 64)Przedstawiony powyżej kod odwołuje się do funkcji MessageBox zawartej w dll'ce user32.dll. Używanie jej w taki sposób jest całkowicie pozbawione sensu - od tego jest MsgBox, ma takie same możliwości. Tutaj jest przedstawiony tylko do pokazania zastosowania DllCall. paramter 1 odpowiada za to samo co parametr hwnd przy MsgBox. paramter 2 to tekst okna, 3 to jego tytuł, a 4 to parametr "flag" (64 to jak pamiętacie flaga odpowiedzialna za wyświetlenie ikony znaku informacyjnego przed tekstem).Teraz tylko DllClose i po robocie:[code]DllClose($dll)

Cały kod wygląda tak:

$dll = DllOpen("user32.dll")

DllCall($dll, "int", "MessageBox", "hwnd", 0, "str", "Tekst do wyświetlenia.", "str", "Tytuł okna", "int", 64)
DllClose($dll)

Mam nadzieję że wam starczy na razie, nie mam już czasu dodać kolejnego 'segmentu' do spisu treści więc zrobię to przy okazji. A osobom typu adwi radzę po prostu się zamknąć, a najlepiej wyjść jeśli nie chcą niczego sensownego do tematu wprowadzić...

Pozdrawiam i liczę że temat nadal będzie tak popularny jak wcześniej.

[TUT] Full Autoit V3 Tutorial

yo po 1 nie kayloger tylko bot który zapamiętuje hasła -_-

stop1.png

  • 2 lata później...
Opublikowano

Wow, przypadkiem trafiłem tu przez google, ponad 60k wyświetleń... Zdziwiłem się że tutorial ciągle cieszy się takim powodzeniem, w sumie jestem pod wrażeniem. Wtedy zachowałem się jak dzieciak (którym z resztą byłem, co mnie nie usprawiedliwia). Wiedzę o AutoIt od tamtego czasu rozwinąłem, nauczyłem się kilku innych języków, poszedłem we freelancing i dochody mnie zadowalają, więc powód mojego focha jest już dawno nieaktualny. Jeśli jakiś mod wyczyści temat (zostawi tylko posty z tutoriala) mogę dopisać dalsze części. W takiej sytuacji proszę o PW.

 

#EDIT:

Ok, w tym czasie postaram sie coś jeszcze napisać.

loadinga.gif

Kolejna część w trakcie pisania!

#EDIT2:

Dzisiaj nie zdąże już dokończyć, bo padam na ryj, ale dam chociaż screeny bota którego zrobiłem na potrzeby tutorialu:

mfobot1.png

mfobot2.png

[TUT] Full Autoit V3 Tutorial

yo po 1 nie kayloger tylko bot który zapamiętuje hasła -_-

stop1.png

  • 1 miesiąc temu...
Opublikowano

eee ? Źle skopiowałeś ? Nie jestem jasnowidzem dlatego ci nie powiem. Wstaw to co wbiłeś do Scite tutaj ;P

Albo sprawdz kod Ctrl+F5 w scite i zobacz czy konsola coś wykryła

OndteAw.png
  • 3 tygodnie później...
  • 4 tygodnie później...
Opublikowano

Czy ten plik da sie wyeksportować jako program jakiś czy tylko w tym można otwierać ?

 

Masz na myśli przekonwertowanie w plik *.exe?

Wchodzisz w folder AutoIT'a, następnie Aut2Exe, otwierasz plik Aut2exe bądz Aut2exe_64, zależy jaki system masz, i dalej mam nadzieje ze dasz sobie rade.

 

Dlaczego mi 2 i 3 kod nie działa?

 

bo MsgBox itd musisz zaczynać w nowym wierszu. To nie może być w ciągu.

 

składnia 2 kodu wygląda tak:

 

Local $x, $y, $title, $title = "To jest tytuł okna."

$x = MouseGetPos(0)

$y = MouseGetPos(1)

MsgBox(0, $title, "Pozycja myszy to: " & @LF & $x &", " & $y & "!")

 

Dokładnie w ten sposób powinno być. Z tym że, jeśli tak będziesz kopiował kolego, to wątpię ze się nauczysz, bo takie kopiuj-wklej nie można nazwać programowaniem.

Opublikowano

 

A oto kod:

Local $x, $y, $title$title = "To jest tytuł okna."$x = MouseGetPos(0)$y = MouseGetPos(1)MsgBox(0, $title, "Pozycja myszy to: " & @LF & $x &", " & $y & "!")

 

No i do autora cos:

Local $x, $y, $title$title = ... bla bla Pomiedzy $title i $title, musi byc przecinek, i powinno to wyglądać tak:

 

Local $x, $y, $title, $title = "To jest tytuł okna."$x = MouseGetPos(0)$y = MouseGetPos(1)MsgBox(0, $title, "Pozycja myszy to: " & @LF & $x &", " & $y & "!")

Opublikowano

No i do autora cos:

Local $x, $y, $title$title = ... bla bla Pomiedzy $title i $title, musi byc przecinek, i powinno to wyglądać tak:

 

Local $x, $y, $title, $title = "To jest tytuł okna."$x = MouseGetPos(0)$y = MouseGetPos(1)MsgBox(0, $title, "Pozycja myszy to: " & @LF & $x &", " & $y & "!")

tutaj po prostu sie zle dodalo normalnie tak powinno byc:

 

Local $x, $y, $title

$title = "To jest tytuł okna."

$x = MouseGetPos(0)

$y = MouseGetPos(1)

MsgBox(0, $title, "Pozycja myszy to: " & @LF & $x &", " & $y & "!")

 

 

tak samo jak inne po prostu trzeba sobie ulozyc np:

 

Func ext()

Exit

EndFunc

sygna1.png

  • 4 tygodnie później...
Opublikowano

Czy mógłby mi ktoś pomóc jak napisać/zrobić żeby coś pdoobnego do tego --->>> loadinga.gif wyskoczyło na jakiś czas przykładowo na minute i się schowało i znów dalej klikanie okee itd ?? jaki jest kod na tę funkcję ?

;)

  • 1 miesiąc temu...
  • 5 tygodni później...
Opublikowano
For $i = 0 To 10MsgBox(0, "Test pętli FOR", "Wykonanie nr " & $i & ".")Next

 

Jak to poprawnie zapisać?

 

P.S niech autor poprawi zapisany kod albo usuńcie temat.

56301179150489007146.png

Opublikowano


For $i = 0 To 10

MsgBox(0, "Test pętli FOR", "Wykonanie nr " & $i & ".")

Next

1387536187-U112334.png

Jeśli Ci pomogłem mógłbyś wynagrodzić lajkiem :)

Opublikowano

Ekhm...

Ostatnia aktualizacja: 17.08.10 01:50

-------

Maciek134

Rejestracja: 13 lut 2009

POZA FORUM Ostatnio: 15 lut 2013 23:14

 

Wow, przypadkiem trafiłem tu przez google, ponad 60k wyświetleń... Zdziwiłem się że tutorial ciągle cieszy się takim powodzeniem, w sumie jestem pod wrażeniem. Wtedy zachowałem się jak dzieciak (którym z resztą byłem, co mnie nie usprawiedliwia). Wiedzę o AutoIt od tamtego czasu rozwinąłem, nauczyłem się kilku innych języków, poszedłem we freelancing i dochody mnie zadowalają, więc powód mojego focha jest już dawno nieaktualny. Jeśli jakiś mod wyczyści temat (zostawi tylko posty z tutoriala) mogę dopisać dalsze części. W takiej sytuacji proszę o PW.

 

#EDIT:

Ok, w tym czasie postaram sie coś jeszcze napisać.

 

loadinga.gif

Kolejna część w trakcie pisania!

#EDIT2:

Dzisiaj nie zdąże już dokończyć, bo padam na ryj, ale dam chociaż screeny bota którego zrobiłem na potrzeby tutorialu:

mfobot1.png

mfobot2.png

Ekm 4/2/13 pisał że jak moderatorzy usuną jakięś posty to będzie kontynuował

1390144171-U592769.png


Opublikowano

No tak ale właśnie się zastanawiam czemu nie kontynuuje tego poradnika skoro napisał że będzie

1390144171-U592769.png


Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...