通过 AutoHotKey 设置相对于屏幕分辨率的特定窗口大小

通过 AutoHotKey 设置相对于屏幕分辨率的特定窗口大小

我创建了一个脚本,可以自动设置某些应用的窗口大小。我把它放在启动中,这样它就可以独立工作了。我需要这个,因为我有一台屏幕分辨率为 2560x1600 的笔记本电脑,我用它来工作。但是当我在家时,我会把它连接到我的全高清显示器上。问题是,有些应用会因为不同的屏幕分辨率而改变它们的大小,而且总是手动调整它们的大小非常烦人。所以我这样做了:

#Persistent

GroupAdd, ResizedWin, ahk_exe telegram.EXE
GroupAdd, ResizedWin, ahk_exe Discord.EXE
GroupAdd, ResizedWin, ahk_exe WhatsApp.EXE
GroupAdd, ResizedWin, ahk_exe Notepad.EXE

Loop
{
    WinWait ahk_group ResizedWin
        WinMove, , , , , 1417, 915
    WinWaitClose
}

对我来说,这是适合这些应用的完美尺寸。但目前的问题是,它非常适合 WQHD 分辨率。在 FHD 上,它显然非常大。

我的问题是,有没有什么方法可以校正窗口大小,使其在 WQHD 和 FHD 显示器上看起来一样?这可能很重要,但当我使用 FHD 显示器时,笔记本电脑是关闭的,因此 WQHD 显示器处于非活动状态。反之亦然,当我使用 WQHD 显示器时,FHD 显示器甚至没有连接。

我已经发现温莫夫AHK 的文档如下:

CenterWindow(WinTitle)
{
    WinGetPos,,, Width, Height, %WinTitle%
    WinMove, %WinTitle%,, (A_ScreenWidth/2)-(Width/2), (A_ScreenHeight/2)-(Height/2)
}

你可以看到一个有趣的(A_ScreenWidth/2)-(宽度/2)(A_ScreenHeight/2)-(高度/2)用于将窗口居中。所以这在某种程度上是可行的,但我不确定它是否适用于窗口的宽度和高度。更重要的是,我不知道如何计算它,比如我应该将屏幕分辨率除以多少。如果在 2560x1600 上是 1417x915,那么在 1920x1080 上会是多少。

所以这只是我的假设。也许还有其他方法?

答案1

首先假设您缩放分辨率与 DPI 无关,因此我们从这里开始。但是,如果您的 DPI 不同(不同屏幕),您可能需要考虑到这一点:请参阅A_ScreenDPI

接下来,看起来您只是将窗口缩放到可用分辨率的一定百分比,即:

  • 1417/2560=~55%
  • 915/1600=~57%

因此,例如要得到 1417,当A_ScreenWidth为 2560 时,以下各项在评估时都大致等效:

  • 1417
  • 1417/2560*A_屏幕宽度
  • .55*A_屏幕宽度

所以不要...

WinMove, , , , , 1417, 915

...使用上面的其中一个公式,让新窗口大小成为屏幕分辨率的函数:

WinMove, , , , , .55 * A_ScreenWidth, .57 * A_ScreenHeight

上述语句将窗口大小调整为屏幕宽度的 55% 和屏幕高度的 57%。

如果需要考虑 DPI,那么这是另一个缩放变量,默认值通常为 96。如果您只是将窗口缩放为屏幕整体尺寸的百分比,则可能不需要使用它,并且如果您的屏幕 DPI 是默认值 96,则下面这个等式中的新项将计算为“1”,有效结果将与使用上述没有 DPI 项的代码相同。

WinMove, , , , , .55 * A_ScreenWidth * A_ScreenDPI/96, .57 * A_ScreenHeight * A_ScreenDPI/96

相关内容