Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

df df Ученик (60), закрыт 2 года назад
Лучший ответ
Андрей Высший разум (460806) 2 года назад
В какой операционной системе и в каком компиляторе? Работа с клавиатурой не является частью стандарта C++ и в разных ОС / компиляторах реализуется по-разному (и не напрямую, а через механизмы операционной системы).
df dfУченик (60) 2 года назад
windows 7 и dev cpp
df df Ученик (60) kbhit с getch и GetKeyState пробовал, но это не то...
Остальные ответы
КулХацкер Мыслитель (6871) 2 года назад
Посмотри какой батон нажал
Ты че Гуру (2777) 2 года назад
а че ты хочешь сделать кейлоггер что ли написать.
Мне кажется geth(); и тд в инете то что есть достаточно.
Я Красавчег Мыслитель (6814) 2 года назад
В свое время интересовали сканкоды нажатых клавиш. Запилил тогда приложение которое выводило на экран данные. Осталось только понять как приложение функционирует и поймете как узнать какая клавиша была нажата. На деле можно еще отслеживать была ли отпущена клавиша и на основании этого делать выводы зажата клавиша или нет.
Подскажу что основные действия происходят в 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;
}
Я КрасавчегМыслитель (6814) 2 года назад
Вот либы которые подключены
d sasМастер (1034) 8 месяцев назад
запутали бедолагу(
a1987zz Мудрец (13030) 2 года назад
Через хук можно, так отлавливает пробел. Отловить можно любую клавишу.

 #include  

HHOOK _hook;

KBDLLHOOKSTRUCT kbdStruct;

LRESULT __stdcall HookCallback(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0)
{
if (wParam == WM_KEYDOWN)
{
kbdStruct = *((KBDLLHOOKSTRUCT*)lParam);
if (kbdStruct.vkCode == VK_SPACE)
{
MessageBox(NULL, "Press space", "Error", MB_ICONERROR);
}
}
}

return CallNextHookEx(_hook, nCode, wParam, lParam);
}

void SetHook()
{

if (!(_hook = SetWindowsHookEx(WH_KEYBOARD_LL, HookCallback, NULL, 0)))
{
MessageBox(NULL, "Failed to install hook!", "Error", MB_ICONERROR);
}
}

void ReleaseHook()
{
UnhookWindowsHookEx(_hook);
}

int main()
{
SetHook();
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{

}

}
Похожие вопросы