Image
7.6.2016 0 Comments

ASSEMBLER pod Windows: Win32 API (2. časť)

Späť na úvod >> Späť na programovanie >> Späť na seriál

Rozhranie Win32 API definuje množinu funkcií, ktoré aplikácia môže volať, a zároveň definuje správanie týchto funkcií. Na obrázku 1 môžete vidieť niektoré oblasti, ktoré rozhranie Win32 API pokrýva.

Rozhranie Win32 API je realizované na štyroch platformách: Win32s, Windows NT 4.0 (NT 5.0), Windows 95, 98, ME a Windows CE. Môžete sa právom pýtať, na čo sú potrebné rôzne platformy rozhrania Win32 API. Nebolo by jednoduchšie realizovať rozhranie Win32 API iba na jednej platforme a iba túto platformu potom šíriť? Objasnenie nájdete v nasledujúcich štyroch odsekoch, v ktorých si povieme niečo o jednotlivých platformách rozhrania Win32.

Win32s

Platforma Win32s bola prvou dostupnou platformou, na ktorej bolo možné spustiť aplikácie napísané pre rozhranie Win32 API. Platforma Win32s je tvorená skupinou dynamických knižníc DLL a ovládačmi virtuálnych zariadení, ktoré dopĺňajú funkcie rozhrania Win32 do 16-bitových systémov Windows 3.x. Platforma Win32s nie je nič iné ako mapovacia vrstva z 32 bitov na 16 bitov, ktorá je umiestnená nad 16-bitovým systémom Windows 3.x. Táto vrstva používa mechanizmus štepenia (ang. thunking), ktorý konvertuje 32-bitové parametre funkcií na 16-bitové parametre a volá zodpovedajúce 16-bitové funkcie Windows. Pretože platforma Win32s nerozširuje možnosti operačného systému, veľa funkcií rozhrania Win32 je realizovaných ako tzv. slepé funkcie. Napríklad Windows 3.x nepodporujú toky, funkcia CreateThread neurobí nič, než to, že vráti handle NULL. Platformu Win32s vytvoril Microsoft preto, aby programátori mohli vytvárať 32-bitové aplikácie ešte predtým, než boli dostupné ostatné 32-bitové platformy.

Windows NT

Windows NT bol druhou platformou, ktorá podporovala rozhranie Win32. Windows NT je operačný systém, ktorý nenesie nijaké pozostatky z MS DOS. Má však veľké nároky na operačnú pamäť a pevný disk. Vo Windows NT sa totiž pre každý proces nahrajú knižnice DLL do operačnej pamäte zvlášť. Ďalej Windows NT je navrhnutý tak, aby aplikáciám, ktoré priamo obsluhujú hardvér počítača (napr. priamy prístup k portom), nedovolil zrútiť systém. To je aj dôvod, prečo takto napísané aplikácie vo Windows NT nespustíte. V prípade, že sa o to pokúsite, Windows NT pri prvom pokuse o priamy prístup k hardvéru takúto aplikáciu ukončí. Väčšina kódu Windows NT je napísaná v jazyku C, C++. Časť jadra a HAL je napísaná priamo v assembleri a je výrazne závislá od architektúry cieľového počítača. Windows NT podporuje počítače s viacerými procesormi. Windows NT je prvá platforma rozhrania Win32, ktorá pracuje aj na iných procesoroch ako x86. To znamená, že pokiaľ budete chcieť prevádzkovať aplikácie rozhrania Win32 na procesoroch MIPS, Alpha, PowerPC, budete musieť použiť platformu Windows NT.

Windows 95, 98

Windows 95, 98 pokrývajú veľmi rozsiahlu marketingovú oblasť a sú určené hlavne pre skupinu spotrebiteľov SOHO. Windows 95 nahradil 16-bitovú verziu Windows 3.x. Windows 95, 98 podporujú funkcie rozhrania Win32 API podstatne lepšie než Windows 3.x. Bohužiaľ, ani Windows 95, 98 neobsahujú úplné implementácie všetkých funkcií Win32 API, ako je to pri Windows NT. Aby bolo možné Windows 95 používať aj na počítačoch so 4 MB pamäte, Microsoft bol nútený vyradiť niektoré možnosti rozhrania Win32 API. Teda Windows 95 nepodporujú asynchrónne súborové operácie rozhrania Win32, ďalej majú obmedzené ladiace funkcie, funkcie na prácu s registrami, bezpečnostné funkcie a funkcie na sledovanie udalostí.

Windows CE

Tento operačný systém tiež patrí do skupiny systémov podporujúcich Win32. Systém Windows CE je určený hlavne pre rôzne vreckové počítače. Bol vyvinutý tak, aby zodpovedal potrebám nových  hardvérových zariadení. Systém Windows CE je výrazne výkonnejší než MS DOS alebo Windows 3.x. Podporuje pamäťovo mapované súbory, štruktúrovanú obsluhu výnimiek, dynamické knižnice, systémovú registračnú databázu a niekoľko ďalších funkcií. Takisto adresný priestor každého procesu je oddelený od ostatných procesov. Väčšina toho, čo sa týka Win32 API, platí aj pre tento systém. Samozrejme, existuje veľa rozdielov, ktoré sú spôsobené tým, že veľa funkcií vo Windows CE je limitovaných. No systém Windows CE rozširuje rozhranie Win32 API o niektoré funkcie, ktoré nie sú ešte podporované na nijakej inej platforme tohto rozhrania.

Opis programov

Pokračujeme v opise programov uverejnených v predošlom čísle. Programy, ktoré tu nájdete tentoraz, sa od programov z predchádzajúceho čísla nepatrne líšia. Príkaz include vloží zdrojový kód a includelib informuje linker, že aktuálny modul musí byť spojený s danou knižnicou. Nakoniec nám zostal príkaz invoke.

Invoke

Tradičný zápis pre volanie procedúr je “push“ parameter, “call“ funkcia. MASM má alternatívnu metódu na volanie procedúr, ktorej výhody sú rýchlejšie programovanie a spoľahlivosť. Okrem toho syntax príkazu Invoke je ľahšie čitateľná.

Syntax: INVOKE expression [,arguments]

Tradičné volanie

                               push offset par4

                               push par3

                               push offset par2

                               push par1

                               call FunctionName

                               mov retval, eax

Použitie Invoke

                               invoke FunctionName,par1,ADDR par2,par3,ADDR par4

                               mov retval, eax

Nasleduje opis funkcií použitých v ukážkových programoch.

MessageBox

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

user32.lib

user32.inc

 

Funkcia MessageBox umožňuje vytvoriť, zobraziť a obsluhovať okno so správou (pozri obr. 3). Okno vytvorené pomocou funkcie MessageBox obsahuje aplikáciou definovanú správu a titulok plus ľubovoľnú kombináciu dopredu definovaných ikon a tlačidiel. Táto funkcia sa najčastejšie používa pre chybové, varovné a informačné správy.

Syntax: MessageBox,HWND hwndOwner, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType

HwndOwner – HWND: Handle materského okna. V prípade, že je tento parameter NULL, správa nemá nijaké vlastnícke okno (to je náš prípad, pozri program 03 a 04).

lpText – LPCTSTR: Ukazovateľ na nulou zakončený reťazec, obsahuje správu, ktorá sa má zobraziť.

lpCaption – LPCTSTR: Ukazovateľ na nulou zakončený reťazec, obsahuje titulok dialógového okna. V prípade, že je tento parameter NULL, je automaticky použitý titulok „Error“.

uType – UINT: Špecifikuje obsah a správanie dialógového okna. Tento parameter môže byť kombináciou nasledujúcich hodnôt:

 

Nasledujúce výrazy vám umožnia do okna vytvoreného pomocou funkcie MessageBox vložiť tlačidlá.

 

MB_ABORTRETRYIGNORE – správa bude obsahovať tlačidlá Abort, Retry a Ignore,

MB_OK                – správa bude obsahovať jedno tlačidlo: Ok,

MB_OKCANCEL – správa bude obsahovať dve tlačidlá: Ok a Cancel,

MB_RETRYCANCEL – správa bude obsahovať dve tlačidlá: Retry a Cancel,

MB_YESNO – správa bude obsahovať dve tlačidlá: Yes a No,

MB_YESNOCANCEL – správa bude obsahovať tri tlačidlá: Yes, No a Cancel.

Jeden z nasledujúcich výrazov umožní zobraziť v správe ikonu. Ikona sa zobrazí na ľavej hornej strane okna.

 

MB_ICONEXCLAMATION

MB_ICONWARNING

V správe sa zobrazí ikona

 

MB_ICONINFORMATION

MB_ICONASTERISK

V správe sa zobrazí ikona

 

MB_ICONQUESTION

V správe sa zobrazí ikona

 

MB_ICONSTOP MB_ICONERROR MB_ICONHAND

V správe sa zobrazí ikona

 

 

Jeden z nasledujúcich výrazov umožní vybrať východiskové tlačidlo.

MB_DEFBUTTON1 – východiskovým tlačidlom je prvé tlačidlo. Východiskové tlačidlo je to, ktoré bude aktivované, keď používateľ stlačí kláves Enter,

MB_DEFBUTTON2 – východiskovým tlačidlom je druhé tlačidlo,

MB_DEFBUTTON3 – východiskovým tlačidlom je tretie tlačidlo,

MB_DEFBUTTON4 – východiskovým tlačidlom je štvrté tlačidlo.

Nasledujúce výrazy vyjadrujú modalitu dialógového okna.

MB_APPLMODAL – používateľ musí reagovať na správu prv, než bude pokračovať v práci v okne definovanom parametrom HwndOwner. Používateľ sa však môže presunúť do iných okien a tam pokračovať v práci. Tento parameter je východiskový. 

MB_SYSTEMMODAL – to isté ako MB_APPLMODAL okrem toho, že ak používateľ na správu nezareaguje, všetky aplikácie sú zastavené. Pokiaľ aplikácia nešpecifikuje MB_ICONHAND, správa sa stáva modálnou až po vytvorení. Systémové modálne správy by sa mali používať iba pre vážne správy, týkajúce sa celého systému, napr. running out of memory.

MB_TASKMODAL – rovnaké ako MB_APPLMODAL okrem toho, že keď je parameter HwndOwner NULL, všetky okná najvyššej úrovne patriace aktuálnej úlohe sú zablokované. Tento príznak používajte, keď volajúca aplikácia alebo knižnica nemá k dispozícii handle okna, napriek tomu potrebuje zabrániť zadávaniu do ostatných okien v aktuálnej aplikácii bez pozastavenia ostatných aplikácií.

Funkcia vráti hodnotu nula, ak nie je dostatok pamäte na vytvorenie správy. Inak je to jedna z nasledujúcich hodnôt:

IDABORT – bolo vybrané tlačidlo Abort,

IDCANCEL – bolo vybrané tlačidlo Cancel,

IDIGNORE – bolo vybrané tlačidlo Ignore,

IDNO –  bolo vybrané tlačidlo No,

IDOK –  bolo vybrané tlačidlo OK,

IDRETRY – bolo vybrané tlačidlo Retry,

IDYES – bolo vybrané tlačidlo Yes.

Windows 95: Systém podporuje maximálne 16 364 window handles.

Ďalšie súvisiace funkcie sú FlashWindow, MessageBeep, MessageBoxEx, MessageBoxIndirect, SetForegroundWindow. Opis jednotlivých funkcií nájdete v help súbore, ktorý je možné zadarmo získať na adrese ftp://ftp.borland.com/pub/delphi/techpubs/delphi2/win32.zip.

ExitProcess

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

kernel32.lib

kernel32.inc

Funkcia ExitProcess ukončí proces a všetky jeho thready (vlákna) a vráti návratový kód. Takto je umožnené úplné ukončenie procesu vrátane vykonávania samostatných kódov pripojených DLL knižníc. Pokiaľ bol proces ukončený, stanú sa stavy objektu proces a všetkých jeho objektov thread signalizovanými. Status ukončenia (vrátený funkciou GetExitCodeProcess) sa zmení zo STILL_ACTIVE na návratový kód, ktorý je uvedený v parametre uExitCode. Ukončenie procesu neovplyvní synovské procesy, ktoré proces spustil, ani neodstráni proces zo systému: odkaz na proces je zo systému odstránený, až keď je uzatvorený posledný objekt proces. Vstupné a výstupné udalosti procesov a vlákien sa vykonávajú postupne. Návratový kód vlákien alebo procesov a vytvorenie vlákien je počas vytvárania procesu odložené až do chvíle, keď proces nebeží. Podobne iba jedno vlákno môže byť v danom okamihu vo svojom inicializačnom alebo deinicializačnom kóde. ExitProcess odpovedá až vo chvíli, keď všetky vlákna dokončili deinicializačný kód.

Syntax: ExitProcess,uExitCode

UExitCode – návratový kód, ktorý sa vráti otcovskému procesu.

Ďalšie súvisiace funkcie sú ExitThread, GetExitCodeProcess, GetExitCodeThread, CloseHandle.

ShellAbout

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

shell32.lib

shell32.inc

 

Funkcia ShellAbout zobrazí na obrazovku Shell About dialog box, ktorý obsahuje (pozri obr. 2) meno a priezvisko vlastníka produktu, názov spoločnosti, max. fyzicky dostupnú pamäť a systémové zdroje. Ak funkcia úspešne zobrazí dialógové okno, vráti hodnotu TRUE, ak nie, vráti hodnotu FALSE.

 

Syntax: ShellAbout, HWND hWnd, LPCTSTR szApp, LPCTSTR szOtherStuff, HICON hIcon   

Hwnd – HWND: Handle materského okna. V prípade, že je tento parameter NULL, správa nemá nijaké vlastnícke okno (to je náš prípad, pozri program 03 a 04).

szApp – LPCTSTR: Ukazovateľ na nulou zakončený reťazec, obsahuje titulok dialógového okna. Tento text sa tiež objaví v prvom riadku. V prípade, že je tento parameter NULL, nezobrazí sa nijaký nami definovaný text.

szOtherStuff – LPCTSTR: Ukazovateľ na nulou zakončený reťazec, obsahuje správu, ktorá sa zobrazí vo štvrtom riadku dialógového okna, teda pod informáciou version a copyright.

hIcon – HICON: Identifikátor ikony, ktorú funkcia zobrazí v dialógovom boxe. Ak je tento parameter NULL, funkcia zobrazí ikonu Microsoft Windows alebo Microsoft Windows NT.

;program03 - Assembler pod Windows - Pc revue

      .386

      .model flat, stdcall

       option casemap : none

 

      include c:\masm32\include\windows.inc

      include c:\masm32\include\user32.inc

      include c:\masm32\include\kernel32.inc

      include c:\masm32\include\shell32.inc

 

      includelib c:\masm32\lib\shell32.lib

      includelib c:\masm32\lib\user32.lib

      includelib c:\masm32\lib\kernel32.lib

 

.code

 

start:  jmp run

 

szApp         db "MASM",0

szOtherStuff  db "Assembler pod Windows",0

             

run:    invoke ShellAbout,NULL,ADDR szApp,ADDR szOtherStuff,NULL

        invoke ExitProcess,NULL

        end start

 

Obr. 2: Výsledok funkcie ShellAbout

 

;program 04 - Assembler pod Windows - Pc revue

      .386

      .model flat, stdcall

       option casemap : none

 

      include c:\masm32\include\windows.inc

      include c:\masm32\include\user32.inc

      include c:\masm32\include\kernel32.inc

 

      includelib c:\masm32\lib\user32.lib

      includelib c:\masm32\lib\kernel32.lib

 

.code

 

start:  jmp run

 

lpCaption     db "DISK A:",0

lpText        db "Press button OK to formatting disk A",0

               

run:    invoke MessageBox,NULL,ADDR lpText,ADDR lpCaption,

               MB_ICONWARNING+MB_OKCANCEL+MB_DEFBUTTON2

        invoke ExitProcess,NULL

        end start

 

Obr. 3: Výsledok funkcie MessageBox

 

Slovník skratiek

API (Application Programming Interface) – názov aplikačného programového rozhrania.

DLL (Dynamic Link Library) – dynamicky (za chodu programu) linkovaná (pripojovaná) knižnica.

DUP – opakuje umiestnenie dát s hodnotou výraz. Počet určuje, koľkokrát sa bude umiestnenie opakovať. Výraz môže byť DB, DW, DD, DF, DP a pod. Ako výraz môžeme použiť aj operátor DUP, ale počet vnorení môže byť maximálne 17. Syntax: počet DUP(výraz [,výraz]...)

HAL (Hardware Abstraction Layer) – hardvérová abstrakčná vrstva.

HANDLE – číslo identifikujúce daný objekt, napr. okno.

MB (megabajt) – t. j. 1 048 576 bajtov.
SOHO (Small Office/Home Office) – malá domáca kancelária.

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Ako na to

Tipy a triky: Ako na snímku obrazovky na akomkoľvek počítači s Windows?

02.12.2016 00:13

Ak snímky obrazovky robíte často apotrebujete napríklad funkcie na posun stránok alebo snímanie zobrazenia pri vyššom rozlíšení displeja, zrejme používate nejakú špecializovanú aplikáciu. Väčšina použ ...

Ako na to 1

Tipy a triky: Ako aplikácii prednastaviť spúšťanie s administrátorskými právami?

30.11.2016 00:10

Väčšina aspoň trochu skúsenejších používateľov vie, že aj keď máte na operačnom systéme Windows vytvorený administrátorský účet, aplikácie pre bezpečnosť nefungujú vždy splnými administrátorskými práv ...

Ako na to 2

Tipy a triky: Ako vypnúť uzamykaciu obrazovku vo Windows 10?

29.11.2016 00:10

Rozčuľuje vás, že pred každým prihlásením doúčtu vášho počítača musíte prejsť uzamykacou obrazovkou? Windows 10 na tejto obrazovke ukazuje čas,dátum anejakú zaujímavú fotografiu zrôznych kútov sveta. ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá