通过AutoIt中的DllCall调用GetDeviceCaps始终返回相同的值

时间:2016-08-12 03:17:29

标签: autoit

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 %d\n", g_DPIScaleX, g_DPIScaleY);
    getchar();
}

1 个答案:

答案 0 :(得分:1)

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

RegRead("HKCU:\Control Panel\Desktop", "LogPixels")

编辑:您也可以使用RegWrite和Relog / Reboot激活密钥以激活它。