diff --git a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs index d6b95bc7b0..5fe889f41d 100644 --- a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs +++ b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs @@ -987,7 +987,7 @@ namespace Avalonia.Win32.Interop [DllImport("user32", EntryPoint = "GetMonitorInfoW", ExactSpelling = true, CharSet = CharSet.Unicode)] [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool GetMonitorInfo([In] IntPtr hMonitor, [Out] MONITORINFO lpmi); + public static extern bool GetMonitorInfo([In] IntPtr hMonitor, ref MONITORINFO lpmi); [return: MarshalAs(UnmanagedType.Bool)] [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "PostMessageW")] @@ -1055,12 +1055,17 @@ namespace Avalonia.Win32.Interop } [StructLayout(LayoutKind.Sequential)] - internal class MONITORINFO + internal struct MONITORINFO { - public int cbSize = Marshal.SizeOf(); - public RECT rcMonitor = new RECT(); - public RECT rcWork = new RECT(); - public int dwFlags = 0; + public int cbSize; + public RECT rcMonitor; + public RECT rcWork; + public int dwFlags; + + public static MONITORINFO Create() + { + return new MONITORINFO() { cbSize = Marshal.SizeOf() }; + } public enum MonitorOptions : uint { diff --git a/src/Windows/Avalonia.Win32/ScreenImpl.cs b/src/Windows/Avalonia.Win32/ScreenImpl.cs index e1df24151d..5cfceb68b7 100644 --- a/src/Windows/Avalonia.Win32/ScreenImpl.cs +++ b/src/Windows/Avalonia.Win32/ScreenImpl.cs @@ -26,8 +26,8 @@ namespace Avalonia.Win32 EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, (IntPtr monitor, IntPtr hdcMonitor, ref Rect lprcMonitor, IntPtr data) => { - MONITORINFO monitorInfo = new MONITORINFO(); - if (GetMonitorInfo(monitor, monitorInfo)) + MONITORINFO monitorInfo = MONITORINFO.Create(); + if (GetMonitorInfo(monitor,ref monitorInfo)) { RECT bounds = monitorInfo.rcMonitor; RECT workingArea = monitorInfo.rcWork; diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs index 65580ff9c8..45120fa21b 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.cs @@ -837,9 +837,9 @@ namespace Avalonia.Win32 if (monitor != IntPtr.Zero) { - MONITORINFO monitorInfo = new MONITORINFO(); + MONITORINFO monitorInfo = MONITORINFO.Create(); - if (GetMonitorInfo(monitor, monitorInfo)) + if (GetMonitorInfo(monitor,ref monitorInfo)) { RECT rcMonitorArea = monitorInfo.rcMonitor;