Название: Розроблення програми на мові С для OS Windows
Вид работы: лабораторная работа
Рубрика: Информатика и программирование
Размер файла: 22.71 Kb
Скачать файл: referat.me-140236.docx
Краткое описание работы: Технічне обґрунтування та етапи розроблення програми на мові С для OS Windows, яка виводить у вікно запропонованої таблиці інформацію при натисненні клавіш клавіатури. Проблеми систем програмування. Резервування додаткової пам’яті в структурi класу вiкна.
Розроблення програми на мові С для OS Windows
Міністерство освіти і науки України
Житомирський державний технологічний університет
ФІКТ
Кафедра ПЗОТ
Група ПІ-39
Лабораторна робота №5
з курсу «Системне програмування»
на тему:«KeyLock»
м. Житомир
2011 р.
ЗАГОЛОВОК
Завдання . 3
Код програми . 4
Висновок . 8
Завдання
1. Вивчити матеріал викладений у файлі допомоги
2. Створити програму, яка друкує в вікно інформацію про натискання клавіш на клавіатурі в подібну таблицю:
Massege | Key | Char | Repeat | Scan | Ext | Alt | Prev | Tran |
Код програми
KEYLOOK.C
#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
RECT rect ; //структура, яка буде мiстити розмiри вiкна
int cxChar; //ширина символа
int cyChar; //висота символа
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static char szAppName[] = "KeyLook" ;
HWND hwnd; //дескрипторвiкна
MSG msg; //структураповiдомлення
WNDCLASSEX wndclass; //структуракласувiкна
wndclass.cbSize = sizeof (wndclass); //розмiрструктурикласувiкна
wndclass.style = CS_HREDRAW | CS_VREDRAW; //стилькласувiкна
wndclass.lpfnWndProc = WndProc; // вiконнапроцедура
wndclass.cbClsExtra = 0; //резервуваннядодатков. пам’ятi вструктурi класувiкна
wndclass.cbWndExtra = 0; //резервуваннядодатков. пам’ятi вструктурi вiкна
wndclass.hInstance = hInstance; //дескрипторекземплярапрограми
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION); //задання iконки
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW); //заданнякурсораwndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); //заданнякольоруфонуробоч. областi вiкна
wndclass.lpszMenuName = NULL; //менюкласу
wndclass.lpszClassName = szAppName; // iм’якласу
wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION); //задання iконкидлявiконданногокласу
RegisterClassEx (&wndclass) ;
hwnd = CreateWindow (szAppName, //iм’яклассувiкна
" Keyboard Message Looker ", // заголовоквiкна
WS_OVERLAPPEDWINDOW, // стильвiкна
CW_USEDEFAULT, // початкове положення по х
CW_USEDEFAULT, // початкове положення по у
CW_USEDEFAULT, // початковий розмiр по х
CW_USEDEFAULT, // початковий розмiр по у
NULL, // дескриптор батькiвського вiкна
NULL, // дескриптор меню вiкна
hInstance, // дескриптор екземпляра програми
NULL) ; // параметри створення
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ; //перемалювання робоч. областi вiкна
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg); //передачаструктурив Windows
DispatchMessage (&msg); //вiдправкаповiдомленьвiконiйпроцедурi
}
return msg.wParam ;
}
void ShowKey (HWND hwnd, int iType, char *szMessage, WPARAM wParam, LPARAM lParam)
{
static char *szFormat[2] = { "%-14s %3d %c %6u %4d %3s %3s %4s %4s",
"%-14s %3d %c %6u %4d %3s %3s %4s %4s" } ;
char szBuffer[80] ;
HDC hdc ; //дескрипторконтекступристрою
ScrollWindow (hwnd, 0, -cyChar, &rect, &rect) ;
hdc = GetDC (hwnd) ; //отримання дексриптора контексту пристрою
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ; //вибiршрифту
TextOut (hdc, cxChar, rect.bottom - cyChar, szBuffer,
wsprintf (szBuffer, szFormat [iType],
szMessage, wParam,
(BYTE) (iType ? wParam : ' '),
LOWORD (lParam), //повтореннянатисненняклавiш
HIWORD (lParam) & 0xFF, //сканкод
(PSTR) (0x01000000 & lParam ? "Yes" : "No"), //розширен. клавiатури
(PSTR) (0x20000000 & lParam ? "Yes" : "No"), //чинатисненаклавіша Alt
(PSTR) (0x40000000 & lParam ? "Down" : "Up"), //попереднiйстанклавiши
(PSTR) (0x80000000 & lParam ? "Up" : "Down"))); //теперешнiйстанклавiши
ReleaseDC (hwnd, hdc) ; //звiльненнядескриптора
ValidateRect (hwnd, NULL) ; //вiкнонепотребуєперемальовування
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
static char szTop[] = "Message Key Char Repeat Scan Ext ALT Prev Tran";
static char szUnd[] = "_______ ___ ____ ______ ____ ___ ___ ____ ____";
HDC hdc ;
PAINTSTRUCT ps ;
TEXTMETRIC tm ;
switch (iMsg)
{
case WM_CREATE : //створеннявiкна
hdc = GetDC (hwnd);
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;
GetTextMetrics (hdc, &tm) ;
cxChar = tm.tmAveCharWidth ;
cyChar = tm.tmHeight ;
ReleaseDC (hwnd, hdc) ;
rect.top = 3 * cyChar / 2 ;
return 0 ;
case WM_SIZE : //змiнарозмiрiввiкна
rect.right = LOWORD (lParam) ;
rect.bottom = HIWORD (lParam) ;
UpdateWindow (hwnd) ;
return 0 ;
case WM_PAINT : //перемалюваннявікна
InvalidateRect (hwnd, NULL, TRUE) ;
hdc = BeginPaint (hwnd, &ps) ;
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;
SetBkMode (hdc, TRANSPARENT) ;
TextOut (hdc, cxChar, cyChar / 2, szTop, (sizeof szTop) - 1) ;
TextOut (hdc, cxChar, cyChar / 2, szUnd, (sizeof szUnd) - 1) ;
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_KEYDOWN : //принатисненніклавiші, яканевiдобрааєтьсянаекранi
ShowKey (hwnd, 0, "WM_KEYDOWN", wParam, lParam) ;
return 0 ;
case WM_KEYUP : //привідпусканніклавiші, яканевiдобрааєтьсянаекранi
ShowKey (hwnd, 0, "WM_KEYUP", wParam, lParam) ;
return 0 ;
caseWM_CHAR : //при натисненнiна клавiшу яка вiдобраається на екранi
ShowKey (hwnd, 1, "WM_CHAR", wParam, lParam) ;
return 0 ;
case WM_DEADCHAR : // принатисненнi на "нiму" клавiшу
ShowKey (hwnd, 1, "WM_DEADCHAR", wParam, lParam) ;
return 0 ;
case WM_SYSKEYDOWN ://принатисненнi наклавiшу <ALT>
ShowKey (hwnd, 0, "WM_SYSKEYDOWN", wParam, lParam) ;
break ;
case WM_SYSKEYUP : //при відпусканні клавіші
ShowKey (hwnd, 0, "WM_SYSKEYUP", wParam, lParam) ;
break ;
caseWM_SYSCHAR : //при натисненнiна <ALT> + <символьна клавiша>
ShowKey (hwnd, 1, "WM_SYSCHAR", wParam, lParam) ;
break ;
case WM_SYSDEADCHAR : // принатисненнi нанiмуклавiшута <Alt>
ShowKey (hwnd, 1, "WM_SYSDEADCHAR", wParam, lParam) ;
break ;
case WM_DESTROY : //призакритi вiкнакористувачем
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
}
Висновок
Отже, на даній лабораторній роботі було розроблено програму на мові С для OS Windows, яка виводить у вікно інформацію про натиснення клавіш клавіатури. програмування клавіатура windows
Похожие работы
-
Обчислення координат курсору миші при переміщенні
Технічне обґрунтування та етапи розроблення програми, яка здатна виводити координати курсору миші при переміщенні, а також відображати відстань та швидкість, з якою проходить курсор між двома обраними точками. Основні елементи та загальні правила роботи.
-
Програма для тестування знань з дисципліни "Програмування на мові С"
Розробка програми, яка б дозволяла протестувати знання з дисципліни "Програмування на мові С", виставити оцінку. Опис та обґрунтування методу організації вхідних та вихідних даних, вибору складу технічних та програмних засобів. Проведення лістингу.
-
Налаштування технічних засобів ПК
Способи налаштування технічних засобів персонального комп'ютеру, комбінація клавіш для відкриття вікна із системними властивостями. Пошук інформації про системну плату та її драйвери, контролери прямого доступу й резервування пам'яті буферу DMA.
-
Розробка програми "KeyLook"
Створення програми, яка друкує в вікно інформацію про натискання клавіш на клавіатурі в таблицю. Функція виведення назви отриманого програмою повідомлення від клавіатури та певних додаткових даних. Обробка інформації, неопрацьованої віконною процедурою.
-
Довідкова система по кримінальному праву
Створення довідкової системи по зменшенню витрат часу на здобуття інформації по кримінальному праву. Розробка алгоритму основної програми на мові програмування Turbo Pascal з підключенням модуля СRT, якій відповідає за графіку і DOS та працює з файлами.
-
Розробка програмного продукту "Тестер"
Загальний алгоритм програми. Алгоритм проходження тесту. Алгоритм загрузки тесту в пам'ять програми. Програма "Тестер" на мові програмування TurboPascal в середовищі Borland Delphi 7. Інтерфейс програми "Тестер". Зовнішній вигляд вікна результату.
-
Програмування алгоритмічною мовою VBA
Розв'язання задач мовою програмування VBA з використанням алгоритмів лінійної, розгалуженої та ітераційної циклічної структури. Розробка блок-схеми алгоритму, таблиці ідентифікаторів та тексту програми. Створення власної панелі інструментів користувача.
-
Побудова дерева каталогів диску і реалізація можливості переходу у вибраний каталог
Проектування програми за допомогою мови асемблера, яка б дозволяла відобразити на екрані дерево каталогів на диску і перейти в потрібний користувачеві каталог. Вибір методу розв’язання задачі та обґрунтування доцільності. Проведення лістингу програми.
-
Контроль доступу до вибраних файлів з веденням протоколу
Ведення протоколу роботи комп’ютера. Розробка програми для створення списку розширень файлів і занесення часу і дати доступу до них на мові програмування Асемблер. Виклик переривання 21h код-функції та занесення до регістрів. Алгоритм та лістинг програми.
-
Визначення площі між функціями інтегралом за методом трапеції на мові Pascal
Складання програми на мові Pascal розрахунку за методом трапецій площі між графіками функцій. Розрахунок за методом трапецій площі між графіками функцій. Алгоритм програми. Кількість відрізків, на які розбивається дільниця інтегрування. Межа інтегрування.