2016-07-29 9 views
0

私は2台のマシンがあります:AでAとBC#シミュレート、マウスの動きは、フォアグラウンドアプリケーションには影響を与えません

を、私は(& yのx)は、現在の(ローカル)マウス位置を取得し、私の地元の上に、マウスの位置を送信する送信ネットワークBをマシン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に行きます。

関連する問題