Profil de JurajYuraj's BlogPhotosBlogListesPlus Outils Aide

Blog


18 avril

4. Makrá a funkcie v AutoIt-e

AutoIt ma niekoľko makier, ktoré sú špeciálne premenné len na čítanie (hodnôt). Makro začína znakom @ namiesto $ pre lepšie odlíšenie.

Zoznam všetkých predefinovaných makier, ktoré podporuje AutoIt nájdete v návode, tu je zopár :

@AutoItExe – úplna cesta a názov exe z ktorého je skript spúšťaný.
@AutoItVersion – verzia AutoIt-u.
@ComputerName – názov počítača.
@UserName – meno prihláseného užívateľa OS.
@CR – znak návratu vozíka, občas používane, ascii 13.
@LF – posun riadka (nový riadok), často používané, znak ascii 10
@CRLF – nový riadok, znaky ascii 13 a 10.
@DesktopHeight – výška obrazovky.
@DesktopWidth – šírka obrazovky.
@error – posledná chyba, kt. nastala (pozri funkciu SetError v návode).
@extended – rozšírená návratová hodnota funkcie.

a mnoho iných užitočných makier…

Napríklad:

  1. MsgBox(0,"Vitaj!","Ahoj " & @UserName & "!" & @LF & "Ako sa mas?")

Takže zobrazí správu a pozdraví aktuálne prihláseného užívateľa systému.

makra_1

Poznámka: Ako som už v minule spomínal, & (and) slúži na spájanie reťazcov.

Funkcie

Funkcia je to časť kódu, ktorá môže byť volaná zo skriptu hocikedy a vykonáva určitú “funkciu”. AutoIt má vlastné vstavané funkcie a samozrejme, že môžete vytvárať aj vlastné funkcie. Zoznam AutoIt funkcií je v návode.
Funkcia sa vykonáva nasledovne: NazovFunkcie(parametre) . Nie vždy parametre musí mať funkcia. Taktiež nie každá funkcia musí niečo vracať.

Vlastné funkcie

Func nazovfunkcie ($parameter1, … $parameterN)
    ...
    [Return [navratova hodnota]]
EndFunc

Napríklad:

  1. MsgBox(0,"Datum",Dnes())
  2.  
  3. ; Vrati dnesni datum
  4. Func Dnes()
  5.     Return (@MON & "/" & @MDAY & "/" & @YEAR)

Toto je úplne to isté, ak by sme návratovú hodnotu funkcie uložili do premennej:
$datum = Dnes()
MsgBox(0,"Datum",$datum)

#include

Slúži na pripojenie ďalšieho súbora (au3) k skriptu. Najlepšie je dávať #include na začiatok skriptu.

#include "[cesta\]názovSúbora" – pripojí súbor, napr. #include “moje_funkcie.au3”
#include <názovSúbora> – pripojí súbor defaultnej knižnice, napr. #include <string.au3>
#include-once – pripojí súbor len jeden krát

3. Podmienkové príkazy a cyklusy v AutoIt-e

Ako napríklad zistím, že jedno číslo je väčšie ako druhé? Alebo, obsahuje reťazec danú hodnotu? Podmienky sú vyhodnocované buď true (pravda;1) alebo false (nepravda;0). Podmienky používajú tieto operátory na porovnávanie: == , <> , >=, <=.

3 typy podmienk. príkazoch (najčastejšie používaný je If):

  • If...Then...Else
  • Switch...Case
  • Select...Case

If … Then … [Else] … EndIf

Príklad:

  1. $cislo = 10
  2. If $cislo > 5 Then
  3.     MsgBox(0,"Porovnavanie","Cislo je vacsie ako 5!")
  4.     MsgBox(0,"Porovnavanie","Cislo je mensie ako 5!")

V ľudskej reči by to znamenalo:
Ak číslo 10 je väčšie ako 5 Potom zobraz správu “Cislo je vacsie ako 5!Inak zobraz správu “Cislo je mensie ako 5! Koniec podmienky
V našom prípade podmienku vyhodnotilo ako true, pretože číslo je väčšie ako 5. Preto spracovalo prvý príkaz, inak ak by číslo bolo menšie ako 5, tak by spracovalo príkazy za else.

Pozn.: Else nie je nevyhnutné, môžete ho vynechať.

Existuje aj skrateny zapis, ale iba pre jeden prikaz: If nieco Then prikaz

Switch … Case … [Case Else] … EndSwitch

Podobné ako viacnásobné if. Switch premenna .. case hodnotaN … EndSwitch. To zahŕňa nejakú hodnotu od (To) do.

Switch <logický výraz>
Case <hodnota> [To <hodnota>] [,<hodnota> [To <hodnota>] ...]
príkazy1
        ...
    [Case <hodnota> [To <hodnota>] [,<hodnota> [To <hodnota>] ...]
príkazy2
        ...]
    [Case Else
príkazyN
        ...]
EndSwitch

 

  1. $cislo = 5
  2. Switch $cislo
  3.     $sprava = "Cislo je 5"
  4. Case 10
  5.     $sprava = "Cislo je 10"
  6.     $sprava = "Cislo je ine ako 5 a 10."
  7.        
  8. MsgBox(0, "", $sprava)

Cyklusy

Cyklus je to slučka, v ktorej sa časť skriptu opakuje podľa uvedenej podmienky.

  • For...Next
  • While...WEnd
  • Do...Until
  • With...Endwith
  • For...In...Next

For...Next

Takto sa zapisuje, Step je voliteľné (defaultne je 1) je to vlastne hodnota, ktorou má byť každá slučka zväčšená.

For <premenna> = <od> To <do> [Step <krok>]
    ...
Next

 

  1. ; Zobrazi postupne cisla od 1 do 5
  2. For $i = 1 to 5
  3.     MsgBox(0, "Slucka", $i)

While … WEnd

Slučka pokračuje dovtedy, kým výraz nevráti logickú hodnotu false.

While <logický výraz>
    ...
WEnd

  1. $i = 1
  2. While $i <= 10
  3.     MsgBox(0, "Aktuálna hodnota:", $i)
  4.     $i += 1

Poznámka: $i += 1 to je vlastne skrátený zápis: $i = $i + 1
Taktiež existujú tieto skrátené zápisy aj pre iné operátor: –= ; *= ; /= ; &=

Do … Until

Podobné ako While … WEnd akurát, že logický výraz je testovaný po vykonaný slučky.

Do
    ...
Until <logický výraz>

17 avril

2. Premenné v AutoIt-e

Premenné v AutoIt-e sú dosť podobné s php. Každá premenná musí začínať dolárovým znakom $. Názov premennej môže obsahovať len písmená a čísla alebo znak “_”. AutoIt automatický priradí typ premennej podľa priradenia :) . Premenná je to vlastne miesto na ukladanie dát v pamäti, takže môže byť pristupovaná rýchlo.

Príklady názvoch premenných

$premenna
$moja_premenna
$nieco1

Varianty premenných v AutoIt-e:

  • Číslo (32/64 bitové; decimálne; desatinné; hexadecimálne), napr. 10 ; 1.5 ; 0x4fff
  • Reťazec (String; max. môže obsahovať 2147483647 znakov), napr. “Toto je retazec”, alebo môžete použiť aj apostrofy ‘Sem niečo…’ . Reťazce sa spájajú znakom and &. Napr. “Ahoj ” & “svet!” a to je rovné “Ahoj svet!”.
  • Boolean (logická hodnota), môže obsahovať len true (pravda alebo 1) alebo false (nepravda alebo 0). Spolu s booleanmi sa používajú tieto operátory: and, or, not. Not – neguje logickú hodnotu. And – ak obidva logické hodnoty sa rovanjú, tak vráti true. Or – ak jedna z log. hodnôt sa rovná, tak vráti true.
  • Binárna hodnota (max. 2147483647 bytov)
  • Ukazovateľ (Pointer; 32/64 bitové)

Deklarovanie premenných

Premenné môžu mať deklarovaný obor platnosti, rozlišujeme tieto: Dim, Local, Global. Nie je nutný. Dim, local – lokálny obor platnosti, napr. vo funkcií. Global – globálny, napr. vo viacerých súboroch. Ak chcete zabezpečiť, aby ste v kóde zakázali vytvárať premenné bez deklarovania - na začiatku kódu vložte: Opt(“MustDeclareVars”,1)

Príklady:

Dim $premenna
Dim $premenna2 = “Priradená hodnota”
Local $premenna3 = 99
Dim $x,$y
$text = “Bez deklárovania…”
$z = 25

Existujú aj konštanty, to sú premenné, ktorých hodnota sa za behu skriptu nedá meniť. Proste raz, keď sú zadefinované, potom už nemôžu byť menené. Používate sa kľúčové slovo Const

Napríklad:

Const $PI = 3.14 ; Ludolfovo cislo

Polia

Pole obsahuje rád dátových prvkov rovnakého typu a veľkosti (alebo inak povedané rád premenných). Každý prvok v poli môže byť pristupovaný indexom (číslom). Index vždy začína od nuly.

Napríklad:

; Vytvoríme pole
$pole[0] = “a”
$pole[1] = “h”
$pole[2] = “o”
$pole[3] = “j”
; Teraz pristúpime napríklad k druhému prvku (od nuly!)
$pismenko = $pole[1] ; do premennej $pismenko bude uložené “h”.

Poznámka: Existujú aj viac rozmerové polia - matice. Max. 64 dimenzií. Napr. $tabulka[0][0] = 20

1. Hello World alebo Ahoj svet! v AutoIt-e

Príprava

Ak máme nainštalovaný AutoIt, tak môžme začať (nie je potrebné už nič nastavovať) :). Klikneme pravým tlačidlom na plochu (alebo v prieskumníku) a vyberieme Nový –> AutoIt v3 Script:

novy_subor_autoit

Inštalačný program defaultne (budem používať tento výraz, z ang. znamená predvolene) nastavil, aby sa po dvojkliku na skript spustil. Preto, ak chcete upravovať skript, musíte pravým tlačidlom stlačiť na súbor a vybrať Edit Script; čiže zobrazí sa nasledovná ponuka:

ponuka_au3

Otvorí sa SciTE editor so šablónou. Vymažte všetko. Teraz už môžeme začať.

Začíname

Hneď do prvého riadku vložíme tento príkaz:

  1. MsgBox(0,"","Ahoj svet!")

Stlačte F5 pre spustenie skriptu a zobrazí sa:

ahojsvet_au3

Komentáre slúžia na dokumentáciu kódu a pre lepšiu prehľadnosť kódu – AutoIt rozlišuje dva typy komentárov:

  1. ; Jednoriadkovy komentar
  2.  
  3. #cs
  4. Viac-
  5. riadkovy
  6. komentar!
  7. #ce

Úvod do skriptovacieho jazyka AutoIt

Čo je AutoIt?

  • AutoIt je freeware Windows skriptovací jazyk, ktorý je hlavne orientovaný na automatizáciu jednoduchých úloh Windowsu. AutoIt vytvoril Jonathan Bennett a vznikol v Januári 1999 a teraz sa vylepšuje. V roku 2004 vyšla verzia 3 - boli pridané mnohé výkonné skriptovacie možnosti, hlavne podpora Windows GUI. Syntax je veľmi podobná syntaxi Basic-u.
  • AutoIt script sa samozrejme dá kompilovať do samostatného spustiteľného súbora (exe). Skompilovaný skript má približne 280 kB (pôv. exe je ešte komprimovaný programom UPX).
  • Širokú paletu knižníc funkcií (známe ako UDF - "User Defined Functions",t.j."Uživateľom definované funkcie") obsahuje už AutoIt alebo taktiež sa dajú stiahnúť najmä z AutoIt podporného fóra. UDF rôzne rozšírujú funkcionalitu AutoIt-u.
  • Súbory s AutoIt skriptami majú obyčajne koncovku *.au3. Na editáciu AutoIt skriptov slúži štandartne SciTE editor, ktoré je pri AutoIt inštalácií (zadarmo). Existujú aj rôzne rozšírenie pre zvýrazňovanie syntaxi pre iné editory.

Vlastnosti AutoIt-u

  • Skriptovací jazyk podobný Basic-u.
  • Prídavné knižnice a moduly pre špecifické aplikácie.
  • Podpora pre TCP a UDP protokoly.
  • Podpora pre COM (component object modeling) objekty.
  • Volanie funkcií Win32 DLL súborov.
  • Spúšťanie konzolových aplikácií a prístupovanie štandartných streamov (prúdov).
  • Zahŕnuté súbory v kompilovanom súbore môže byť extraktované pri spustení.
  • GUI rozhranie, tvorba správ a input boxov.
  • Prehrávanie zvukov.
  • Simulovanie pohybov myšky.
  • Manipuláciá s oknami a procesmi.
  • Možnosť automatizovať posielanie vstup a klávies do aplikácií.
  • Unicode podpora od verzie 3.2.4.0.
  • 64 bit code podpora od verzie 3.2.10.0.
  • Podpora regulárných výrazov.

Oficiálny web: http://www.autoitscript.com

Taktiež tu stiahnete najnovšiu verziu 3/.3.0.0/:

Jednoduchá eurokalkulačka v C#

Toto je starší kód, ktorý som dávnejšie vytvoril. Obsahuje veľmi jednoduchú triedu Eurokalkulacka, ktorá slúži na konverziu medzi SK<->€
/// <summary>
/// Meny, SKK a EURO
/// </summary>
public enum Mena { Koruna, Euro }
/// <summary>
/// (Statická) Trieda služiaca na konverziu medzi menami SKK a EUROM
/// </summary>
static class Eurokalkulacka
{
    /// <summary>
    /// Stanovený konverzný kurz
    /// </summary>
    private const double konverznyKurz = 30.126D;

    /// <summary>
    /// Konvertuje hodnotu na inú menu
    /// </summary>
    /// <param name="konverznaMena">Mena, na ktorú chcete premeniť danú hodnotu</param>
    /// <param name="hodnota">Hodnota, ktorá ma byť skonvertovaná na inú menu</param>
    /// <returns>Vráti desatinné číslo, skonvertovanú hodnotu</returns>
    public static double Konverzia(Mena konverznaMena, double hodnota)
    {
        if (konverznaMena == Mena.Euro)
            return hodnota / konverznyKurz;
        else
            return hodnota * konverznyKurz;
    }

}
Tu je aj príklad použitia (na dve desatinné miesta):
//Vypise 451,89 SK :
Console.WriteLine("{0:0.00} SK", Eurokalkulacka.Konverzia(Mena.Koruna, 15));
//Vypise 1,00 EUR :
Console.WriteLine("{0:0.00} EUR", Eurokalkulacka.Konverzia(Mena.Euro, 30.126));

Ako vypočítať MD5 Hash v C#

Užitočná metóda na vypočítanie MD5 Hashu reťazca (nezabudnite vložiť na začiatok kódu: using System.Security.Cryptography;):

/// <summary>
/// Vypocita MD5 Hash daneho retazca.
/// </summary>
/// <param name="text">Vstupny text.</param>
/// <returns>Vrati MD5 Hash.</returns>
static string ZistiMD5Hash(string text)
{
    //Vytvorime novu instanciu objektu MD5CryptoServiceProvider
    //Pouzijeme using pre bezpecne uvolnenie instancie z pameti
    using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
    {
        //Vypocitaj hash a vrat ho do byte pola
        byte[] bytePole = md5.ComputeHash(Encoding.Default.GetBytes(text));

        //Vytvori instanciu objektu StringBuilder na skladanie retazcov/znakov
        StringBuilder strBuilder = new StringBuilder();
        //Prejdi kazdy byte v poli, premen jednotlive bajty na hexadecimalnu hodnotu
        //a pridaj do strBuilder
        for (int i = 0; i < bytePole.Length; i++)
        {
            strBuilder.Append(bytePole[i].ToString("x2"));
        }

        //Vrat hash
        return strBuilder.ToString();
    }
}

Porovnávať MD5 môžete jednoduchým spôsobom:

if (ZistiMD5Hash("Reťazec") == "MD5 Hash") ...

Samozrejme, že MD5 už nie je moderné (taktiež má svoje zraniteľnosti), ale dosť známe je aj SHA.