2011-01-07 29 views
2

私はSendInputを使用してマウス入力をシミュレートしています。これまでのところ、左、右、中央のクリックを正常にシミュレートできます。しかし、xButtonを適切にシミュレートすることはできません。私は次のように入力構造を定義しています:SendInputを使用したXButton入力のシミュレーション

Win32.INPUT i = new Win32.INPUT(); 
      i.type = Win32.INPUTF.MOUSE; 
      i.mi.dx = 0; 
      i.mi.dy = 0; 
      i.mi.mouseData = 0; 
      i.mi.time = 0; 
      i.mi.dwExtraInfo = UIntPtr.Zero; 
      i.mi.dwFlags = MouseButton(e.Button, true); 
      Win32.SendInput(1, ref i, System.Runtime.InteropServices.Marshal.SizeOf(new Win32.INPUT())); 

MouseButtonは次のように定義されています。

private Win32.MOUSEEVENTF MouseButton(MouseButtons mb, bool up) 
    { 
     switch (mb) 
     { 
      case MouseButtons.Left: 
       return up ? Win32.MOUSEEVENTF.LEFTUP : Win32.MOUSEEVENTF.LEFTDOWN; 
      case MouseButtons.Right: 
       return up ? Win32.MOUSEEVENTF.RIGHTUP : Win32.MOUSEEVENTF.RIGHTDOWN; 
      case MouseButtons.Middle: 
       return up ? Win32.MOUSEEVENTF.MIDDLEUP : Win32.MOUSEEVENTF.MIDDLEDOWN; 
      case MouseButtons.XButton1: 
       return up ? Win32.MOUSEEVENTF.XBUTTON1|Win32.MOUSEEVENTF.XUP : Win32.MOUSEEVENTF.XBUTTON1 | Win32.MOUSEEVENTF.XDOWN; 
      case MouseButtons.XButton2: 
       return up ? Win32.MOUSEEVENTF.XBUTTON2 | Win32.MOUSEEVENTF.XUP : Win32.MOUSEEVENTF.XBUTTON2 | Win32.MOUSEEVENTF.XDOWN; 
      default: 
       return 0u; 
     } 
    } 
+0

はあなたのWin32クラスを構築するには、このリンクを使用しました:

だから私は、次の操作を行いますxボタン入力をシミュレートするには? http://www.pinvoke.net/default.aspx/user32/SendInput.html – digEmAll

+0

私は使用しているWin32クラスをビルドしませんでしたが、私が使用しているものはpinvoke.net/defaultにあるものと同じではありません.aspx/user32/SendInput.htmlと同じ動作をしますが、 – Alex

答えて

4

間違った場所で押されたボタンを指定しようとしていました。 i.mi.dwFlagsは、Win32.MOUSEEVENTF.XDOWNまたはWin32.MOUSEEVENTF.XUPのいずれかを指定する必要があります。押されたボタンは、i.mi.mouseDataを使用して設定する必要があります。

Win32.INPUT i = new Win32.INPUT(); 
      i.type = Win32.INPUTF.MOUSE; 
      i.mi.dx = 0; 
      i.mi.dy = 0; 
      switch (e.Button) 
      { 
       case System.Windows.Forms.MouseButtons.XButton1: 
        i.mi.mouseData = (uint)Win32.MOUSEEVENTF.XBUTTON1; 
        break; 
       case System.Windows.Forms.MouseButtons.XButton2: 
        i.mi.mouseData = (uint)Win32.MOUSEEVENTF.XBUTTON2; 
        break; 
       default: 
        i.mi.mouseData = 0; 
        break; 
      } 

      i.mi.time = 0; 
      i.mi.dwExtraInfo = UIntPtr.Zero; 
      i.mi.dwFlags = Win32.MOUSEEVENTF.XUP; 
      Win32.SendInput(1, ref i, System.Runtime.InteropServices.Marshal.SizeOf(new Win32.INPUT())); 
+1

Alex、あなたの質問/回答を投稿してくれてありがとう!これは本当に今私を助けている。ソリューションを見つけたら、もっと多くの人が自分の質問に答えてくれることを願います。 – Lunivore

関連する問題