C/C++
Как определить какая клавиша нажата в данный момент в c++??
В какой операционной системе и в каком компиляторе? Работа с клавиатурой не является частью стандарта C++ и в разных ОС / компиляторах реализуется по-разному (и не напрямую, а через механизмы операционной системы).
Виктор Леонидович
windows 7 и dev cpp
В свое время интересовали сканкоды нажатых клавиш. Запилил тогда приложение которое выводило на экран данные. Осталось только понять как приложение функционирует и поймете как узнать какая клавиша была нажата. На деле можно еще отслеживать была ли отпущена клавиша и на основании этого делать выводы зажата клавиша или нет.
Подскажу что основные действия происходят в switch (message), а конкретнее в case WM_KEYDOWN:. Все что до этого это шаблонное создание и вывод окна и как таковое не интересно.
Подскажу что основные действия происходят в 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;
}
Денис Игнатьев
Вот либы которые подключены

Через хук можно, так отлавливает пробел. Отловить можно любую клавишу.
#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))
{
}
}
Посмотри какой батон нажал
а че ты хочешь сделать кейлоггер что ли написать.
Мне кажется geth(); и тд в инете то что есть достаточно.
Мне кажется geth(); и тд в инете то что есть достаточно.
Похожие вопросы
- Программа по C++. Определить координаты радиусы и центра сферы.
- Помогите написать литсинг на C++ Дана целочисленная квадратная матрица. Определить: ↓↓↓
- Какие из этих книг вы посоветуете прочесть в первую очередь чтобы повысить свои знания в C/C++?
- День добрый \[-_-]/ вопрос по вузовскому программированию на си(C)
- Задача по C++
- Программирование C++ ПРОШУ ПОМОЧЬ!
- Почему создатель Linux Линус Торвальдс называет C++ ужасным языком, а ядро ОС Linux пишется только на Си?
- Сделать перестановку чисел с помощью функции в C++, но у меня получается чепуха
- Задача на C++ (Остатки).
- Задача по c++ на векторы. Часть программы написана. Нужны правки.