Поскольку система не требует мыши, приложение должно быть в состоянии, имитировать действия мыши с клавиатуры. Пример ниже показывает, как достигнуть этого, используя функции 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; } |