【问题标题】:Exclusive mouse/keyboard with the Winapi带有 Winapi 的独家鼠标/键盘
【发布时间】:2012-12-27 16:31:00
【问题描述】:

DirectInput 可以选择独占鼠标/键盘访问。我现在不再使用 DirectInput,想知道如何仅通过使用 winapi 来实现相同的行为?

编辑:我想我可以使用 SetCursorPos() 到窗口中间并通过 ShowCursor() 隐藏光标

【问题讨论】:

  • 你想解决什么问题?
  • 为了防止鼠标离开窗口,这会暂停我的程序。
  • 即使在按下 control atl del 之后?
  • 不,Ctrl alt del 仍然会通过

标签: c++ winapi input keyboard mouse


【解决方案1】:

如果是鼠标,请使用 Windows 原始输入 API。

在您的 RAWINPUTDEVICE 结构中使用标志 RIDEV_CAPTUREMOUSE 来调用 RegisterRawInputDevices。这将防止鼠标点击激活其他窗口。结合它,使用 ShowCursor 函数隐藏鼠标光标。这两件事将重现 DirectInput 独有的鼠标行为。在其后来的修订版中,DirectInput(用于键盘和鼠标)只是原始输入 api 的包装。

我不相信对键盘有任何等效的控制(而且我认为 DirectInput 中也没有。)但是,这通常不是问题,因为用户将无法获得输入除非他们特别想使用 alt-tab 或 ctrl-alt-dlt,否则专注于另一个应用程序。

【讨论】:

    【解决方案2】:

    你看过SetCapture()吗?

    如果您的问题更清楚,这将有所帮助。应用程序缺少鼠标输入(即 WM_MOUSEMOVE 消息)通常是该应用程序具有鲁棒性的原因。毕竟,完全静止的鼠标不会生成任何此类消息。所以我猜你在做一些不寻常的事情。

    还有一种机制可以跟踪鼠标离开应用程序的窗口 - 请参阅here。它涉及设置一个有点痛苦的 TrackMouseEvent 结构,但根据我的经验,它似乎都有效。我想知道实际上是否是这种机制暂停了您的应用程序?

    恐怕对所提供的信息无能为力了。

    【讨论】:

      【解决方案3】:

      使用ClipCursor() 将鼠标限制在屏幕的特定矩形内,例如窗口的矩形。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-24
        • 1970-01-01
        • 2012-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多