Міністерствоосвіти і науки України
Житомирськийдержавний технологічний університет
ФІКТ
Кафедра ПЗОТ
ГрупаПІ-39
Лабораторнаробота №5
з курсу«Системне програмування»
на тему:«KeyLock»
м. Житомир
2011р.
ЗАГОЛОВОК
Завдання. 3
Код програми. 4
Висновок. 8
Завдання
1. Вивчити матеріал викладений уфайлі допомоги
2.Створити програму, яка друкує в вікно інформацію про натискання клавіш наклавіатурі в подібну таблицю:Massege Key Char Repeat Scan Ext Alt Prev Tran
Код програми
KEYLOOK.C
#include
#include
LRESULTCALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
RECTrect; //структура,яка буде мiстити розмiри вiкна
intcxChar; //ширинасимвола
intcyChar; //висотасимвола
intWINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, intiCmdShow)
{
staticchar 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
}
returnmsg.wParam ;
}
voidShowKey (HWND hwnd, int iType, char *szMessage, WPARAM wParam, LPARAM lParam)
{
staticchar *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кнонепотребуєперемальовування
}
LRESULTCALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
staticchar szTop[] = «Message Key Char Repeat Scan Ext ALT PrevTran»;
staticchar szUnd[] = "_______ ___ ____ ______ ____ ___ ___ ________";
HDC hdc ;
PAINTSTRUCTps ;
TEXTMETRIC tm ;
switch(iMsg)
{
caseWM_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 ;
return0 ;
caseWM_SIZE: //змiнарозмiрiввiкна
rect.right = LOWORD (lParam) ;
rect.bottom= HIWORD (lParam) ;
UpdateWindow(hwnd) ;
return0 ;
caseWM_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) ;
return0 ;
caseWM_KEYDOWN: //при натисненніклавiші,яканевiдобрааєтьсянаекранi
ShowKey(hwnd, 0, «WM_KEYDOWN», wParam, lParam) ;
return0 ;
caseWM_KEYUP: //при відпусканніклавiші,яканевiдобрааєтьсянаекранi
ShowKey(hwnd, 0, «WM_KEYUP», wParam, lParam) ;
return0 ;
caseWM_CHAR: //при натисненнiнаклавiшу яка вiдобрааєтьсяна екранi
ShowKey(hwnd, 1, «WM_CHAR», wParam, lParam) ;
return0 ;
caseWM_DEADCHAR: // при натисненнi на«нiму»клавiшу
ShowKey(hwnd, 1, «WM_DEADCHAR», wParam, lParam) ;
return0 ;
caseWM_SYSKEYDOWN ://при натисненнiнаклавiшу
ShowKey(hwnd, 0, «WM_SYSKEYDOWN», wParam, lParam) ;
break;
caseWM_SYSKEYUP: //при відпусканні клавіші
ShowKey(hwnd, 0, «WM_SYSKEYUP», wParam, lParam) ;
break;
caseWM_SYSCHAR: //при натисненнiна +
ShowKey(hwnd, 1, «WM_SYSCHAR», wParam, lParam) ;
break;
caseWM_SYSDEADCHAR : // при натисненнiнанiмуклавiшута
ShowKey(hwnd, 1, «WM_SYSDEADCHAR», wParam, lParam) ;
break;
caseWM_DESTROY: //при закритiвiкнакористувачем
PostQuitMessage(0) ;
return0 ;
}
returnDefWindowProc (hwnd, iMsg, wParam, lParam) ;
}
Висновок
Отже,на даній лабораторній роботі було розроблено програму на мові С для OSWindows, яка виводить у вікно інформацію пронатиснення клавіш клавіатури. програмуванняклавіатура windows