【问题标题】:Mouse Wrapping in Multi-Monitor Environments多显示器环境中的鼠标环绕
【发布时间】:2014-01-17 04:26:14
【问题描述】:

我已经对此进行了大量研究。有一些程序,如 Mousinity,允许“鼠标包裹”。如果您知道另一个术语,那就是鼠标指针将离开屏幕的一侧并出现在屏幕的另一侧。

但是,所有这样做的程序都未能在其功能列表中包含一个关键元素:多显示器设置。我厌倦了下载一个完全陌生的软件,却让它无法与我的设置一起使用。

这个问题的坏处是这样的:

有没有办法通过对 Windows 的某种 API 调用来控制鼠标指针的行为?编辑:更具体地说,API 如何处理多个监视器?坐标平面的原点在哪里?

虽然我知道它会复杂得多,但这是我正在尝试做的伪代码:

if (mouse_position == side_of_screen_of_monitor1 && Mouse_is_being_moved off screen)
{    
    mouse_position == opposite_side_of_screen_of_monitor2
}

【问题讨论】:

  • 我将重新表述这个问题。我实际上是在寻找更多关于如何使用 C++ 处理鼠标的信息。也就是说,使用任何有助于处理 Windows 上的鼠标输入的 API。重新阅读我的问题,我发现这不是这样的。
  • 您需要 SetWindowsHookEx() 来设置一个低级鼠标挂钩,以便您可以看到它移动。和 EnumDisplayDevices() 来查找监视器。
  • 不要使用 SeWindowHookEx()。那是旧的和过时的。如果您想使窗口屈服,请编写一个低级挂钩,并在其中设置一个断点。您应该处理原始输入。 SendInput、注册输入等。这使您的应用程序可以控制整个桌面的输入。

标签: c++ windows mousemove


【解决方案1】:

原点是主显示器的左上角。如果您将监视器放置在主监视器的左侧,则该监视器上的 x 坐标将为负数。如果监视器高于或部分高于主监视器,则该区域的 y 坐标将为负值。

GetSystemMetrics 还具有仅引用多监视器系统的常量。 SM_XVIRTUALSCREEN 和 SM_YVIRTUALSCREEN 标识虚拟屏幕的左上角,SM_CXVIRTUALSCREEN 和 SM_CYVIRTUALSCREEN 是虚拟屏幕的垂直和水平测量值

更多信息请看这里:

对于您的任务,我认为您可能只需要考虑虚拟屏幕坐标。

【讨论】:

    猜你喜欢
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多