J'ai la situation suivante: J'ai un programme spécial en 3D que je dois pouvoir faire réagir aux événements multi-touch sans changer le programme lui-même. Par conséquent j'ai besoin d'un programme de mappeur, qui reçoit les événements multi-touch de Windows 7, les convertit dans les événements de souris et de clavier correspondants et envoie ces événements émulés au programme 3D, afin qu'il puisse traiter ces événements.Est-il possible d'intercepter des événements multitouch Win7, de les convertir en événements souris et clavier et de les envoyer à une autre application?
Je l'ai déjà lu et essayé beaucoup et mon approche actuelle est d'avoir une fenêtre de recouvrement presque transparent sur le programm 3D pour attraper des événements multi-touch. Mais c'est aussi le problème, je n'arrive pas à transférer les événements souris générés au programme 3D sous-jacent d'une manière utilisable. À l'heure actuelle, j'ai utilisé des fonctions pinvoke comme mouse_event, SendMessage et ainsi de suite, mais aucun d'eux n'a fonctionné pour moi. Comme je devais toujours mettre le programme 3D en avant, envoyer l'événement et après, j'avais besoin de mettre mon programme de mappeur en avant. Cela fonctionne assez merdique.
Donc, ma question est plus ou moins, est-il une approche de travail agréable de faire les choses que je l'ai mentionné ci-dessus? Ou au moins une bonne façon d'envoyer des événements de souris et de clavier aux processus en arrière-plan?
quelqu'un pourrait me donner l'espoir d'un soupçon ou une suggestion ....
Voici la façon dont je simuler les clics de souris en ce moment:
private void OnMouseDown(object sender, MouseEventArgs e)
{
Point position = this.PointToScreen(new Point(e.Location.X, e.Location.Y));
//Simulate the mouse event on the given position
this.Visible = false;
Cursor.Position = position;
mouse_event(Convert.ToUInt16(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
}
private void OnMouseUp(object sender, MouseEventArgs e)
{
Point position = this.PointToScreen(new Point(e.Location.X, e.Location.Y));
//Simulate the mouse event on the given position
Cursor.Position = e.Location;
mouse_event(Convert.ToUInt16(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
this.Visible = true;
}
//Get a handle to the mouse event manager
[DllImport("user32.dll")]
private static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, int dwExtraInfo);