Смоделируйте движение мыши на 360 внутри игры, используя SendInput - PullRequest
0 голосов
/ 23 мая 2018

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

Код:

if (GetAsyncKeyState(0x5A))
{
    cMouseInput mInput;
    mInput.MouseMove(1, 0);  // Right
    //mInput.MouseMove(-1, 0); // Left
}

Функция:

void cMouseInput::MouseMove(int X, int Y)
{
    double fScreenWidth = GetSystemMetrics(SM_CXSCREEN) - 1;
    double fScreenHeight = GetSystemMetrics(SM_CYSCREEN) - 1;
    double fX = X * (65535.0f / fScreenWidth);
    double fY = Y * (65535.0f / fScreenHeight);

    INPUT mInput = { 0 };
    mInput.type = INPUT_MOUSE;
    mInput.mi.dwFlags = MOUSEEVENTF_MOVE;
    mInput.mi.dx = fX;
    mInput.mi.dy = fY;

    SendInput(1, &mInput, sizeof(INPUT));
}

Теперь я хочу, чтобы она делала полный оборот по кругу ( a 360 в основном ) внутриигра только с 1 нажатием клавиши .А также пока выполняет это вращение, я хочу выполнить еще одно нажатие клавиши 4 раза.

Я не могу найти хороший способ сделать это ... возможно, используя таймербыло бы хорошей идеей?

Например, Start timer on key-press -> execute other key-press -> End timer and release key

Но как мне поступить?

1 Ответ

0 голосов
/ 23 мая 2018

Мне удалось сделать то, что я хотел (что может быть не самым лучшим способом, но он делает то, что я намеревался сделать ..)

if (GetAsyncKeyState(i1x1Value) & 1)
{
    cMouseInput mInput;

    int iCount = 0;
    HANDLE hTimer = CreateEvent(NULL, FALSE, FALSE, NULL);
    while (iCount < 4)
    {
        WaitForSingleObject(hTimer, i1x1Sleep); // Wait for x amount
        mInput.MouseMove(50, 0); // Right

        iCount++; // Repeat 4 times
    }
    CloseHandle(hTimer);
}

Если у вас есть какие-либо предложения по улучшению этогоПожалуйста, скажите.

...