获得原始鼠标移动(不是屏幕位置)

本文关键字:屏幕 位置 原始 鼠标 移动 | 更新日期: 2023-09-27 18:16:36

我一直在使用xna Mouse类,我能够获得每帧鼠标移动的唯一方法是每次将鼠标重置到屏幕的中心,然后在将其放回中心之前测量位移。这看起来非常粗糙,而且我的鼠标支持5700dpi的分辨率,当xna返回屏幕位置的整数时,我肯定无法得到这个分辨率。

获得原始鼠标移动(不是屏幕位置)

如果使用Mouse.SetPosition并测量偏移量不适合您,则需要使用XNA以外的API。

你想使用的API是WM_INPUT 这是一个你可以通过钩子消息循环接收的消息。(注:XNA的API相当于WM_MOUSEMOVE,所以不要使用)

这个MSDN页面有一些关于API选择的介绍性细节,并有一些使用它进行鼠标输入的示例代码(c++)。

如果您不熟悉Windows消息循环,可以从维基百科开始。它基本上是一个本地(C/c++) API,所以你必须做一些工作才能在c#中使用它。

我自己没有任何方便的代码,但这里有一个链接到某人挂钩消息循环,以便他们可以处理WM_CHAR,这可能是一个很好的起点。

我最近放弃了MouseMove,发现这很有帮助。然而,SharpDX似乎已经在其RawInput模块中包装了大部分内容,所以这对我来说已经足够好了。除此之外,你还可以钩住windows系统。窗体的消息循环重写WndProc;WM_INPUT是消息id 0x00FF;在。net中声明联合很棘手,需要[StructLayout]属性。