C#模拟鼠标移动不会影响前台应用程序

时间:2016-07-29 19:55:07

标签: c# mouseevent user32

我有两台机器:A和B

在A上,我得到当前(本地)鼠标位置(x& y)并将该鼠标位置发送到本地网络到机器B. 机器B获取传入位置X和Y,并使用找到的here示例模拟鼠标移动。一切正常,花花公子 - 我可以看到鼠标移动,但由于某种原因,它不会影响机器B前景中的窗口。

这是什么“窗口”?这是一个Unity3D应用程序 - 一款游戏。我希望鼠标移动会导致游戏中的相机移动。有趣的是,如果我按照描述进行操作然后停止在机器A上移动鼠标...然后通过机器B上的触摸板(或常规鼠标)移动鼠标,它会按预期移动游戏中的相机!

发生了什么事?

1 个答案:

答案 0 :(得分:0)

无论出于何种原因,似乎代码都取自here

[DllImport("user32.dll")]
static extern bool SetCursorPos(int X, int Y);

无法正常工作!正如预期的那样,我的鼠标会在远程计算机上移动,但是我带到前台的应用程序没有检测到鼠标移动。

但是,我确实设法使用mouse_event

来实现这一点
[Flags]
public enum MouseEventFlags
{
    LeftDown = 0x00000002,
    LeftUp = 0x00000004,
    MiddleDown = 0x00000020,
    MiddleUp = 0x00000040,
    Move = 0x00000001,
    Absolute = 0x00008000,
    RightDown = 0x00000008,
    RightUp = 0x00000010
}

[DllImport("user32.dll")]
private static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);

public static void MouseEvent(MouseEventFlags value, Point position)
{
    MousePoint position = position;

    mouse_event
        ((int)value,
         position.X,
         position.Y,
         0,
         0)
        ;
}

[StructLayout(LayoutKind.Sequential)]
public struct MousePoint
{
    public int X;
    public int Y;

    public MousePoint(int x, int y)
    {
        X = x;
        Y = y;
    }

}

要使用它,只需致电:

mouse_event(MouseEventFlags.Move,new MousePoint{X = YOUR_X, Y = YOUR_Y});

所有功劳归于此SO answer