使用SendInput在游戏中模拟360鼠标移动

时间:2018-05-23 14:57:34

标签: c++ winapi keyboard mouse-cursor

好的,我现在有了这个代码,只要按住键盘上的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));
}

现在,我希望它只需按 1键即可在游戏中进行完整的循环旋转( 360基本)。 而且它正在进行旋转,我想要执行另一次按键4次。

我无法找到一个很好的方法来做这件事。也许使用计时器会是一个好主意?

赞,Start timer on key-press -> execute other key-press -> End timer and release key

但我怎么会这样呢?

1 个答案:

答案 0 :(得分:-2)

我设法做了我想做的事情(可能不是最好的方式,但是我做了我想做的事情......)

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);
}

如果您有任何改进建议,请说。