SendInput鼠标移动无法在全屏模式下运行,但是MOUSEEVENTF_LEFTUP / MOUSEEVENTF_LEFTDOWN可以正常工作

时间:2018-10-09 14:41:03

标签: c++ winapi sendinput

我正在编写一个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);

0 个答案:

没有答案