Multiplatformní Knihovna Pro Interakci S Grafickým Uživatelským Prostředím

Multiplatformní Knihovna Pro Interakci S Grafickým Uživatelským Prostředím

Masarykova univerzita Fakulta}w¡¢£¤¥¦§¨ informatiky !"#$%&'()+,-./012345<yA| Multiplatformní knihovna pro interakci s grafickým uživatelským prostředím Bakalářská práce Jaromír Kala Brno, 2014 Prohlášení Prohlašuji, že tato bakalářská práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj. Jaromír Kala Vedoucí práce: RNDr. Pavel Troubil ii Poděkování Rád bych poděkoval RNDr. Pavlu Troubilovi za cenné rady, věcné připomínky a ochotu při konzultacích a vypracování bakalářské práce. iii Shrnutí Cílem bakalářské práce bylo vytvořit multiplatformní knihovnu pro manipulaci s grafickým uživatelským rozhraním. Vzniklá knihovna WDDMan podporuje detekci připojených monitorů a jejich rozlišení, zjištění otevřených oken a manipulaci s nimi (zavření, změny velikostí a přesuny) a detekci virtuálních ploch. Knihovna WDDMan funguje na operačních systémech skupiny Windows, Linux a Mac OS. Kni- hovna s podobnou funkcionalitou doposud nebyla k dispozici a bude použita v middleware CoUniverse pro manipulaci s objekty videokon- ferenčních nástrojů. Prostředí CoUniverse se využije pro vzdálené tlu- močení přednášek pro Středisko pro pomoc studentům se specifickými nároky Masarykovy univerzity. Knihovna WDDMan bude zveřejněna pod otevřenou licencí k volnému užití. Součástí knihovny je i anglická dokumentace a ukázkový a testovací příklad. iv Klíčová slova CoUniverse, Windows API, XLib, JNA, AppleScript, GUI v Obsah 1 Úvod ...............................2 2 Popis použitých technologií .................4 2.1 Java Native Access .....................4 2.1.1 Popis knihovny Java Native Access . .4 2.1.2 Použití JNA v knihovně WDDMan . .7 2.2 Windows API ........................8 2.3 X Window System a Xlib .................9 2.4 AppleScript ......................... 10 2.4.1 Přehled jazyka . 10 2.4.2 Použití jazyka AppleScript v knihovně WDDMan 12 3 Dokumentace knihovny WDDMan ............. 14 3.1 Úvod ............................. 14 3.2 Přehled souborů knihovny ................. 15 3.3 Třída WDDMan ...................... 17 3.3.1 Konstruktory . 17 3.3.2 Funkce pro práci s okny . 18 3.3.3 Funkce pro práci s plochami . 19 3.3.4 Funkce pro práci s monitory . 22 3.3.5 Další funkce . 24 3.4 Rozhraní Window ...................... 24 3.4.1 Funkce pro zjištění informací o okně . 25 3.4.2 Funkce pro manipulaci s oknem . 28 3.5 Rozhraní Desktop ...................... 30 3.6 Třída Display ........................ 31 3.7 Výčtový typ OperatingSystem ............... 32 3.8 Výjimky ........................... 33 4 Testování knihovny WDDMan ............... 34 5 Závěr ............................... 36 A Seznam příloh .......................... 38 1 1 Úvod Laboratoř pokročilých síťových technologií vyvíjí prostředí pro vzdálené tlumočení přednášek a cvičení do znakového jazyka pro Středisko pro pomoc studentům se specifickými nároky (používá se i název Středisko Teiresiás) Masarykovy univerzity. Pří vzdáleném tlumočení přednášek a cvičení není tlumočník do znakové řeči ve stejné místnosti jako studenti. Vzdálené tlumočení je nutné kvůli nedostatku tlumočníků do odborného znakového jazyka. Aplikační middleware CoUniverse1 se bude používat k řízení tohoto prostředí, protože umožňuje budování, ovládání a samoorganizaci rozsáh- lých kolaborativních prostředí skládajících se z množství komponent [1]. Při použití prostředí CoUniverse pro vzdálené tlumočení přednášek do znakové řeči je potřeba manipulace s grafickým uživatelským rozhraním pro zobrazení používaných videokonferenčních nástrojů. Manipulace s objekty používaných videokonferenčních nástrojů je potřeba kvůli přes- ným požadavkům na vzhled aplikace pro vzdálené tlumočení. Použitým videokonferenčním nástrojem bude UltraGrid2, který umožňuje nízko- latenční přenos videa ve vysokém rozlišení. Popis požadavků na vzhled aplikace a popis použití technologií se nachází v bakalářské práci Milana Semana3. Cílem bakalářské práce bylo navrhnout a implementovat multiplat- formní (pro operační systémy skupiny Windows, Linux a Mac OS) knihovnu napsanou v jazyce Java (protože prostředí CoUniverse je vyví- jeno v programovacím jazyce Java) pro manipulaci s objekty grafického uživatelského prostředí. Měla podporovat detekci připojených monitorů a jejich rozlišení, zjištění otevřených oken a základní manipulaci s nimi (zavření, změnu velikosti a přesunutí). Knihovna v jazyce Java s touto funkcionalitou dosud neexistovala. Ostatní uživatelé, kteří řešili podobné problémy, nejčastěji sami napro- gramovali potřebné řešení pro jejich operační systém, vizte například 1. https://www.sitola.cz/CoUniverse/index.php/CoUniverse 2. http://www.ultragrid.cz/en 3. https://is.muni.cz/th/374487/fi_b 2 1. Úvod získání oken na operačních systémech Windows4, Mac OS5 nebo Linux6. Bakalářská práce je rozdělena do čtyř kapitol. V druhé kapitole popisuji použité technologie a jejich použití při vývoji knihovny WDDMan. V její první sekci knihovnu Java Native Access (JNA), která umo- žňuje jednoduché volání nativních funkcí z programovacího jazyka Java. V další sekci Windows API, které se používá ke komunikaci s operačními systémy skupiny Windows. Knihovna WDDMan volá funkce WinAPI přes JNA k manipulaci s grafickým uživatelským rozhraním na oper- ačním systémech skupiny Windows. V třetí sekci popisuji okenní systém X Window System používaný na operačních systémech skupiny Linux a knihovnu Xlib, kterou knihovna WDDMan používá skrz JNA k manip- ulaci s GUI na operačních systémech skupiny Linux. V poslední sekci se věnuji skriptovacímu jazyku AppleScript podporovanému operačními systémy skupiny Mac OS. AppleScript používá knihovna WDDMan k manipulaci s GUI na operačních systémech Mac OS. Třetí kapitola je dokumentací ke knihovně WDDMan. Nejprve jsou v ní popsány podporované operační systémy a nutné programové vy- bavení k fungování knihovny, následuje stručný popis souborů, ze kterých je knihovna složena a v poslední části kapitoly je dokumentace veřejných tříd, rozhraní, výčtových typů a výjimek knihovny. Ve čtvrté kapitole popisuji, jak jsem testoval funkčnost knihovny testovací aplikací WDDManDemo. 4. http://stackoverflow.com/questions/3188484/ windows-how-to-get-a-list-of-all-visible-windows 5. http://stackoverflow.com/questions/1606321/ how-do-i-get-a-list-of-the-window-titles-on-the-mac-osx 6. http://stackoverflow.com/questions/15638885/ linux-how-to-get-a-list-of-all-visible-windows 3 2 Popis použitých technologií 2.1 Java Native Access 2.1.1 Popis knihovny Java Native Access Java Native Access (JNA) je knihovna pro programovací jazyk Java. JNA umožňuje volání funkcí sdílených knihoven napsaných v jazyce C přímo z kódu v jazyce Java bez psaní nativního kódu. JNA nepodporuje volání C++ funkcí, je potřeba napsat v jazyce C rozhraní, které bude odpovídající C++ funkce volat. JNA je zkompilovatelné a funkční na operačních systémech Windows, Linux, Mac OS, Android, Windows Mobile a dalších. Při vývoji knihovny JNA není výkon prioritou [2]. Při testování se ukázalo, že jsou výkonnější způsoby volání nativních funkcí (například JNI), ale zároveň byla knihovna JNA nejpohodlnější k použití [3]. Tipy k zlepšení výkonui při používání knihovny JNA jsou v dokumentaci1. Pro volání nativních funkcí používá JNA knihovnu libffi2, která umožňuje volání nativních funkcí za běhu programu. Součástí knihovny JNA je i platformně specifická knihovna, která obsahuje některé nativní funkce a struktury pro různé operační systémy (například některé funkce z WinAPI či Xlib) již namapované. Rovněž je součástí platformně specifické knihovny sada nástrojů, které fungují na OS Windows, Linux a Mac OS. Sada nástrojů obsahuje následující třídy: FileMonitor notifikace o změnách souborů. FileUtils funkce se soubory, které nejsou obsaženy přímo v jazyce Java (například přesunutí souboru do koše). KeyboardUtils informace o stavu klávesnice WindowUtils další funkce pro okna. 1. http://twall.github.io/jna/4.0/javadoc/overview-summary.html# performance 2. http://sourceware.org/libffi/ 4 2. Popis použitých technologií Základní použití knihovny JNA ukáži na příkladu, kdy ze souboru priklad.c zavolám funkci secti z jazyka Java. Soubor priklad.c napsaný v programovacím jazyce C vypadající následně: int secti(int x, int y) { return (x + y); } je potřeba standardním způsobem přeložit do sdílené knihovny, na- příklad na operačním systému Linux a kompilátoru GCC příkazem gcc -o libpriklad.so -shared priklad.c. Následně se vytvoří nové rozhraní Priklad.java v jazyce Java vypadající: import com.sun.jna.Library; public interface Priklad extends Library { public int secti(int x, int y); } Rozhraní musí rozšířit rozhraní Library a každá funkce, která je volána z jazyka Java, musí být v rozhraní specifikována – musí se jmenovat stejně jako v původním C souboru a datové typy se převádějí podle tabulky 2.1. Pointer a NativeLong jsou třídy knihovny JNA. Knihovna Java Native Access podporuje i složitější datové typy. Pole se převádějí přímo na pole v jazyce Java. Struktury a unie se převedou vytvořením nové třídy, která rozšíří třídu Structure, respektive Union, knihovny JNA. Kompletní popis, jak převést struktury a unie je v dokumentaci3. Načtení knihovny a zavolání funkce secti se v souboru Secti.java provede následně. import com.sun.jna.Native; public class Secti { public static void main(String argv[]) { 3. http://twall.github.io/jna/4.0/javadoc/overview-summary.html# structures 5 2. Popis použitých technologií Datový typ v C

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    43 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us