Hned v úvodu bych asi měl zmínit, proč vlastně píšu tento text: Narazil jsem na problém, jak rychle a snadno napsat jednoduchou aplikaci pro Windows. Nic velkého, na co bych chtěl vytahovat kanón typu MS Visual Studio (nejde o peníze, lze použít verzi Express, která je zdarma), prostě jen utilitu, která mi usnadní práci, a jejíž tvorbě nechci věnovat víc, než pár minut. Třeba se někomu budou moje postřehy a nalezená řešení hodit.
Nástroj, který jsem nakonec našel a použil, umožňuje nejen snadno programovat základní aplikace pro Windows, ale také automatizovat některé úkoly v tomto OS. Zvládne totiž i simulovat stisky kláves nebo pohyby myší, manipulovat s okny apod. (A je zdarma i pro komerční použití, sluší se dodat.) Ale měl bych asi začít ne od konce, ale od začátku.
První, co mě napadlo, bylo napsat mou aplikaci v PHP a zkompilovat ji do EXE souboru. To se dá řešit třeba prostřednictvím programu Bamcompile od Bambalam. Běžný soubor v PHP díky tomu spustíte jako exe, jeho výstup se zobrazí na standardním výstupu (v DOS okně). Pokud chcete grafické rozhraní, můžete použít knihovnu WinBinder, díky níž z PHP vytvoříte GUI dle potřeby. Nezní to špatně, součástí kompilátoru z PHP do EXE jsou i nějaké příklady použití, ale, po pravdě, nechtělo se mi učit se funkce WinBinderu. Původně jsem měl představu, že prostě napíšu PHP kód, což stejně dělám docela často, a spustím s výstupem do prohlížeče (což by měl umět placený nástroj ExeOutput, za který se mi ale, po pravdě, kvůli jedné jednoduché utilitě nechtělo platit). Tak jednoduše to ale s Bamcompile a s WinBinderem nejde.
S PHP jsem se tedy rozloučil a přemýšlel, kudy dál. Pokud jde o jazyk, je mi to jedno – může to být C, Pascal, Basic, ve všem jsem už někdy něco bastlil a vzhledem k tomu, že půjde o pár řádků kódu, klidně to zbastlím zase. Co mě ale fakt unavuje, je pronikat do zákoutí knihoven objektů, metod a jejich parametrů, promakané interakce s GUI apod. Mým cílem je napsat něco jako: Vytvoř textové pole, ještě jedno, počkej, až uživatel klikne na OK, vezmi data z polí, načti soubor, něco s tím vším proveď a ulož to.
Takže to není zase tak jednoduché, aby to bylo na dávkový soubor, ale ani tak komplikované, abych řešil MFC a ladil propracovanou event driven aplikaci. I když pro každodenního programátora ve Visual Studiu by to byla určitě také práce na pár minut, já jsem s ním už pár let nepracoval, takže by mi zkoumání, co a jak, zabralo daleko víc času, než samotné psaní.
Editor nástroje AutoIT s kódem scriptu.Nakonec jsem sáhl po nástroji, který se jmenuje AutoIT. Jak už jsem zmínil výše, je to bezplatný nástroj pro scriptování, který umožňuje snadno programovat jednoduché aplikace pro Windows i automatizovat některé úlohy v tomto OS prostřednictvím simulace stisků kláves nebo pohybů myší apod.
Po stažení a instalaci je k dispozici základní balík s editorem kódu a poměrně rozsáhlou nápovědou včetně příkladů, ale třeba i s compilerem scriptů. Pokud tedy své aplikace chcete šířit dál jako exe soubory, nic vám nebrání.
Jen pro představu, jak se v systému AutoIT programuje, jednoduchý příklad kódu:
#include
#include
GUICreate("Titulek okna", 400, 300)
GUICtrlCreateLabel("Text v okne na pozici 10, 10", 10, 10)
$textinp = GUICtrlCreateInput ( "vstupní textové pole 380x60 na pozici 10, 30", 10, 30, 380, 60, $ES_MULTILINE)
$okbutton = GUICtrlCreateButton("OK", 10, 250, 60)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $okbutton
MsgBox(0, "Hola", GUICtrlRead($textinp))
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
EndSelect
WEnd
Myslím, že kód je docela samovysvětlující, na počátku je vytvořeno jednoduché okno s několika ovládacími prvky, následuje smyčka, která řeší akce. Pochopitelně reakce na stisk tlačítka OK (okno s titulkem Hola a výpisem textu z textboxu) a není to pravé ořechové, ale je to jen příklad – a v reálu prostě provedete to, co je třeba. Typicky načtete hodnotu z nějakého vstupního pole a něco s ní provedete.
Funkcí je k dispozici řada, nechybí pochopitelně ty pro funkci se soubory, s GUI apod. Pokud váháte, jestli jsou k dispozici ty, které potřebujete, zkuste projít on-line nápovědu – stejně jsem postupoval i já, než jsem se pro nástroj rozhodl.
Už jsem psal výše, že se dají snadno automatizovat různé úkoly ve Windows. V nápovědě je tento příklad s Notepadem, který spustí Notepad, pošle do něj nějaký text a zavře Notepad bez uložení textu. Nic extra užitečného, ale jako příklad to myslím vyhovuje (středník uvozuje komentář):
Run("notepad.exe")
WinWaitActive("Untitled - Notepad")
Send("Text pro Notepad.")
WinClose("Untitled - Notepad")
WinWaitActive("Notepad", "Save")
;WinWaitActive("Notepad", "Do you want to save") ; Pokud aplikace bezi ve Windows XP
Send("!n")
Z jednoduchého editoru, který je součástí balíku, napsanou aplikaci snadno spustíte (klávesová zkratka F5) nebo zkompilujete do exe (F7). K dispozici je také, jak už jsem psal, nápověda s příklady kódu.
Nástroj AutoIT Script je jednoznačně výborný nástroj pro každého, kdo potřebuje občas napsat jednoduchou aplikaci pro Windows a přitom to nedělá každý den, a tak jsou pro něj nástroje jako je Visual Studio a knihovny MFC zbytečně příliš komplikované. Nemluvě o možnostech automatizace opakujících se úloh, které jsou v AutoIT dobře podporované. Jedinou nevýhodou je, že když o tom pak budete psát blog post, zabere vám psaní víc času, než samotné psaní aplikace :).