INPUT_MOUSE: мышь не двигается с заданными значениями dx / dy - PullRequest
0 голосов
/ 30 марта 2012

Я перемещаю мышь, используя INPUT, чтобы установить позицию курсора. Это нормально, за исключением того, что я не могу использовать экранные значения для перемещения курсора. Если я хочу установить курсор от 0 до 1680, я должен использовать 1680 * 0.66 в качестве значения dx , чтобы получить правильную позицию (внутри игры или на рабочем столе).

(я использую перемещение мыши, так как я устанавливаю положение курсора в игре, и абсолютное позиционирование там не работает. У меня два экрана, один имеет ширину 1680, другой - 1280)

Есть идеи, почему я должен использовать этот фактор или откуда он взялся? Спасибо.

#define MOUSE_MOVE_FACTOR 0.6619

        //Set mouse pos:
        void setMousePos(int iX, int iY){


            iX = (int)((double)iX*MOUSE_MOVE_FACTOR);
            iY = (int)((double)iY*MOUSE_MOVE_FACTOR);


            INPUT *buffer = new INPUT[1];

            buffer->type = INPUT_MOUSE;
            buffer->mi.dx = iX;
            buffer->mi.dy = iY;
            buffer->mi.mouseData = 0;
            buffer->mi.dwFlags = MOUSEEVENTF_MOVE;
            buffer->mi.time = 0;
            buffer->mi.dwExtraInfo = 0;

            SendInput(1,buffer,sizeof(INPUT));

            Sleep(100 + (rand() % 50));

        }

Ответы [ 3 ]

1 голос
/ 04 апреля 2012

Вероятно, что-то связано с ускорением мыши.Отключение приводит к различным позициям мыши.

0 голосов
/ 30 марта 2012

Согласно документации на MOUSEINPUT , dx / dy являются относительными координатами, если MOUSEEVENTF_ABSOLUTE не установлен в dwFlags.Попробуйте:

 buffer->mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;

и посмотрите, работает ли это.Обратите внимание, что вам придется преобразовать X / Y в нормализованные абсолютные координаты из 0-65535, как указано в документации.

Я бы также спросил, почему вы сначала устанавливаете позицию (-3000, -3000).Я также думаю, что вам не нужен магический фактор MOUSE_MOVE_FACTOR, который, вероятно, связан со смешением относительных / абсолютных координат мыши.

Редактировать: перечитать ваш вопрос, и я пропустил, что вы можете использовать относительную мышьпозиция нарочно.Я полагаю, что ваше абсолютное позиционирование могло быть неудачным из-за отсутствия нормализованной абсолютной координаты (я бы сам не догадался, не прочитав всю документацию).Также обратите внимание, что 1680x0,66 = 1109, что подозрительно близко к 1024, и я могу предположить, что игра работает с 1024x?разрешение.

0 голосов
/ 30 марта 2012

Утечки памяти могут вызвать странные вещи в вашем приложении, и это может оказать влияние.

Вы вызываете утечку памяти каждый раз, когда эта функция вызывается при вашем втором выделении buffer в

buffer = new INPUT[1];

...