示例#1
0
 /// <summary>
 /// Synthesizes mouse motion and button clicks. Function of same name was superseded by SendInput.
 /// Use as described by: http://msdn.microsoft.com/en-us/library/ms646260%28v=vs.85%29.aspx
 /// </summary>
 public static void MouseEvent(int dwFlags, int dx, int dy, int dwData)
 {
     SendInputClass.INPUT input = new SendInputClass.INPUT();
     input.mi.dwFlags = dwFlags;
     input.mi.dx      = dx;
     input.mi.dy      = dy;
     input.mi.dwData  = dwData;
     SendInputClass.INPUT[] inputArr = { input };
     SendInputClass.SendInput(1, inputArr, Marshal.SizeOf(input));
 }
 /// <summary>
 /// Calibrated inertial/magnetic data received event to update objects.
 /// </summary>
 static void xIMUserial_CalInertialMagneticDataReceived(object sender, x_IMU_API.CalInertialAndMagneticData e)
 {
     ballTracking.Gyroscope = new float[] { (e.Gyroscope[0] / 360) * (float)(2 * Math.PI), (e.Gyroscope[1] / 360) * (float)(2 * Math.PI), (e.Gyroscope[2] / 360) * (float)(2 * Math.PI) };
     ballTracking.Update();
     if (form_3Dcuboid != null)
     {
         form_3Dcuboid.TranslationVector = new float[] { ballTracking.Position[0], ballTracking.Position[1], 0.0f };
         form_3Dcuboid.RotationMatrix    = ballTracking.RotationMatrix;
     }
     else
     {
         SendInputClass.MouseEvent((int)(SendInputClass.MOUSEEVENTF.MOVE), (int)(ballTracking.Velocity[0] * 25.0), (int)(ballTracking.Velocity[1] * -25.0f), 0);
         if (Math.Sqrt(e.Accelerometer[0] * e.Accelerometer[0] + e.Accelerometer[1] * e.Accelerometer[1] + e.Accelerometer[2] * e.Accelerometer[2]) > 5.0)       // if accelerometer magnitude > 5 g
         {
             SendInputClass.MouseEvent((int)SendInputClass.MOUSEEVENTF.LEFTDOWN, 0, 0, 0);
             SendInputClass.MouseEvent((int)SendInputClass.MOUSEEVENTF.LEFTUP, 0, 0, 0);
         }
     }
 }