У меня следующая ситуация: у меня есть специальная 3D-программа, которая мне нужна, чтобы можно было реагировать на события с несколькими касаниями, не меняя саму программу. Поэтому мне нужна программа mapper, которая получает события мультитач в Windows 7, преобразует их в соответствующие события мыши и клавиатуры и отправляет эти эмулированные события в 3D-программу, чтобы она могла обрабатывать эти события.
Я уже много читал и пробовал, и мой нынешний подход - иметь почти прозрачное окно наложения поверх 3D-программы для захвата событий мультитач. Но это также проблема, я не могу перенаправить сгенерированные события мыши в основную 3D-программу удобным для использования способом. Прямо сейчас я использовал функции pinvoke, такие как mouse_event, SendMessage и так далее, но ни одна из них не работала для меня. Так как мне всегда приходилось выводить 3D-программу на передний план, отправлять событие, а после этого мне нужно было снова выводить мою программу картографирования на передний план. Это работает довольно дерьмово.
Итак, мой вопрос более или менее, есть ли хороший рабочий подход для выполнения вещей, которые я упомянул выше? Или хотя бы хороший способ отправки событий мыши и клавиатуры процессам в фоновом режиме?
Надеюсь, кто-нибудь может дать мне подсказку или предложение ....
Вот как я сейчас симулирую щелчки мыши:
</p>
<pre><code> 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);