Поскольку Windows не требует мыши, прикладная программа должна получить возможность, чтобы моделировать действия мыши с клавиатуры. Следующий пример показывает, как достичь этого, используя функции GetCursorPos и SetCursorPos и обрабатывать ввод информации от клавиш курсора.
HCURSOR hCurs1, hCurs2; // дескриптор курсора POINT pt; // расположение курсора RECT rc; // координаты рабочей области static int repeat = 1; // счетчик повтора нажатий клавиши // // Другие объявления и инициализация. // switch (message) { // // Обработка других сообщений. // case WM_KEYDOWN: if (wParam != VK_LEFT && wParam != VK_RIGHT && wParam != VK_UP && wParam != VK_DOWN) { break; } GetCursorPos(&pt); // Преобразование экранных координат в рабочие координаты. ScreenToClient(hwnd, &pt); switch (wParam) { // Отображение перемещения курсора, когда // нажата клавиша курсора. case VK_LEFT: // стрелка влево pt.x -= repeat; break; case VK_RIGHT: // стрелка вправо pt.x += repeat; break; case VK_UP: // стрелка вверх pt.y -= repeat; break; case VK_DOWN: // стрелка вниз pt.y += repeat; break; default: return NULL; } repeat++; // счетчик увеличения числа повторов на единицу // Сохранение курсора в рабочей области. GetClientRect(hwnd, &rc); if (pt.x >= rc.right) { pt.x = rc.right - 1; } else { if (pt.x < rc.left) { pt.x = rc.left; } } if (pt.y >= rc.bottom) pt.y = rc.bottom - 1; else if (pt.y < rc.top) pt.y = rc.top; // Преобразование рабочих координат в экранные координаты. ClientToScreen(hwnd, &pt); SetCursorPos(pt.x, pt.y); break; case WM_KEYUP: repeat = 1; // очистка счетчика повторений break; }