[请参见结尾的更新]
我是一个老旧的 Stack Overflow 用户(像大多数地球上的开发者一样),但这是我在这里的第一个问题。
我正在尝试使用“空气鼠标”进行游戏(将其指向屏幕),但由于鼠标传感器是陀螺仪,所以存在一些屏幕外移动的问题,我想尝试通过软件来解决。
使用这个陀螺仪鼠标时,当用户将手臂指向屏幕外移动时,光标会停留在屏幕边缘,这没有问题。然而,当他将手臂移回来时,无论离屏幕的距离有多远,光标立即移回屏幕上。这导致了空气鼠标实际位置和光标之间的巨大差异。
这可以通过对离屏幕移动的像素数量和方向进行简单控制,并结合一些事件处理来解决。如果我能够总结出在 -X、+X、-Y 和 +Y 方向上移动的“离屏幕”像素数量,就可以防止/取消鼠标移动事件 - 或将光标设置为其在屏幕边缘的先前位置 - 直到控制告诉我物理鼠标指向屏幕。然后我才允许光标自由移动。
[请参见结尾的更新]
也许这并不是特别有用,但这是一个有趣的问题,看到它能够运行起来会非常有趣!目前,基于this great project,我只能说明鼠标何时离开屏幕,但无法控制其移动距离和方向,以便实现我正在尝试的内容。在我当前的 Windows 知识水平上,这种信息似乎过于低级。
因此,明确一下:在 C#(其他语言也可以,但我需要学习很多)中,我如何获取任何类型的“增量位置”信息或移动方向,当光标处于屏幕边缘时?
恕我直言,我对使用不同类型的控制器以及“你不应该这样做”的答案不感兴趣。我要解决这个问题,使用这些元素,并且让它能够运作起来将是很棒的事情!
更新:
好了,现在是我的进展。
为了获取原始鼠标数据并了解鼠标在屏幕外的移动,我需要使用一些Windows API函数注册我的应用程序以接收WM_INPUT消息。
基于我找到的非常古老的代码,我能够获取鼠标原始数据并实现我想要的功能。但是这个代码基于WdnProc回调,因此只有当我的应用程序处于焦点状态时才能工作。而我需要它在焦点在其他地方时也能工作 - 毕竟,我正在尝试改善陀螺仪鼠标提供的指向性,用于第三方游戏。
看起来我应该使用一个钩子(这里有一个好例子),但我不知道如何钩取输入消息。尝试合并上述两个链接的代码,但第一个链接需要传递给WdnProc的message.LParam,而当仅钩取鼠标事件时似乎无法使用。
现在我已经超出了自己的水平,无法取得真正的进展。有什么建议吗?