Reserve screen area in Windows 7

妖精的绣舞 提交于 2019-11-29 04:43:42

I'm unsure of how to do this directly in C#, but in native code you can call SystemParametersInfo with SPI_SETWORKAREA. This is how apps like the taskbar, sidebar, and so on can prevent maximized windows from overlapping them.

http://msdn.microsoft.com/en-us/library/ms724947.aspx is the documentation for SystemParametersInfo.

http://social.msdn.microsoft.com/forums/en-US/winforms/thread/9fe831e5-ccfb-4e8d-a129-68c301c83acb/ shows P/Invoke signatures for this method.

I feel silly answering my own question, but thanks to Michael's hint, I found an appropriate C# code sample.

using System;
using System.Runtime.InteropServices;

public class WorkArea
{
  [System.Runtime.InteropServices.DllImport("user32.dll",  EntryPoint="SystemParametersInfoA")]
  private static extern Int32 SystemParametersInfo(Int32 uAction, Int32 uParam, IntPtr lpvParam, Int32 fuWinIni);

  private const Int32 SPI_SETWORKAREA = 47;
  public WorkArea(Int32 Left,Int32 Right,Int32 Top,Int32 Bottom)
  {
    _WorkArea.Left = Left;
    _WorkArea.Top = Top;
    _WorkArea.Bottom = Bottom;
    _WorkArea.Right = Right;
  }

  public struct RECT
  {
    public Int32 Left;
    public Int32 Right;
    public Int32 Top;
    public Int32 Bottom;
  }

  private RECT _WorkArea;
  public void SetWorkingArea()
  {
    IntPtr ptr = IntPtr.Zero;
    ptr = Marshal.AllocHGlobal(Marshal.SizeOf(_WorkArea));
    Marshal.StructureToPtr(_WorkArea,ptr,false);
    int i = SystemParametersInfo(SPI_SETWORKAREA,0,ptr,0);
  }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!