如何用vba获取屏幕显示器每英寸包含的像素数目ppi?

PPI:Pixels Per Inch也叫像素密度,所表示的是每英寸所拥有的像素数量。
PPI数值越高,代表显示屏能够以越高的密度显示图像,画面的细节就会越丰富。

在vba中可以用api函数GetDeviceCaps获取显示器的ppi。

GetDeviceCaps函数可以获取指定设备的各种信息。

它的语法如下:

int GetDeviceCaps(
HDC hdc,
int index
);

其中参数hdc为要获取的设备DC的句柄,index参数为要获取的设备的信息。

当参数hdc为0,index参数为LOGPIXELSX时,返回的是显示器屏幕宽度方向上每英寸的像素数。

为LOGPIXELSY时,返回的是显示器屏幕高度方向上每英寸的像素数。

基于以上的知识可以通过如下的代码获取显示器的PPI:

Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long
Declare Function GetDeviceCaps Lib "Gdi32" (ByVal hDC As Long, ByVal index As Long) As Long
Const HORZRES = 8
Const VERTRES = 10
Const LOGPIXELSX = 88
Const LOGPIXELSY = 90
Sub QQ1722187970()
    Dim hDC As Long
    hDC = GetDC(0)
    Dim X, Y
    X = GetDeviceCaps(hDC, HORZRES)
    Y = GetDeviceCaps(hDC, VERTRES)
    MsgBox "当前系统的屏幕分辨率为" & X & "X" & Y
    Dim X1, Y1
    X1 = GetDeviceCaps(hDC, LOGPIXELSX)
    Y1 = GetDeviceCaps(hDC, LOGPIXELSY)
    MsgBox "当前显示器的PPI为" & X1 & "X" & Y1
    ReleaseDC 0, hDC
End Sub

为了方便使用,可以在vba中自定义获取屏幕显示器PPI的自定义函数如下:

Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long
Declare Function GetDeviceCaps Lib "Gdi32" (ByVal hDC As Long, ByVal index As Long) As Long
Const LOGPIXELSX = 88
Const LOGPIXELSY = 90
Function GetPPI()
    Dim hDC As Long
    hDC = GetDC(0)
    Dim X, Y
    X = GetDeviceCaps(hDC, LOGPIXELSX)
    Y = GetDeviceCaps(hDC, LOGPIXELSY)
    GetPPI = X
End Function
       

发表评论