Получить коэффициент масштабирования для вторичного экрана - PullRequest
0 голосов
/ 18 октября 2019

Я хотел бы получить коэффициент масштабирования дополнительного экрана.

С помощью этого фрагмента кода я получаю правильную информацию для основного монитора:

Private Declare Function GetDeviceCaps Lib "gdi32.dll" (ByVal hdc As IntPtr, ByVal nIndex As Integer) As Integer
Private Declare Function GetDCEx Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal hrgnClip As IntPtr, ByVal DeviceContextValues As DeviceContextValues) As IntPtr

Dim desktop As IntPtr  = GetDCEx(0, 0, DeviceContextValues.Window)

Dim scalling As Double = GetDeviceCaps(desktop, 118) / GetDeviceCaps(desktop, 8)

Но как я могуполучить ту же информацию для второго монитора?

Какие параметры в функции GetDCEx?

1 Ответ

0 голосов
/ 22 октября 2019

спасибо, это поможет мне это решение:

<DllImport("gdi32.dll")>
Public Shared Function GetDeviceCaps(ByVal hDC As IntPtr, ByVal nIndex As Integer) As Integer
End Function

<DllImport("gdi32.dll", SetLastError:=True, CharSet:=CharSet.Ansi)>
Public Shared Function CreateDC(<MarshalAs(UnmanagedType.LPStr)> lpszDriver As String,
          <MarshalAs(UnmanagedType.LPStr)> lpszDevice As String,
          <MarshalAs(UnmanagedType.LPStr)> lpszOutput As String,
          lpInitData As IntPtr) As IntPtr
End Function

Public Shared Function GetScalleFactor(index As Integer) As Double
    Dim desktop As IntPtr = CreateDC(Screen.AllScreens(index).DeviceName, Nothing, Nothing, IntPtr.Zero)
    Return GetDeviceCaps(desktop, 118) / GetDeviceCaps(desktop, 8)
End Function
...