2016-07-29 87 views
0

我有两台机器:A和BC#模拟鼠标的移动,不影响前台应用程序

上,我得到的电流(本地)鼠标位置(x & y)和发送发送鼠标的位置在我的地方网络到机器B. 机器B采用传入位置X和Y并使用发现的示例here模拟鼠标移动。这一切都正常工作 - 我可以看到鼠标移动,但由于某种原因,它不影响机器B前台的窗口。

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

这是怎么回事?

+0

我认为你需要看看在机器“B”上使用CBT挂钩来得到你想要的。见[这里](http://stackoverflow.com/questions/4267881/cbt-hooks-in-windows-what-does-cbt-stand-for) – GreatAndPowerfulOz

回答

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