在AutoIt中通过DllCall调用GetDeviceCaps总是返回相同的值


Local $hDC = DllCall("user32.dll", "long", "GetDC", "long", $hWnd)
Local $aRet = DllCall("gdi32.dll", "long", "GetDeviceCaps", "long", $hDC[0], "long", 88)
MsgBox(0, "Result", $aRet[0])
Local $aRet = DllCall("gdi32.dll", "long", "GetDeviceCaps", "long", $hDC[0], "long", 90)
MsgBox(0, "Result", $aRet[0])
DllCall("user32.dll", "long", "ReleaseDC", "long", $hWnd, "long", $hDC)

我写了一些像上面的代码,出于某种原因,我想获得显示缩放设置。但无论我配置了什么显示设置,我总是得到相同的值"96"。

在C中使用相同的函数调用,我可以得到正确的值,如96,144…等。有人知道如何使GetDeviceCaps函数在AutoIt脚本工作吗?谢谢!

下面是C代码:
int main(int argc, char *argv[])
{
    HDC hdc = GetDC(NULL);
    int g_DPIScaleX = GetDeviceCaps(hdc, LOGPIXELSX);// / 96.0f;
    int g_DPIScaleY = GetDeviceCaps(hdc, LOGPIXELSY);// / 96.0f;
    ReleaseDC(NULL, hdc);
    printf("%d %dn", g_DPIScaleX, g_DPIScaleY);
    getchar();
}

也许这不是你想要的,但我总是检查DPI在注册表上的缩放:

RegRead("HKCU:Control PanelDesktop", "LogPixels")

编辑:您也可以更改密钥与RegWrite和Relog/Reboot后激活它。

相关内容

  • 没有找到相关文章

最新更新