C# 将winform停靠到屏幕一侧并调整屏幕工作区域的大小

C# 将winform停靠到屏幕一侧并调整屏幕工作区域的大小,c#,screen,C#,Screen,我需要一个控制面板,它停靠在我的主屏幕的右侧,我是这样做的: var PrimaryScreen = Screen.PrimaryScreen; var WorkingArea = PrimaryScreen.WorkingArea; this.Width = WorkingArea.Width / 6; this.Height = WorkingArea.Height; int X = W

我需要一个控制面板,它停靠在我的主屏幕的右侧,我是这样做的:

        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);
这正是我想要的,有一个小问题。我需要同时调整主屏幕工作区域的大小,以便其他最大化的表单/应用不会与我的面板重叠。此外,我的面板应始终可见

我在这里找到了一篇帖子,正是关于这个话题的:

这是建议的方式:

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);
    }
}
但这篇文章已经有10多年的历史了,可悲的是,这个解决方案对我来说并不奏效


所以我的问题是:实现这一目标的最佳方式是什么?我愿意接受任何建议,因为我还在学习;)

可悲的是,我现在没有代码,但我记得大约10个月前我使用了相同的代码,在windows 10中更正代码后出现了一些错误。@AshkanMobayenKhiabani知道,它会是什么吗?让我看看我是否可以再做一次,因为不幸的是,我现在没有代码。实际上,这就是我使用的代码(并稍作改动)可悲的是,我现在没有代码,但我记得大约10个月前我使用了相同的代码,在windows 10中更正代码后出现了一些错误。@AshkanMobayenKhiabani知道,它会是什么吗?让我看看我是否可以再做一次,因为不幸的是,我现在没有代码。实际上,这就是我使用的代码(并稍作改动)