2016-07-29 89 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