我有以下情况:我有一个特殊的3D程序,我需要能够在不改变程序本身的情况下对多点触摸事件作出反应。因此,我需要一个映射器程序,它接收Windows 7的多点触摸事件,在相应的鼠标和键盘事件中转换它们,并将这个模拟事件发送到3D程序,以便它可以处理这些事件。
我已经阅读并尝试了很多,我目前的方法是在3D程序上有一个几乎透明的覆盖窗口来捕捉多点触摸事件。但这也是问题,我无法设法以可用的方式将生成的鼠标事件转发到底层的3D程序。现在我使用pinvoke函数,如mouse_event,SendMessage等,但它们都不适合我。由于我总是需要将3D程序放在前面,然后发送事件,之后我需要将我的mapper程序重新放在前面。这很糟糕。
所以我的问题或多或少,是否有一个很好的工作方法来做我上面提到的事情?或者至少是一种将鼠标和键盘事件发送到后台进程的好方法?
希望有人能给我一个暗示或暗示......
以下是我现在模拟鼠标点击的方式:
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);
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);
答案 0 :(得分:0)
或许可以查看InfoStrat.VE - Bing Maps 3D for WPF and Microsoft Surface。 他们使Bind地图控件可用于触摸。
也许这有帮助。
答案 1 :(得分:0)
没有办法将鼠标/键盘事件定向到Win32中的特定进程。尽管如此,你可能能够使这种方法起作用: