2016-07-29 26 views
0

Ich habe zwei Maschinen: A und BC# Simulieren Mausbewegung wirkt sich nicht auf Vordergrundanwendung

On A, erhalte ich die aktuelle (lokale) Mausposition (x & y) und sende diese Mausposition über meine lokalen schicken Netzwerk zu Maschine B. Maschine B übernimmt die eintreffende Position X und Y und simuliert die Mausbewegung anhand des gefundenen Beispiels here. Es funktioniert alles gut und dandy - Ich kann die Maus bewegen sehen, aber aus irgendeinem Grund hat es keinen Einfluss auf das Fenster im Vordergrund auf der Maschine B.

Was ist das "Window"? Es ist eine Unity3D-Anwendung - ein Spiel. Ich erwarte, dass die Mausbewegung die Kamera im Spiel bewegen würde. Interessanterweise, wenn ich wie beschrieben vorgehe und dann die Maus auf Maschine A bewege ... und dann die Maus über das Touchpad (oder die normale Maus) auf Maschine B bewege, bewegt sich die In-Game-Kamera wie erwartet!

Was ist los?

+0

Ich denke, Sie müssen CBT Haken auf Maschine "B" verwenden, um zu bekommen, was Sie wollen. Siehe [hier] (http://stackoverflow.com/questions/4267881/cbt-hooks-in-windows-what-does-cbt-stand-for) – GreatAndPowerfulOz

Antwort

0

Es scheint, dass aus irgendeinem Grund, der Code von here

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

arbeiten ... nicht richtig gemacht! Meine Maus bewegte sich wie erwartet auf dem Remotecomputer, aber die Anwendung, die ich in den Vordergrund brachte, erkannte die Mausbewegungen nicht.

Aber ich habe es geschafft, auf diese mouse_event mit zu arbeiten:

[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; 
    } 

} 

es zu nutzen, rufen Sie einfach an:

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

Alle Kredit geht an diesem SO answer.