Здравствуйте, виталий!
Вот Вам пример на отработку одновременного нажатия на стрелки влево и вправо
[code h=200]#include <windows.h>
#include <stdio.h>
#define ST_LEFT 0x0001 //нажата LEFT
#define ST_RIGHT 0x0002 //RIGHT
void MyErrorExit(char * pErr)
{
printf("Error: %s\n", pErr);
getch();
exit(1);
}
DWORD main(VOID)
{
HANDLE hStdin;
DWORD cNumRead, fdwSaveOldMode, i;
INPUT_RECORD irInBuf[128];
DWORD status = 0; //флаги состояния нажатий клавиш
// Получим стандартный дескриптор ввода.
hStdin = GetStdHandle(STD_INPUT_HANDLE);
if (hStdin == INVALID_HANDLE_VALUE)
MyErrorExit("GetStdHandle");
// Сохраним текущий режим ввода для будущего восстановления при
// выходе из программы.
if (! GetConsoleMode(hStdin, &fdwSaveOldMode) )
MyErrorExit("GetConsoleMode");
// Включим события ввода от мыши.
if (! SetConsoleMode(hStdin, ENABLE_MOUSE_INPUT) )
MyErrorExit("SetConsoleMode");
// Цикл чтения и обработки событий ввода.
while (1)
{
// Ожидание событий.
if (! ReadConsoleInput(
hStdin, // дескриптор буфера ввода
irInBuf, // буфер, в котором читаем
128, // размер буфера чтения
&cNumRead) ) // число прочитанных записей
MyErrorExit("ReadConsoleInput");
// Направляем события обработчику событий от клавиатуры.
for (i = 0; i < cNumRead; i++)
{
switch(irInBuf[i].EventType)
{
case KEY_EVENT: //ввод ок клавиатуры
switch (irInBuf[i].Event.KeyEvent.wVirtualKeyCode)
{
case VK_ESCAPE: //выйдем по ESC
SetConsoleMode(hStdin, fdwSaveOldMode);
exit(0);
case VK_LEFT:
if (irInBuf[i].Event.KeyEvent.bKeyDown)
{
status |= ST_LEFT; //фиксируем факт нажатия на Left
if (status & ST_RIGHT) //проверяем факт нажатия на Right
printf("Left and Right arrows pressed...\n");
else
printf("Left arrow pressed...\n");
}
else
status &= ~ST_LEFT; //клавиша отпущена!
break;
case VK_RIGHT: //аналогично
if (irInBuf[i].Event.KeyEvent.bKeyDown)
{
status |= ST_RIGHT;
if (status & ST_LEFT)
printf("Left and Right arrows pressed...\n");
else
printf("Right arrow pressed...\n");
}
else
status &= ~ST_RIGHT;
break;
}
//остальные игнорируем
}
}
}
return 0;
}
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен