Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут післядипломної освіти
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2010
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування та операційні системи

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ Національний університет "Львівська політехніка" Інститут післядипломної освіти Кафедра АСУ Лабораторні роботи з дисципліни " Системне програмування та операційні системи " Лабораторна робота №1 Тема – введення в програмування за допомогою API. Мета – навчитися використовувати функції Win32 API при програмуванні в операційній системі Windows. Порядок виконання роботи: Замінити виклик функції API GetComputerNameA на виклик однієї з наступних функцій, змінивши відповідним чином параметри: GetUserNameA, GetWindowsDirectoryA, GetSystemDirectoryA, GetTempPathA, GetCurrentDirectoryA, GetDriveTypeA, після чого відкомпілювати і запустити програму. .386 .model flat, STDCALL ; Визначення зовнішніх процедур: extrn ExitProcess :proc ; Ліквідація процесу, extrn MessageBoxA :proc ; Вивід вікна з повідомленням, extrn GetUserNameA :proc ; Отримання імені комп’ютера. .data ; Вміст сегменту даних: buflen dd 256 ; Визначення комірки пам’яті hello_title db 'Лаб.роб.№1, Стрільбицький Я.З.', 0 hello_message db 'Ім''я користувача (Get User Name) : ' ; Рядок байтів user_name db 256 dup (0) ; Буфер заповнений нулями .code ; Вміст сегменту коду: Start: push offset buflen ; 2-й параметр: адреса buflen push offset user_name ; 1-й параметр: адреса user_name call GetUserNameA ; виклик функції API push 40h ; стиль вікна – одна кнопка “OK” з піктограмою “і” push offset hello_title ; адреса рядка із заголовком push offset hello_message ; адреса рядка з повідомленням push 0 ; хендл програми-власника вікна call MessageBoxA ; виклик функції API push 0 ; код виходу з програми call ExitProcess ; завершення програми end Start ; закінчення сегменту кода  .386 .model flat, STDCALL ; Визначення зовнішніх процедур: extrn ExitProcess :proc ; Ліквідація процесу, extrn MessageBoxA :proc ; Вивід вікна з повідомленням, extrn GetComputerNameA :proc ; Отримання імені комп’ютера. .data ; Вміст сегменту даних: buflen dd 256 ; Визначення комірки пам’яті hello_title db 'Лаб.роб.№1,КН-21,Стрільбицький Я.З.', 0 hello_message db 'І''мя комп''ютера: ' ; Рядок байтів user_name db 256 dup (0) ; Буфер заповнений нулями .code ; Вміст сегменту коду: Start: push offset buflen ; 2-й параметр: адреса buflen push offset user_name ; 1-й параметр: адреса user_name call GetComputerNameA ; виклик функції API push 40h ; стиль вікна – одна кнопка “OK” з піктограмою “і” push offset hello_title ; адреса рядка із заголовком push offset hello_message ; адреса рядка з повідомленням push 0 ; хендл програми-власника вікна call MessageBoxA ; виклик функції API push 0 ; код виходу з програми call ExitProcess ; завершення програми end Start ; закінчення сегменту кода  .386 ; Для процесора не нижче INTEL-386 .model flat, STDCALL ; компілювати як програму для WIN32; ; Визначення зовнішніх процедур: extrn ExitProcess :proc ; Ліквідація процесу, extrn MessageBoxA :proc ; Вивід вікна з повідомленням, extrn GetDriveTypeA :proc ; Визначення типу диску. .data ; Вміст сегменту даних: buflen dd 256 ; Визначення комірки пам’яті hello_title db 'Лаб.роб.№1,КН-21, Стрільбицький Я .З.', 0 hello_message db 'Тип логічного диска: ' ; Рядок байтів user_name db 256 dup (0) ; Буфер заповнений нулями N1 db "e:\",0 .code ; Вміст сегменту коду: Start: call GetDriveTypeA, offset N1 add al,"0" mov user_name, al push 40h ; стиль вікна – одна кнопка “OK” з піктограмою “і” push offset hello_title ; адреса рядка із заголовком push offset hello_message ; адреса рядка з повідомленням push 0 ; хендл програми-власника вікна call MessageBoxA ; виклик функції API ; код виходу з програми call ExitProcess,0 ; завершення програми end Start ; закінчення сегменту кода  .386 ; Для процесора не нижче INTEL-386 .model flat, STDCALL ; компілювати як програму для WIN32; ; Визначення зовнішніх процедур: extrn ExitProcess :proc ; Ліквідація процесу, extrn MessageBoxA :proc ; Вивід вікна з повідомленням, extrn GetWindowsDirectoryA :proc ; Отримання імені комп’ютера. .data ; Вміст сегменту даних: buflen dd 256 ; Визначення комірки пам’яті hello_title db 'Лаб.роб.№1 , Стрільбицький Я.З., 0 hello_message db 'Розміщення каталогу Windows: ' ; Рядок байтів user_name db 256 dup (0) ; Буфер заповнений нулями .code ; Вміст сегменту коду: Start: push offset buflen ; 2-й параметр: адреса buflen push offset user_name ; 1-й параметр: адреса user_name call GetWindowsDirectoryA; push 40h ; стиль вікна – одна кнопка “OK” з піктограмою “і” push offset hello_title ; адреса рядка із заголовком  .386 .model flat, STDCALL ; Визначення зовнішніх процедур: extrn ExitProcess :proc ; Ліквідація процесу, extrn MessageBoxA :proc ; Вивід вікна з повідомленням, extrn GetUserNameA :proc ; Отримання імені комп’ютера. .data ; Вміст сегменту даних: buflen dd 256 ; Визначення комірки пам’яті hello_title db 'Лаб.роб.№1, Стрільбицький Я.З. hello_message db 'Ім''я користувача (Get User Name) : ' ; Рядок байтів user_name db 256 dup (0) ; Буфер заповнений нулями .code ; Вміст сегменту коду: Start: push offset buflen ; 2-й параметр: адреса buflen push offset user_name ; 1-й параметр: адреса user_name call GetUserNameA ; виклик функції API push 40h ; стиль вікна – одна кнопка “OK” з піктограмою “і” push offset hello_title ; адреса рядка із заголовком push offset hello_message ; адреса рядка з повідомленням push 0 ; хендл програми-власника вікна call MessageBoxA ; виклик функції API push 0 ; код виходу з програми call ExitProcess ; завершення програми end Start ; закінчення сегменту кода  Лабораторна робота №2 Тема – структури даних для використання системних функцій. Мета – навчитися будувати структури даних для використання функцій Win32 API при програмуванні в операційній системі Windows. Порядок виконання роботи: 1. Змінити текст програми таким чином, щоб функція API MessageBoxA виводила на екран вікно з двома кнопками: <OK> та <Cancel>. При натисненні кнопки <OK> програма повинна знову отримати системний час, а при натисненні кнопки <Cancel> - програма завершує роботу. 2. Замінити виклик функції API GetLocalTime на виклик однієї з наступних функцій (змінивши відповідним чином параметри): GetSystemTime, DeleteFileA, CopyFileA, RemoveDirectoryA, SetCurrentDirectoryA, SetVolumeLabelA, GetTempFileNameA, SetFileAttributesA, GetFileAttributesA, GetLogicalDrives, GetLogicalDriveStringsA. Для кожної функції додати відповідні дані та команди, якщо вони потрібні. .386 .model flat,STDCALL extrn ExitProcess: proc extrn GetLocalTime: proc extrn MessageBoxA: proc extrn _wsprintfA:Proc .data Time_title db 'Лаб.роб.№2,КН-21Стрільбицький Я.З.,0 TIME_STRING db 2000 dup (0) FORMAT_STRING: db ' Системний час:',0dh,0ah,0dh,0ah db ' Рiк: %ld',0dh,0ah db ' Мiсяць: %ld',0dh,0ah db ' День тижня: %ld',0dh,0ah db ' Число: %ld',0dh,0ah db ' Година: %ld',0dh,0ah db ' Хвилин: %ld',0dh,0ah db ' Секунда: %ld',0dh,0ah db ' Мілісекунда: %ld',0dh,0ah db 0 Time_struc: wYear dw 0 ; Рік wMonth dw 0 ; Місяць wDayOfWeek dw 0 ; День тиждня wDay dw 0 ; Число wHour dw 0 ; Година wMinute dw 0 ; Хвилина wSecond dw 0 ; Секунда wMilliseconds dw 0 ; Мілісекунда ;============================================================== .code Start: push offset Time_struc call GetLocalTime xor eax,eax ; EAX=0 mov ax,wMilliseconds push eax mov ax,wSecond push eax mov ax,wMinute push eax ; наступні параметри з стеку не забираються mov ax,wHour push eax mov ax,wDay push eax mov ax,wDayOfWeek push eax mov ax,wMonth push eax mov ax,wYear push eax push offset FORMAT_STRING push offset TIME_STRING call _wsprintfA ; Вивід параметрів add esp,4*10 ; та очищення стеку push 1h push offset Time_title push offset TIME_STRING push 0 call MessageBoxA cmp eax,1 jz Start push 0 call ExitProcess end Start  .386 .model flat,STDCALL extrn ExitProcess: proc extrn GetLocalTime: proc extrn MessageBoxA: proc extrn GetFileAttributesA:Proc .data Time_title db 'Лаб.роб.№2, Стрільбицький Я.З.',0 f1 db "tlink32.exe",0 MAS1 db 40 dup(?) .code Start: call GetFileAttributesA, offset f1 mov esi,offset MAS1 mov ecx,32 M1: mov dl,"0" rcl eax,1 adc dl,0 mov [esi],dl inc esi dec ecx jnz M1 call MessageBoxA,0,offset MAS1,offset Time_title,0 call ExitProcess,0 end Start  .386 .model flat,STDCALL Extrn ExitProcess :Proc Extrn GetCurrentDirectoryA:Proc Extrn GetVolumeInformationA:Proc Extrn _wsprintfA :Proc Extrn MessageBoxA :Proc .data Title1 db 'Лаб.роб.№2, Стрільбицький Я. З.. ',0 VOLUME db 'F:/',0 VOL_LABEL db 16 dup(0) SERIAL_NUMBER dd 0 FILE_LEN dd 0 VOL_FLAG dd 0 FILESYSTEM db 16 dup(0) FORMAT db 'Диск: %s',0dh,'Мітка диска: %s',0dh,'Серійний №: %X',0dh,'Файлова система: %s',0 TEXT1 db 260 dup(?) .code Start: call GetVolumeInformationA,offset VOLUME,offset VOL_LABEL,16,offset SERIAL_NUMBER,offset FILE_LEN,offset VOL_FLAG,offset FILESYSTEM,16 call _wsprintfA,offset TEXT1,offset FORMAT,offset VOLUME,offset VOL_LABEL,SERIAL_NUMBER,offset FILESYSTEM add esp,24 call MessageBoxA,0,offset TEXT1,offset Title1,40h call ExitProcess,0 end Start  Лабораторна робота №3 Тема – робота з пам’яттю. Мета – навчитися використовувати системну пам’ять та розміщати в ній дані з файлу. Порядок виконання роботи: Доповнити подану програму функцією вибору файлу GetOpenFileNameA (див. довідкову інформацію після програми). Доповнити отриману програму фрагментом для визначення часу створення та часу останньої модифікації файлу за допомогою функції GetFileTime. Перетворити час у зручний для сприйняття вигляд за допомогою функції FileTimeToSystemTime та вивести його за допомогою програми попередньої лабораторної роботи. Структуру даних часу time_struc розмістити у виділеному блоці пам’яті. Після закриття файлу виконати його запуск через оболонку WINDOWS за допомогою команди ShellExecuteA. .386 .model flat,STDCALL extrn CreateFileA:Proc extrn GlobalAlloc:Proc extrn GlobalLock:Proc extrn ReadFile:Proc extrn GetLastError:Proc extrn MessageBoxA:Proc extrn CloseHandle:Proc extrn GlobalUnlock:Proc extrn GlobalFree:Proc extrn ExitProcess:Proc extrn MessageBoxW:Proc extrn GetOpenFileNameA:Proc extrn GetCurrentDirectoryA:Proc extrn GetFileTime:Proc extrn FileTimeToSystemTime:Proc .data title1 db "Лаб.роб.№3,KH-21, Стрільбицький Я.З.",0 openname db '1.TXT',250 dup(0) hFile dd 0 hMemory dd 0 ; ????? ????? ???’??? pMemory dd 0 ; ?????? ????? ???’??? SizeRead dd 0 MEMSIZE equ 1000000h ; 16 Mb ; – ??????? ??????? ? ????????????, ? ?????????? ????? ?????????? ??????? ???? ??? ????????? S1: FSize dd 76 ; ??????? ?i?? ?????????; Howner dd 0 ; ????i???? ?i???-???????? ??? 0; AppHWnd dd 0 ; ????i???? ??????-????????; Filters dd offset filter_tab ; ????i???? ?? ?????i? ???i? ????i?; CustFilters dd 0 ; ????i???? ?? ?????i? ???i? ????i? ??i ????????i ????????????i; CstFltSize dd 0 ; ??????? ?????? ?? ???? ?????? CustFilters; CurFilter dd 2 ; i????? ????????? ?i????? (1,2,3,...) ??? 0; CurFileName dd offset openname ; ????i???? ?? ????? i?'? ?????, ?????????, ?? “?:\dir1\dir2\file.ext”,0; CurFlNmSize dd 512 ; ??????? ?????? ????????? ? CurFileName; CurFile dd 0 ; ????i???? ?? i?'? ????? ? ???????????; CurFlSize dd 0 ; ??????? ?????? ????????? ? CurFile; InitialDir dd offset dir ; ????i???? ?? ??????? ????? ??? 0 ??? ?????? ????????; DlgTitle dd offset titl ; ????i???? ?? ????? ?i???; Flags dd 00h ; ??? ?i???, ??? ?i??????? ???? (???? ???? 200h); FileOffset dw 0 ; ???????? ??????? ??????? ?????, ?????????=13 ???? ?????????? ???? ????? “?:\dir1\dir2\file.asm”; ExtOffset dw 0 ; ??i????? ?i? ??????? ????? ?? ?????????? (? ?????? ???????i =18) ??? 0 ???? ?????????? ?????; Extension dd 0 ; ????i???? ?? ?????????? ??????????, ??? ???? ?????? ?? i???i, ???? ?????????? ????? (??? 0); CustData dd 0 ; ????i???? ?? ???i ??? hook-?????????; HookProc dd 0 ; ????i???? ?? hook-?????????, ???? ???? ????????? ? Flags; TmplateRsc dd 0 ; ????i???? ?? ?????? ??????i?, ???? ?i? ???????????? ? Flags; ; ????????? ?????? ?? ?????????: filter_tab db "Графічні файли (*.BMP)",0h,"*.BMP",0 db "Текстові файли (*.TXT)",0,"*.txt",0 db "Лабораторнi роботи (*.ASM)",0,"*.asm",0 db "Всi типи файлiв (*.*)",0h,"*.*",0,0 dir db 260 dup(0) titl db "Лаб.роб.№3, Стрільбицький Я.З.",0 ;------------------------------------- lpCreationTime dq ? lpLastAccessTime dq ? lpLastWriteTime dq ? ;------------------------------------- .code Start: call GetCurrentDirectoryA,260,offset dir call GetOpenFileNameA,offset S1 push 0 push 0h ; ???? ? ?????????? ?????????? push 4h ; ???????? ???????? ??? ???????? ????? push 0 ; ??? ????????? ??????? push 1h ; ????????? ???????? ?????? ?? ??????? push 80000000h ; ?????? ???? push offset openname ; ?????? ????? ????? call CreateFileA mov hFile,eax ; ???????? ????? ????? call GetFileTime, hFile, offset lpCreationTime, offset lpLastAccessTime, offset lpLastWriteTime call FileTimeToSystemTime,offset lpCreationTime, offset Time_struc call PRINT_TIME push hFile call CloseHandle ; ??????? ???? push 0 call ExitProcess ; ?????????? ? Windows ;---------------------------------------- ;include GetTime.inc extrn _wsprintfA:Proc .data Time_title db ' Lab3 KH-21, Стрільбицький Я.З.',0 TIME_STRING db 2000 dup (0) FORMAT_STRING: db ' System Time:',0dh,0ah,0dh,0ah db ' Year: %ld',0dh,0ah db ' Month: %ld',0dh,0ah db ' Day of Week: %ld',0dh,0ah db ' Date: %ld',0dh,0ah db ' Hour: %ld',0dh,0ah db ' Minute: %ld',0dh,0ah db 0 Time_struc: wYear dw 0 ; ??? wMonth dw 0 ; ?????? wDayOfWeek dw 0 ; ???? ?????? wDay dw 0 ; ????? wHour dw 0 ; ?????? wMinute dw 0 ; ??????? wSecond dw 0 ; ??????? wMilliseconds dw 0 ; ??????????? ;============================================================== .code PRINT_TIME: xor eax,eax ; EAX=0 mov ax,wMinute push eax ; ???????? ????????? ? ????? ?? ??????????? mov ax,wHour push eax mov ax,wDay push eax mov ax,wDayOfWeek push eax mov ax,wMonth push eax mov ax,wYear push eax push offset FORMAT_STRING push offset TIME_STRING call _wsprintfA ; ????? ?????????? add esp,4*8 ; ?? ???????? ????? push 0h push offset Time_title push offset TIME_STRING push 0 call MessageBoxA ret end Start   Лабораторна робота №4 Тема – стандартні класи вікон та їх типи. Мета – зрозуміти поняття вікна в операційній системі Windows. Порядок виконання роботи: Замість стандартного класу Button ввести наступні назви класів: ComboBox, Edit, ListBox, Message, ScrollBar, Static, SysAnimate32, SysHeader32, SysListView32, SysTabControl32, SysTreeView32, TTSubclass, ToolTips, ToolbarWindow32, msctls_hotkey32, msctls_progress32, msctls_statusbar32, msctls_trackbar32, msctls_updown32, tooltips_class32, #32768, #32769, #32770, #32771, ComboBoxEx32, SysPager, SysIPAddress32, NativeFontCtl. .386 .model flat,STDCALL extrn InitCommonControls:Proc extrn GetModuleHandleA:Proc extrn ExitProcess:Proc extrn CreateWindowExA:Proc extrn GetMessageA:Proc extrn DispatchMessageA:Proc extrn TranslateMessage:Proc ; Визначення типів (стилів) вікон: WS_POPUP equ 80000000h WS_VISIBLE equ 010000000h WS_DLGFRAME equ 400000h WS_EX_TOPMOST equ 8h ; Код повідомлення про натиснуту клавішу: WM_KEYDOWN equ 100h .data MSG: ; Структура стандартного повідомлення WINDOWS msHWND dd 0 ; хто надіслав msMESSAGE dd 0 ; яку інформацію msWPARAM dd 0 ; про що msLPARAM dd 0 ; і як msTIME dd 0 ; коли ptX dd 0 ; де (X), ptY dd 0 ; (Y) AppHWnd dd 0 NewHWnd dd 0 WindowCaption db "Лаб.роб.№4, Стрільбицький Я.З ",0 CLASSNAME db 'Button',0 ; Ім’я стандартного класу ;======================================= .code Start: call InitCommonControls push 0h call GetModuleHandleA mov AppHWnd,eax push 0 ; MDI-структура push AppHWnd ; програмний модуль push 0 ; меню push 0 ; власник push 100 ; висота push 480 ; ширина push 250 ; координата y push 300 ; координата x push WS_POPUP or WS_VISIBLE or WS_DLGFRAME push offset WindowCaption ; Заголовок вікна push offset CLASSNAME ; Ім’я класу вікна push WS_EX_TOPMOST ; Властивості call CreateWindowExA ; Створити вікно mov NewHWnd,eax ; Зберегти хендл вікна ;======================================= MSG_LOOP: ; Цикл прийому повідомлень push 0 ; діапазон прийому - push 0 ; всі можливі повідомлення push NewHWnd ; від даного вікна push offset MSG ; Адреса структури повідомлення call GetMessageA cmp msMESSAGE,WM_KEYDOWN jnz CONTINUE_LOOP cmp msWPARAM,1bh ; код <ESC> jz STOP CONTINUE_LOOP: push offset MSG call TranslateMessage push offset MSG ; Направити повідомлення у ві- call DispatchMessageA ; конну процедуру. jmp MSG_LOOP ;============================== STOP: push 0 call ExitProcess End Start  .386 .model flat,STDCALL extrn InitCommonControls:Proc extrn GetModuleHandleA:Proc extrn ExitProcess:Proc extrn CreateWindowExA:Proc extrn GetMessageA:Proc extrn DispatchMessageA:Proc extrn TranslateMessage:Proc ; Визначення типів (стилів) вікон: WS_POPUP equ 80000000h WS_VISIBLE equ 010000000h WS_DLGFRAME equ 400000h WS_EX_TOPMOST equ 8h ; Код повідомлення про натиснуту клавішу: WM_KEYDOWN equ 100h BS_AUTOCHECKBOX equ 3h .data MSG: ; Структура стандартного повідомлення WINDOWS msHWND dd 0 ; хто надіслав msMESSAGE dd 0 ; яку інформацію msWPARAM dd 0 ; про що msLPARAM dd 0 ; і як msTIME dd 0 ; коли ptX dd 0 ; де (X), ptY dd 0 ; (Y) AppHWnd dd 0 NewHWnd dd 0 WindowCaption db " Стрільбицький Я.З.",0 CLASSNAME db 'Button',0 ; Ім’я стандартного класу ;======================================= .code Start: call InitCommonControls push 0h call GetModuleHandleA mov AppHWnd,eax push 0 ; MDI-структура push AppHWnd ; програмний модуль push 0 ; меню push 0 ; власник push 100 ; висота push 480 ; ширина push 250 ; координата y push 300 ; координата x push WS_POPUP or WS_VISIBLE or WS_DLGFRAME or BS_AUTOCHECKBOX push offset WindowCaption ; Заголовок вікна push offset CLASSNAME ; Ім’я класу вікна push WS_EX_TOPMOST ; Властивості call CreateWindowExA ; Створити вікно mov NewHWnd,eax ; Зберегти хендл вікна ;======================================= MSG_LOOP: ; Цикл прийому повідомлень push 0 ; діапазон прийому - push 0 ; всі можливі повідомлення push NewHWnd ; від даного вікна push offset MSG ; Адреса структури повідомлення call GetMessageA cmp msMESSAGE,WM_KEYDOWN jnz CONTINUE_LOOP cmp msWPARAM,1bh ; код <ESC> jz STOP CONTINUE_LOOP: push offset MSG call TranslateMessage push offset MSG ; Направити повідомлення у ві- call DispatchMessageA ; конну процедуру. jmp MSG_LOOP ;============================== STOP: push 0 call ExitProcess End Start  .386 .model flat,STDCALL extrn GetModuleHandleA:Proc extrn ExitProcess:Proc extrn CreateWindowExA:Proc extrn DispatchMessageA:Proc extrn SendMessageA:Proc extrn PeekMessageA:Proc extrn TranslateMessage:Proc WS_POPUP EQU 80000000h WS_VISIBLE EQU 010000000h WS_DLGFRAME EQU 400000h WS_EX_TOPMOST equ 8h WM_KEYDOWN equ 100h CB_ADDSTRING equ 143h CBS_DROPDOWN equ 2h CBS_HASSTRINGS equ 200h CBS_SORT equ 100h PM_REMOVE equ 1h ;=============================================================== .data msg: ; структура повiдомлення msHWND dd 0 msMESSAGE dd 0 msWPARAM dd 0 msLPARAM dd 0 msTIME dd 0 ptX dd 0 ptY dd 0 AppHWnd dd 0 ; хендл завантаженої програми NewHWnd dd 0 ; хендл кнопки CLASSNAME db 'ComboBox',0 STR1 db "Лаб.роб.№4, Чопко Я.О.",0 STR2 db "рядок 2",0 ;================================================================ .code Start: push 0h call GetModuleHandleA mov AppHWnd,eax push 0 push AppHWnd ; hInstance push 0 ; menu push 0 ; parent hwnd push 60 ; розмiр по вертикалi push 480 ; розмiр по горизонталi push 250 ; координата y push 300 ; координата x push WS_POPUP or WS_VISIBLE or WS_DLGFRAME \ or CBS_SORT or CBS_DROPDOWN or CBS_HASSTRINGS push 0 ; назва вiкна push offset CLASSNAME push WS_EX_TOPMOST ; поверх всiх вiкон call CreateWindowExA mov NewHWnd,eax call SendMessageA,NewHWnd,CB_ADDSTRING,0,offset STR1 call SendMessageA,NewHWnd,CB_ADDSTRING,0,offset STR2 ;==================================================== MSG_LOOP: call PeekMessageA,offset msg,NewHWnd, 0h,0, PM_REMOVE or eax,eax jnz MESS_OK call PeekMessageA,offset msg,0, 201h,202h, PM_REMOVE or eax,eax jz MSG_LOOP MESS_OK: cmp msMESSAGE,WM_KEYDOWN ; якщо це повiдомлення про натиснену клавiшу, jnz CONTINUE_LOOP cmp msWPARAM,1bh ; якщо її код = <ESC>, то STOP jz STOP CONTINUE_LOOP: call TranslateMessage,offset msg call DispatchMessageA,offset msg ; обробити повiдомлення jmp MSG_LOOP ;============================== STOP: push 0 call ExitProcess End Start  Лабораторна робота №5 Тема – Дочірні вікна: їх утворення та взаємодія, графічний контекст. Мета – навчитись будувати ієрархічну структуру вікон та працювати з ними. Порядок виконання роботи: Переробити першу програму таким чином, щоб вона мала три дочірніх вікна класу msctls_trackbar32, кожне з яких регулюватиме один з кольорів: червоний, зелений, синій. Переробити програму так, щоб текст, який виводить значення кольору, виводився шрифтом “Comic Sans MS”. Створення гарнітури шрифту зробити перед створенням вікна. Ввести в програму дочірнє вікно класу SysAnimate32 з стилем ACS_AUTOPLAY. Після створення вікна цього стилю надіслати йому повідомлення ACM_OPEN та ACM_PLAY. Формат повідомлень знайти в Win32.hlp. Ввести в програму дочірнє вікно класу Edit з стилями ES_CENTER та ES_MULTILINE. За допомогою повідомлення EM_GETLINE переписати в буфер введену інформацію та вивести її за допомогою функції MessageBoxA. Для коректної роботи програми з вікном класу Edit в цикл прийому повідомлень вставити функцію TranslateMessage. Створити в основній програмі таймер за допомогою функції SetTimer, який буде щосекунди надсилати повідомлення WM_TIMER у процедуру основного вікна. З приходом кожного такого повідомлення у процедурі вікна збільшувати змінну-лічильник і надсилати її текстове значення у дочірнє вікно класу Edit за допомогою повідомлення WM_SETTEXT. .586 .model flat,stdcall Extrn CreateFontIndirectA:Proc, GetDC:Proc, SelectObject:Proc, SetTextColor:Proc Extrn SetBkColor:Proc, TextOutW:Proc, ReleaseDC:Proc, ExitProcess:Proc, TextOutA:Proc .data HDC dd 0 LOGFONTA: lfHeight DD 70 ; ?????? lfWidth DD 20 ; ?????? lfEscapement DD 0 ; ??? ?????? * 10 lfOrientation DD 0 ; lfWeight DD 1000 ; ????i??? (1000-Bold) lfItalic DB 1 ; ?????? lfUnderline DB 0 ; ?i?????????? lfStrikeOut DB 0 lfCharSet DB 1 ; 255 – ?????? DOS lfOutPrecision DB 0 lfClipPrecision DB 0 lfQuality DB 1 lfPitchAndFamily DB 0 lfFaceName DB 'Times New Roman' ; ????? ????? Reserv DB 32-6 dup(0) X_coord dd 80 Y_coord dd 80 Text1: DB ' Чопко Я.О ' ; ????????????? db ' ',0,'r',0,'o',0,'g',0,'r',0,'a',0,'m',0 EndText1 db 0 Text2: DB "Лабораторна робота №5" EndText2 db 0 .code Start: call GetDC,0 mov HDC,eax call CreateFontIndirectA, offset LOGFONTA call SelectObject,HDC,eax call SetTextColor,HDC,0022FFh call SetBkColor,HDC,00FFFFh mov eax,offset EndText2 ; ANSI sub eax,offset Text2 call TextOutA,
Антиботан аватар за замовчуванням

31.03.2013 02:03-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!