DirectInput 可以选择拥有独占的鼠标/键盘访问权限。我现在不再使用 DirectInput,想知道如何仅通过使用 winapi 来实现相同的行为?
编辑:我想我可以在窗口中间使用 SetCursorPos() 并通过 ShowCursor() 隐藏光标
如果是鼠标,请使用 Windows 原始输入 API。
使用 RAWINPUTDEVICE 结构中的标志 RIDEV_CAPTUREMOUSE 来调用 RegisterRawInputDevices。这将防止鼠标点击激活其他窗口。结合它,使用 ShowCursor 函数隐藏鼠标光标。这两件事将重现 DirectInput 独有的鼠标行为。在其后来的修订版中,DirectInput(用于键盘和鼠标)只是原始输入 api 的包装器。
我不相信对键盘有任何等效的控制(而且我认为 DirectInput 中也没有。)但是,这通常不是问题,因为用户将无法将输入焦点转移到另一个上除非他们特别想使用 alt-tab 或 ctrl-alt-dlt。
用于ClipCursor()
将鼠标限制在屏幕的特定矩形内,例如窗口的矩形。
你看过SetCapture()吗?
如果您的问题更清楚,这将有所帮助。应用程序缺少鼠标输入(即 WM_MOUSEMOVE 消息)通常是该应用程序具有鲁棒性的原因。毕竟,完全静止的鼠标不会生成任何此类消息。所以我猜你正在做一些不寻常的事情。
还有一种机制可以跟踪鼠标离开应用程序的窗口 - 请参阅此处。它涉及设置一个 TrackMouseEvent 结构,这有点痛苦,但根据我的经验,这一切似乎都有效。我想知道实际上是否是这种机制暂停了您的应用程序?
恐怕对所提供的信息无能为力。