I need a control panel, which is docked to the right side of my primary screen, here's how I've done that:
var PrimaryScreen = Screen.PrimaryScreen;
var WorkingArea = PrimaryScreen.WorkingArea;
this.Width = WorkingArea.Width / 6;
this.Height = WorkingArea.Height;
int X = WorkingArea.Width - this.Width;
int Y = WorkingArea.Location.Y;
this.Location = new Point(X, Y);
This works exactly, how I want it too, with one slight problem. I would need to simultaneously resize the primary screen workingarea, so other maximized forms / apps won't overlap my panel. Also, my panel should be always visible.
I had found a post here, exactly concerning this topic: Reserve screen area in Windows 7
This is how it was suggested there:
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);
}
}
But the post is over 10 years old, and the solution sadly didn't work for me.
So my question would be: What is the best way to accomplish that? I am open to any suggestions, since I am still learning ;)