wm keydown



Автор User51942 задал вопрос в разделе Другие языки и технологии

C++. Как перехватывать нажатия клавиш и обрабатывать их? и получил лучший ответ

Ответ от Андрей Журавлев[гуру]
bool keys[256];
<...>
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
<...>
case WM_KEYDOWN:
{
keys[wParam] = true;
return 0;
}
case WM_KEYUP:
{
keys[wParam] = false;
return 0;
}
<...>
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
<...>
ну а как в массиве узнать нажата или нет клавиша я думаю разберетесь...
хотя можно и без массива... сразу вызывать функцию в которую передадите информацию о нажатой клавише... ну или еще один кейс запилите и вызывайте сразу нужную функцию... в общем извращайтесь как хотите...

Ответ от Андрей Власов[гуру]
Можно перехватить прерывание 09h

Ответ от Krab Bark[гуру]
Нужно анализировать скэн-коды клавиш. Пример: будет печатать названия нажатых клавиш со стрелками, при нажатии других клавиш выполнение заканчивается:
#include "iostream"
#include "conio.h"
using namespace std;
int main(){
const int U=72,L=75,D=80,R=77,E=224;
while(true){
if(getch()==E){
switch(getch()){
case U: cout<<"UP"; break;
case D: cout<<"DOWN"; break;
case L: cout<<"LEFT"; break;
case R: cout<<"RIGHT"; break;}}
else return 0;
cout<< endl;}}

Ответ от Alex Nikulin[новичек]
В языке программирования D можно юзать функцию WinAPI GetAsyncKeyState. Она асинхронная, то есть после ее вызова код продолжает выполняться, даже, если не нажата никакая клавиша.
Правда, эта функция работает при нажатии клавиши не только в вашем окне, но и в других окнах! Так что нужно проверять, активно ли окно вашей программы, с помощью функции GetForegroundWindow.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: C++. Как перехватывать нажатия клавиш и обрабатывать их?
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*