Перемещение мышью SendInput не работает в полноэкранном режиме, но MOUSEEVENTF_LEFTUP / MOUSEEVENTF_LEFTDOWN работают безупречно - PullRequest
0 голосов
/ 09 октября 2018

Я пишу программу на C ++ для перемещения мыши и выполнения действий с нажатой левой кнопкой вверх / вверх в игре.События левой кнопки мыши (вверх и вниз) прекрасно работают в полноэкранном режиме, но я не могу заставить мышь двигаться в полноэкранном режиме или, другими словами, не могу заставить мышь указывать на определенный объект в игре.Как только я приостанавливаю игру или выхожу из полноэкранного режима, я вижу, как движется указатель мыши, но когда я возобновляю игру, я не вижу, как она движется, но когда я физически перемещаю мышь (в полноэкранном режиме игры), я вижу, что курсор движется вокругНиже приведена программа.Обратите внимание, что я также попробовал относительные координаты (используя GetSystemMetrics) (второй фрагмент кода).Я не могу добиться прогресса на этом фронте и обратиться к сообществу за помощью

void mouse_input(int xx, int yy, int shoot_times)
    {
        INPUT Inputs[3] = { 0 };

        Inputs[0].type = INPUT_MOUSE;
        Inputs[0].mi.dx = xx; // desired X coordinate
        Inputs[0].mi.dy = yy; // desired Y coordinate
        Inputs[0].mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_VIRTUALDESK | MOUSEEVENTF_ABSOLUTE;

        Inputs[1].type = INPUT_MOUSE;
        Inputs[1].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;

        Inputs[2].type = INPUT_MOUSE;
        Inputs[2].mi.dwFlags = MOUSEEVENTF_LEFTUP;

        for (int i = 0; i < shoot_times; ++i)
        {
            std::cout << "Sending Mouse Inputs\n";
            SendInput(3, Inputs, sizeof(INPUT));
        }
    }
}


double fScreenWidth = ::GetSystemMetrics(SM_CXSCREEN) - 1;
double fScreenHeight = ::GetSystemMetrics(SM_CYSCREEN) - 1;
std::cout << "fScreenWidth(" << fScreenWidth << ")\n";
std::cout << "fScreenHeight(" << fScreenHeight << ")\n";
double fx = (i.x + (i.w/2))*(65535.0f / fScreenWidth);
double fy = (i.y + (i.y/2))*(65535.0f / fScreenHeight);
...