private void WmGetMinMaxInfo(IntPtr hwnd, IntPtr lParam) { var mmi = (InteropValues.MINMAXINFO)Marshal.PtrToStructure(lParam, typeof(InteropValues.MINMAXINFO)); var monitor = InteropMethods.MonitorFromWindow(hwnd, InteropValues.MONITOR_DEFAULTTONEAREST); if (monitor != IntPtr.Zero && mmi != null) { InteropValues.APPBARDATA appBarData = default; var autoHide = InteropMethods.SHAppBarMessage(4, ref appBarData) != 0; if (autoHide) { var monitorInfo = default(InteropValues.MONITORINFO); monitorInfo.cbSize = (uint)Marshal.SizeOf(typeof(InteropValues.MONITORINFO)); InteropMethods.GetMonitorInfo(monitor, ref monitorInfo); var rcWorkArea = monitorInfo.rcWork; var rcMonitorArea = monitorInfo.rcMonitor; mmi.ptMaxPosition.X = Math.Abs(rcWorkArea.Left - rcMonitorArea.Left); mmi.ptMaxPosition.Y = Math.Abs(rcWorkArea.Top - rcMonitorArea.Top); mmi.ptMaxSize.X = Math.Abs(rcWorkArea.Right - rcWorkArea.Left); mmi.ptMaxSize.Y = Math.Abs(rcWorkArea.Bottom - rcWorkArea.Top - 1); } } Marshal.StructureToPtr(mmi, lParam, true); }
internal static extern uint SHAppBarMessage(int dwMessage, ref InteropValues.APPBARDATA pData);