【请看文末更新】
我是一个老堆栈溢出用户(就像大多数开发人员一样,你知道,地球),但这是我在这里的第一个问题。
我正在尝试使用“空中鼠标”进行游戏(将其指向屏幕),但由于鼠标传感器是陀螺仪,因此我想尝试通过软件修复屏幕外移动的一些问题。
使用这款陀螺鼠标,当用户将手臂指向屏幕外时,光标会停在屏幕边界处,这没有问题。但是,当他将手臂向后移动时,无论离屏幕多远,光标都会立即在屏幕上移动。这会导致空中鼠标实际位置和光标之间存在巨大差异。
这可以通过对像素数量和方向的简单控制来解决,在屏幕外移动,并结合一些事件处理。如果我可以将在 -X、+X、-Y 和 +Y 中移动的“屏幕外”像素的数量相加,则可以防止/取消鼠标移动事件 - 或将光标设置到其先前的位置,在边缘屏幕 - 直到控件告诉我物理鼠标指向屏幕。就在那时,我会让光标自由移动。
也许这不是那么有用,但这是一个有趣的问题,看到这个工作会很有趣!
目前,基于这个伟大的项目,我只能说明鼠标何时离开屏幕,但无法控制它移动的距离和方向,以正确实现我正在尝试的内容。在我看来,这种信息对于我目前的 Windows 知识来说太低级了。
所以,要明确一点:当光标处于极限时,我如何在 C# 中(接受其他语言,但我必须学习很多;),获取任何类型的“增量位置”信息或移动方向屏幕?
恕我直言,我对使用不同类型的控制器以及“你不应该这样做”的答案不感兴趣。我有这个问题要解决,用这些元素,做这个工作会很棒!
更新:
好的,这是我到目前为止的进展。
为了获取原始鼠标数据并了解鼠标“离屏”移动,我必须使用一些 Windows API 函数注册我的应用程序,以接收 WM_INPUT 消息。
根据我发现的一个非常古老的代码,我能够获取鼠标原始数据并完全实现我想要的。除了此代码基于 WdnProc 回调这一事实,因此它仅在我的应用程序具有焦点时才有效。当焦点在其他地方时,我也需要它来工作 - 毕竟,我正在努力改善陀螺鼠标提供的指向,用于第三方游戏。
看来我应该使用挂钩(这里是一个很好的例子),但我不知道如何挂钩输入消息。试图合并上面两个链接的代码,但第一个需要传递给 WdnProc 的 message.LParam - 仅在挂钩鼠标事件时似乎不可用。
现在我已经脱离了我的联盟,无法取得一些真正的进步。有任何想法吗?