Как переместить курсор относительно текущего положения?

Рейтинг: 0Ответов: 1Опубликовано: 06.02.2023

Изучал я вот этот материал: https://learn.microsoft.com/ru-ru/windows/win32/menurc/cursor-functions Однако кроме команд SetCursorPos и SetPhysicalCursorPos у меня ничего не работает. Я могу переместить курсор на абсолютные координаты. Но мне нужно переместить на относительные координаты (относительно курсора). Если вы попробуете считать текущее положение курсора и к переменной добавить +1 например - это будут абсолютные координаты.

for (int i = 500; i < 1500; i++)
    {
        Sleep(20);
        SetCursorPos(i, 200);
    } 

Если вы попробуете переместить курсор влево - у вас ничего не получится, он продолжит двигаться вправо (это абсолютное перемещение). А вот если бы перемещение было относительным вы бы смогли дёрнуть мышку влево и тогда курсор начал бы перемещаться от 0 до ~1000 координаты (ось Y тоже изменила бы значение)! Вот мой пример, почему очень важно относительное перемещение: https://www.youtube.com/watch?v=fcWaSM8Sl4c Другой вариант, где видно курсор: https://www.youtube.com/watch?v=PJ9L2y-D9vM Даже если вы покажите, как считать текущее положение курсора - буду крайне признателен. C++ Visual Studio 2022.

Ответы

▲ 0

Вынес это в отдельную функцию:

int MOVER(int X, int Y)
{
    INPUT Inputs;
    Inputs.type = INPUT_MOUSE;
    Inputs.mi.dx = X;
    Inputs.mi.dy = Y;
    Inputs.mi.dwFlags = MOUSEEVENTF_MOVE;
    SendInput(1, &Inputs, sizeof(INPUT));
    ZeroMemory(&Inputs, sizeof(INPUT));
    return 0;
}

Например: если нужно переместить мышку с X1: 100 и Y1: 50 на X2: 50 и Y2: 50, тогда необходимо передать функции значение X: -50 и Y: 0 Это работает в 3D играх!

Примечание: чтобы функция перемещала на точное значение как у меня на -50, а не на -56 и т.д. нужно отключить в параметрах windows ускорение мыши.