Здравствуйте, виталий!
Вот Вам пример на чистом WinAPI
[code h=200]#include <windows.h>
#include <stdio.h>
#include <conio.h>
VOID MouseEventProc(MOUSE_EVENT_RECORD &mer)
{
printf("MousePosition: x = %d, y= %d\n", mer.dwMousePosition.X, mer.dwMousePosition.Y);
if (mer.dwButtonState)
{
printf("ButtonState:");
if (mer.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED)
printf(" FROM_LEFT_1ST_BUTTON_PRESSED");
if (mer.dwButtonState & RIGHTMOST_BUTTON_PRESSED)
printf(" RIGHTMOST_BUTTON_PRESSED");
if (mer.dwButtonState & FROM_LEFT_2ND_BUTTON_PRESSED)
printf(" FROM_LEFT_2ND_BUTTON_PRESSED");
if (mer.dwButtonState & FROM_LEFT_3RD_BUTTON_PRESSED)
printf(" FROM_LEFT_3RD_BUTTON_PRESSED");
if (mer.dwButtonState & FROM_LEFT_4TH_BUTTON_PRESSED)
printf(" FROM_LEFT_4TH_BUTTON_PRESSED");
printf("\n");
}
if (mer.dwControlKeyState)
{
printf("ControlKeyState:");
if (mer.dwControlKeyState & RIGHT_ALT_PRESSED)
printf(" RIGHT_ALT_PRESSED");
if (mer.dwControlKeyState & LEFT_ALT_PRESSED)
printf(" LEFT_ALT_PRESSED");
if (mer.dwControlKeyState & RIGHT_CTRL_PRESSED)
printf(" RIGHT_CTRL_PRESSED");
if (mer.dwControlKeyState & LEFT_CTRL_PRESSED)
printf(" LEFT_CTRL_PRESSED");
if (mer.dwControlKeyState & SHIFT_PRESSED)
printf(" SHIFT_PRESSED");
if (mer.dwControlKeyState & NUMLOCK_ON)
printf(" NUMLOCK_ON");
if (mer.dwControlKeyState & SCROLLLOCK_ON)
printf(" SCROLLLOCK_ON");
if (mer.dwControlKeyState & CAPSLOCK_ON)
printf(" CAPSLOCK_ON");
if (mer.dwControlKeyState & ENHANCED_KEY)
printf(" ENHANCED_KEY");
printf("\n");
}
if (mer.dwEventFlags)
{
printf("EventFlags:");
if (mer.dwEventFlags & MOUSE_MOVED)
printf(" MOUSE_MOVED");
if (mer.dwEventFlags & DOUBLE_CLICK)
printf(" DOUBLE_CLICK");
if (mer.dwEventFlags & MOUSE_WHEELED)
printf(" MOUSE_WHEELED");
printf("\n");
}
}
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];
// Получим стандартный дескриптор ввода.
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 MOUSE_EVENT: // ввод от мыши
MouseEventProc(irInBuf[i].Event.MouseEvent);
break;
case KEY_EVENT: //ввод ок клавиатуры
if (irInBuf[i].Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE)
{ //выйдем по ESC
SetConsoleMode(hStdin, fdwSaveOldMode);
exit(0);
}
//остальные игнорируем
}
}
}
return 0;
}[/code]