我希望能够确定光标所在的监视器。理想情况下,这将是任何数量/配置的监视器的动态解决方案。

我认为,仅读取每个监视器的边界并测试光标是否在所述边界内将很简单。

CoordMode, Mouse, Screen
GetMonitorMouse()
{
    MouseGetPos, x, y

    SysGet, Mon1, Monitor, 1
    SysGet, Mon2, Monitor, 2
    SysGet, Mon3, Monitor, 3

    if(x >= Mon1Left && x <= Mon1Right && y >= Mon1Bottom && y <= Mon1Top)
    {
        TrayTip,,monitor1, 1, 16
        SetTimer, TurnOffTrayTip, 500
    }
    else if(x >= Mon2Left && x <= Mon2Right && y >= Mon2Bottom && y <= Mon2Top)
    {
        TrayTip,,monitor2, 1, 16
        SetTimer, TurnOffTrayTip, 500
    }
    else if(x >= Mon3Left && x <= Mon3Right && y >= Mon3Bottom && y <= Mon3Top)
    {
        TrayTip,,monitor3, 1, 16
        SetTimer, TurnOffTrayTip, 500
    }
    else
    {
        TrayTip,,monitor unknown %x%-%y%, 1, 16
        SetTimer, TurnOffTrayTip, 500
        SplashTextOn, 400, 300, CursorMonitor, monitor unknown %x%-%y% # %Mon1top% ~ %Mon1Bottom% $ %Mon1Left% ~ %Mon1Right%
    }

 sleep, 3000
 GetMonitorMouse()

}

GetMonitorMouse()

TurnOffTrayTip:
TrayTip
return

但是,我不理解SysGet返回的界限。底部边界是任意的。例如,Mon1Bottom-8,Mon2Bottom是352

下面的图像显示了Windows看到的三台显示器的布局。以绿色显示了SysGet返回的边界(顶部,底部,左侧,右侧)。我用红色显示了显示器的实际尺寸。

windows - 通过AutoHotKey确定光标在哪个监视器中。监控器底值错误-LMLPHP

我不知道如何测试光标所在的监视器。有人知道我可以修复脚本吗?我正在使用Windows 10。

最佳答案

看来您的脚本很好。根据以上评论,这是您设置的更准确描述。

windows - 通过AutoHotKey确定光标在哪个监视器中。监控器底值错误-LMLPHP

因此,我认为这可以归结为:“为什么显示器2的底部边缘为Y-8?”我认为这可能是偶然放置的。要解决此问题,我将尝试以下操作:

  • 将监视器3移出太空;
  • 上下移动监视器2,然后将其重新放置在监视器1的正上方(可能是最初打算的);
  • 最后,
  • ,重新放置监视器3的位置,使其顶部边缘与监视器2的顶部边缘共线。

  • 现在,就SysGet中的监视器名称而言,它们可能匹配也可能不匹配Windows显示设置中的标识。我认为您只需要先确定哪个监视器是哪个,然后进行测试即可。

    关于windows - 通过AutoHotKey确定光标在哪个监视器中。监控器底值错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55501266/

    10-13 07:24