我正在使用 Kinect 来玩弄网站(JS)。该网站上有一个 3D 图表,可以与之交互。左键单击并四处移动可旋转它,而鼠标滚轮旋转可增加/减小其大小。我想使用 Kinect 来完成这一切。
我面临的问题是
1) 我已经给出了缩放值,即 mouse_event 中的 dwData 作为右手腕和左手腕之间的距离。这使得放大缩小发生,但我以非常慢的速度尝试将缩放值乘以更高的数字,但它不起作用。这是相关的代码
internal struct MouseInput
{
public int X;
public int Y;
public float MouseData;
public uint Flags;
public uint Time;
public IntPtr ExtraInfo;
}
internal struct Input
{
public int Type;
public MouseInput MouseInput;
}
Input[] i = new Input[1];
i[0] = new Input();
i[0].Type = InputMouse;
i[0].MouseInput.Flags = MouseEventWheel;
i[0].MouseInput.MouseData = zoomVal * 1000;
uint result = SendInput(3, i, Marshal.SizeOf(i[0]));
上面代码中,zoomVal来自左右手腕之间的距离。我保持原样或乘以 1000,它仍然以非常慢的速度缩放。
最佳答案
public float MouseData;
这是错误的类型,MOUSEINPUT.mouseData 字段实际上是 Windows 中的 DWORD。在 C# 中只是一个 int。您可以在 MSDN Library 中看到一些内容。或者pinvoke.net文章,通常是查找良好 pinvoke 声明 (YMMV) 的相当不错的地方。
结果是相当随机的,您的 C# 代码将生成 IEEE-754 格式的单精度浮点值,但 Windows/Kinect 会将其读取为整数。 “非常慢的速率”当然很有可能,乘以该值只会增加代表指数的值中的位。
将其设为public int MouseData;
,而不是取得成功。
关于c# - 如何为User32.dll的sendInput方法在mouse_input中设置适当的缩放值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20561288/