使用Xbox 360控制器进行鼠标仿真

时间:2011-11-01 07:56:40

标签: c++ winapi emulation device-emulation xinput

我正在编写一个小程序,用我的Xbox 360控制器模拟鼠标。我已经成功实现了光标的移动,但是点击有困难。

以下是我的代码片段:

while (msg.message != WM_QUIT) {
    if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    } else {

        ...           

        if (state.Gamepad.wButtons & XINPUT_GAMEPAD_A) {
            PostMessage(HWND_BROADCAST, WM_LBUTTONDOWN, 0, MAKEWORD(new_x, new_y));
        }

        ...       
    }
}

我不是100%确定这是正确的方法,但是当按下 A 按钮时,我正尝试将WM_LBUTTONDOWN消息发送到所有顶级窗口。但是,当我将鼠标放在一个按钮上并按下 A 时,该按钮会闪烁,就像点击它一样,但没有任何反应。

如果有人能指出我正确的方向或提供另一种方法来做到这一点,我将非常感激!

1 个答案:

答案 0 :(得分:2)

我认为,您宁愿使用mouse_event API甚至是SendInput,而不是PostMessage。它允许您在更抽象的级别上合成鼠标事件。