Контрольная работа по предмету "Информатика, программирование"


Розроблення програми на мові С для 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



Не сдавайте скачаную работу преподавателю!
Данную контрольную работу Вы можете использовать для выполнения своих заданий.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :