Дәріс № 15. Консольды қолданба

Консольды қолданбаларды графикалық интерфейсті құрудың кажеттілігі де уақыт та жоқ, ал программа, мысалы ақпараттың үлкен көлемін өңдеу керек кезде пайдаланған ыңғайлы. Ең танымал консольды программа – far. Консольды қолданба құрастырым (откомпилирован) түрде ғана емес, текстік нұсқауда да маңызды. Бірақ ең бастысы консольды қолданбаның қарапайым графикалық қолданбасы сияқты Wіndows құралдарына APІ – функциялары арқылы қатынасу мүмкіндіктері бар.

 

Консольды қолданбаларды аудармалау:

MASM үшін:

ml /c/ coff consl.am

lіnk / subsystem: console consl.obj

TASM 32 үшін:

TASM 32 / ml consl.asm

tlіnk 32 / ap consl.obj

Тексттік ақпаратты шығару үшін APІ Wrіte ConsoleA функциясы қолданылады,

BOOL WriteConsole (HANDLE hConsoleOutput, CONST VOID *lpBuffer,

DWORD nNumberOfCharsToWrite, LPDWORD lpNumberOfCharsWritten, LPVOID lpReserved)

Оның параметрлерінің мәні (содан оңға) келесідей:

1-ші параметр – консольды шығару арашығының дескрипторы, ол GotStdHandle функциясы көмегімен алынуы мүмкін.

2-ші параметр – шығарылатын текст орналасқан арашыққа нұсқағыш.

3-ші параметр – шығарылатын символдар саны.

4-ші параметр – DWORD айнымалысына нұсқайды, онда шын мәнінде шығарылған символдар саны орналасады.

5-ші параметр – резервті параметр, ол нөлге тең болуы керек.

Ақпарат консольдық терезеде шыққандықтан, барлық жол тұрақтыларын кодтау DOS-тікі болуы қажет. Программаны Wіndows-қолданба сияқты іске қоссақ, консольды терезе тек бір секундқа пайда болады. Мұның мәні консольды қолданба өз консолін құра алатындығында. Бұл жағдайда барлық енгізу-шығару осы консольға жүргізіледі. Егер де қолданба консольды құрмаса, онда мұнда екі жақты жағдай пайда болады: не программа іске қосылған консоль пайда болады, не Wіndows қолданба үшін өз консолін құрайды.

Өз консольіңізді құру үшін AllocConcole функциясын қолданыңыз. Программа аяқталғанда барлық еншіленген консольдар автоматты түрде босатылады. Бірақ мұны FreeConsole функциясын қолданып та жасауға болады. Консоль дескрипторын алу үшін GetStdHandle функциясы пайдаланылады, оның аргументі келесі үш тұрақтылардың бірі болуы мүмкін:

 

STD_ІNPUT_HANDLE equ – 10 ; енгізу үшін

STD_OUTPUT_HANDLE equ – 11 ; шығару үшін

STD_ERROR_HANDLE equ –12 ; қателік жайлы хабар үшін

Бір үрдістің бір консолі ғана болатынын атап өтейік, сондықтан программа басында FreeConsole-ді орындау міндетті. “Бөтен” консольда программаны іске қосқанда ол осы консольді иеленеді, сондықтан біз FreeConsole функциясын орындамағанша жаңа консольді құра алмаймыз, ал осы функция бөтен консольді жаба алмайды.

Консоль буферінен оқу үшін ReadConsole функциясы қолданылады. Осы функцияның параметрлері (солдан –оңға) келесідей:

1-ші, кіріс буферінің дескрипторы

2-ші, енгізілетін ақпарат орналасатын бкфер адресі

3-ші, осы буфердің ұзындығы

4-ші, нақты оқылған символдар саны

5-ші, резерфтелген

Консолдағы курсор позициясын SetConsoleCursorPosition функциясының көмегімен орнатуға болады:

BOOL SetConsoleCursorPosition (HANDLE hConsoleOutput, COORD dwCursorPosition)

Оның параметрлері:

1-ші, консолдің кіріс буферінің дескрипторы

2-ші, COORD құрылымы:

COORD STRUC

x WORD ?

y WORD ?

COORD ENDS.

Екінші параметр құрылымға нұсқағыш емес, құрылымның өзі болып табылады. Шын мәнінде ассемблер үшін бұл қос сөз (DWORD), кіші сөзі – Х координатасы, ал үлкен сөзі – Ү координатасы.

Шығарылатын әріптердің түсін SetConsoleTextAttrіbute функциясымен орнатуға болады.

BOOL SetConsoleTextAttribute (HANDLE hConsoleOutput, WORD wAttributes)

Осы функциясының бірінші параметрі – консольдің кіріс арашығының дескрипторы, ал екіншісі - әріптердің және фонның түсі. Түс төменде келтірілген тұрақтылардың екеуін немесе одан да көбін қиыстыру (қосынды немесе “Немесе” операциясы) жолымен алынады.

FOREGROUND_BLUE equ 1h ; әріптердің көк түсі

FOREGROUND_GREEN equ 2h ; әріптердің жасыл түсі

FOREGROUND_RED equ 4h ; әріптердің қызыл түсі

FOREGROUND_ІNTENSІTY equ 8h ; жоғары үдемелілік

FOREGROUND_BLUE equ 10h ; фонның көк түсі

FOREGROUND_GREEN equ 20h ; фонның жасыл түсі

FOREGROUND_RED equ 40h ; фонның қызыл түсі

FOREGROUND_ІNTENSІTY equ 80h ; жоғары үдемелілік

Консоль терезесінің бастамасын анықтау үшін SetConsoleTіtle функциясы қолданылады,

BOOL SetConsoleTitle (LPCTSTR lpConsoleTitle)

оның жалғыз параметрі – соңында нөлі бар жол адресі. Ескерту: егер консольдің өз терезесіне шығару үшін DOS-шарттаңбалау қажет болғанда онда бастаманы орнату үшін Wіndows-шартаңбалау қажет.

Жолдарды қайта шарттаңбалау үшін арнайы CharToDem функциясы орындалады.

BOOL CharToOem (LPCTSTR lpszSourse, LPTSTR lpszDest)

Бірінші параметрі – қайта шарттаңбалауға қажетті жолға нұсқағыш, ал екінші параметрі – нәтижені орналастыратын жолға нұсқағыш. Сонымен жол нәтижені қайта шарттаңбалайтын жолға да орналастыруға болады.Біз бірнеше консольдық функцияларды қарастырамыз, барлығы олар елу шамасында. Көптеген консольдық функцияларға тән қасиет – олардың дұрыс аяқталуында нөлдік емес мәні қайтып келеді. Қателік жағдайда EAX-те нөл болады.

 








Дата добавления: 2015-10-26; просмотров: 2170;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.