Как определить какая клавиша нажата в данный момент в c++?? - Вопросы по С+

Вопрос Как определить какая клавиша нажата в данный момент в c++??

Регистрация
17 Сен 2013
Сообщения
71
Репутация
0
Спасибо
0
Монет
0
Пожалуйста имейте ввиду, что этот пользователь забанен
Как определить какая клавиша нажата в данный момент в c++??
 
Регистрация
19 Ноя 2013
Сообщения
95
Репутация
0
Спасибо
0
Монет
0
В какой операционной системе и в каком компиляторе? Работа с клавиатурой не является частью стандарта C++ и в разных ОС / компиляторах реализуется по-разному (и не напрямую, а через механизмы операционной системы).
 
Регистрация
25 Сен 2013
Сообщения
92
Репутация
0
Спасибо
0
Монет
0
В свое время интересовали сканкоды нажатых клавиш. Запилил тогда приложение которое выводило на экран данные. Осталось только понять как приложение функционирует и поймете как узнать какая клавиша была нажата. На деле можно еще отслеживать была ли отпущена клавиша и на основании этого делать выводы зажата клавиша или нет.
Подскажу что основные действия происходят в switch (message), а конкретнее в case WM_KEYDOWN:. Все что до этого это шаблонное создание и вывод окна и как таковое не интересно.
#if defined(UNICODE) && !defined(_UNICODE)
#define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
#define UNICODE
#endif

#include
#include


LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);


TCHAR szClassName[] = _T("ScanCodeApp");

int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nCmdShow)
{
HWND hwnd;
MSG messages;
WNDCLASSEX wincl =
{
sizeof(WNDCLASSEX), // size
CS_DBLCLKS, // style
WndProc, // lpfnWndProc
0, // cbClsExtra
0, // cbWndExtra
hThisInstance, // hInstance
0, // hIcon
0, // hCursor
(HBRUSH) COLOR_BACKGROUND, // hbrBackground
0, // lpszMenuName
szClassName, // lpszClassName
0 // hIconSm
};

wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);

if (!RegisterClassEx (&wincl))
return 0;

hwnd = CreateWindowEx (
0, /* Extended possibilites for variation */
szClassName, /* Classname */
_T("Press key for watch scan code"), /* Title Text */
WS_OVERLAPPEDWINDOW, /* default window */
CW_USEDEFAULT, /* Windows decides the position */
CW_USEDEFAULT, /* where the window ends up on the screen */
640, /* The programs width */
480, /* and height in pixels */
HWND_DESKTOP, /* The window is a child-window to desktop */
NULL, /* No menu */
hThisInstance, /* Program Instance handler */
NULL /* No Window Creation data */
);

ShowWindow (hwnd, nCmdShow);

while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}

return messages.wParam;
}


LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
int strlen;
char str[256];

switch (message)
{
case WM_KEYDOWN:
strlen = wsprintf(str,"Low word wParam = 0x%X Hight word lParam = 0x%X ",
LOWORD(wParam), HIWORD(lParam));

str[strlen] = char(0);

hdc = GetDC(hwnd);
TextOut(hdc,0,0,str,strlen);
ReleaseDC(hwnd, hdc);
break;

case WM_DESTROY:
PostQuitMessage (0);
break;

default:
return DefWindowProc (hwnd, message, wParam, lParam);
}

return 0;
}
 
Сверху Снизу