Win8.1+ 动态DPI获取

GetDeviceCaps这个不知道从哪个版本开始就获取不到准确的DPI了(修改后未注销),特意跑去翻文档重写了一份。

.版本 2

.子程序 getDpi, 整数型, 公开, 获取Dpi
.局部变量 fpFun, 整数型
.局部变量 hWnd, 整数型
.局部变量 hdc
.局部变量 hMonitor
.局部变量 nDpiX
.局部变量 nDpiY


hWnd = GetDesktopWindow ()

' ; win8.1+
fpFun = GetProcAddress (Shcore, “GetDpiForMonitor”)
.如果真 (fpFun > 0)
    hMonitor = MonitorFromWindow (hWnd, #MONITOR_DEFAULTTOPRIMARY)
    .如果真 (GetDpiForMonitor (hMonitor, 0, nDpiX, nDpiY) = #S_OK)
        返回 (nDpiX)
    .如果真结束

.如果真结束

' ;低版本
hdc = GetDC (hWnd)
nDpiX = GetDeviceCaps (hdc, #LOGPIXELSX)
' nDpiY = GetDeviceCaps (hdc, #LOGPIXELSY)
ReleaseDC (hWnd, hdc)

返回 (nDpiX)

评论功能被我吃了。