c# - 如何为User32.dll的sendInput方法在mouse_input中设置适当的缩放值?

标签 c# mouseevent mouse mousewheel kinect-sdk

我正在使用 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/

相关文章:

c# - 是否可以在 .NET 中将非公历日期表示为 DateTime?

java - 使用 acm.graphics 时 mouseListener 的语法是什么

python - 如何模拟游戏中的鼠标移动?

c++ - opencv c++ 中的鼠标事件

jquery - 除了 Firefox 之外的所有浏览器中的 Mouseup 错误?

c# - 在毛伊岛构建节拍器,但声音播放器不规则并且对计时器不响应。间隔

c# - LuaInterface - 如何从任何路径加载程序集?

java - java中使用滚轮缩放

objective-c - mouseDown 时禁用 mouseEntered 事件(NSEvents Mac)

c# - ActionFilter 响应类型(text/html)与响应内容不匹配