J'essaie de déplacer la souris par programme entre deux coordonnées. Mais je veux maintenir la vitesse de manière fiable sur toutes les machines de traitement rapides ou lents. J'ai vu this link here. Mais il ne me garantit pas la vitesse optimale, lisse et visible du curseur lors de la simulation du mouvement entre deux coordonnées. Je me demande si quelqu'un connaît une astuce pour déterminer les paramètres comme le délai et les étapes de valeur optimale pour diverses machines Comme ma première idée était l'utilisation de boucle pour iteraton spécifique pour déterminer la performance de la machine puis évaluer les paramètres en fonction du temps -loop a pris ... une idée? ou suis-je totalement faux à ce sujet? Mercisimule déplacer le curseur de la souris dans C# entre deux coordonnées
Répondre
Vous devez faire du mouvement une fonction du temps. A partir de la réponse à C# moving the mouse around realistically, et en utilisant la classe Chronomètre pour mesurer le temps écoulé:
public void LinearSmoothMove(Point newPosition, TimeSpan duration)
{
Point start = GetCursorPosition();
// Find the vector between start and newPosition
double deltaX = newPosition.X - start.X;
double deltaY = newPosition.Y - start.Y;
// start a timer
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
double timeFraction = 0.0;
do
{
timeFraction = (double)stopwatch.Elapsed.Ticks/duration.Ticks;
if (timeFraction > 1.0)
timeFraction = 1.0;
PointF curPoint = new PointF(start.X + timeFraction * deltaX,
start.Y + timeFraction * deltaY);
SetCursorPosition(Point.Round(curPoint));
Thread.Sleep(20);
} while (timeFraction < 1.0);
}
Je recommande une physique. La vitesse est la distance divisée par le temps. Si vous voulez une vitesse constante de la souris sur chaque machine, vous devez avoir une heure précise.
Faisons un exemple:
Vous voulez déplacer la souris du point à 400/600 et 0/0 le point final doit toujours être atteint au bout de 3 secondes. Par conséquent, vous devez enregistrer l'heure de début et construire une boucle while qui se terminera au début + 3s. Dans la boucle, vous calculez les coordonnées X et Y à partir du temps écoulé et du temps total.
X = 400/3s * ElapsedTime
Y = 600/3s * ElapsedTime
Ceci sera indépendant de la machine. Pour un bon résultat, vous devriez utiliser un temps très précis comme Stopwatch.
J'ai essayé celui-ci mais toujours pas optimal. Il varie encore avec la puissance de traitement de la machine. @ Justin, utilise une valeur différente pour la durée et le temps de sommeil. Faites-moi savoir si vous venez avec une meilleure solution après l'avoir testé. Merci!
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;
namespace ConsoleApplication11
{
class Program
{
[DllImport("user32.dll")]
static extern bool SetCursorPos(int X, int Y);
public static void LinearSmoothMove(Point newPosition, TimeSpan duration)
{
Point start = Cursor.Position;
int sleep = 10;
//PointF iterPoint = start;
// Find the vector between start and newPosition
double deltaX = newPosition.X - start.X;
double deltaY = newPosition.Y - start.Y;
// start a timer
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
double timeFraction = 0.0;
do
{
timeFraction = (double)stopwatch.Elapsed.Ticks/duration.Ticks;
if (timeFraction > 1.0)
timeFraction = 1.0;
PointF curPoint = new PointF((float)(start.X + timeFraction * deltaX), (float)(start.Y + timeFraction * deltaY));
SetCursorPos(Point.Round(curPoint).X, Point.Round(curPoint).Y);
Thread.Sleep(sleep);
} while (timeFraction < 1.0);
}
static void Main(string[] args)
{
TimeSpan delayt = new TimeSpan(0, 0, 3);
LinearSmoothMove(new Point(20, 40), delayt);
Console.Read();
}
}
}
- 1. simule déplacer la souris en PHP?
- 2. Déplacer le curseur de la souris Javascript
- 3. Comment déplacer le curseur de la souris en utilisant C#?
- 4. Déplacer la souris en C# (unités de coordonnées)
- 5. Coordonnées de la souris en Objective-C?
- 6. déplacer le curseur de la souris hors de l'écran en C#
- 7. Effectuer un clic de souris sans déplacer le curseur
- 8. Obtenez les coordonnées de deux souris séparément en C++
- 9. Déplacer le curseur de la zone de texte vers le curseur
- 10. comment extraire le texte vers la console à des coordonnées spécifiques sans déplacer les coordonnées du curseur en C++
- 11. C# - Déplacer un contrôle à la position de la souris
- 12. Arrêter ou déplacer la souris
- 13. Trouver les coordonnées de la position du curseur de la souris dans RichTextBox
- 14. Comment cacher le curseur de la souris?
- 15. Milieu géographique entre deux coordonnées
- 16. Comment afficher une info-bulle uniquement si le curseur de la souris est dans certaines coordonnées?
- 17. coordonnées de la souris dans l'application visual-C++ win32?
- 18. C#/Kinect Contrôler le curseur de la souris
- 19. Bouton d'allumage C# sur le curseur de la souris
- 20. Objet suivre le curseur de la souris
- 21. Déplacer la position du MovieClip à l'opposé des coordonnées de la souris sur un autre MovieClip
- 22. Association entre deux coordonnées dans R
- 23. Sortie bizarre dans le relèvement entre deux calculs de coordonnées
- 24. C# Changer le curseur global de la souris
- 25. Obtenir la longueur entre deux coordonnées?
- 26. C# bouger la souris de façon réaliste
- 27. ne pouvez pas déplacer le curseur de la souris programme dans VirtualBox
- 28. VB.NET - Coordonnées de la souris
- 29. Mesurer la distance entre deux coordonnées dans une application Android
- 30. TinyMCE déplacer le curseur
cela semble bon, mais je ne pouvais pas saisir encore plus lent avec cet algorithme. Cela devient simplement instantané. J'ai utilisé différents Timespan et des valeurs de retard pour le mesurer. – Deku
@Deku - Je vous ai vu accepter la réponse une heure ou deux après votre commentaire. Avez-vous compris ce qui n'allait pas? Je n'ai pas testé ce code. Avait-il besoin de changements? – Justin
.. Je lui ai donné une réponse parce que c'est une meilleure solution. Mais n'a pas exactement répondu à ma question pour la question ci-dessus. Voici le code pour le tester. – Deku