Прикрепите winform к экрану и измените размер экрана WorkingArea - PullRequest
1 голос
/ 07 ноября 2019

Мне нужна панель управления, которая прикреплена к правой стороне моего основного экрана, вот как я это сделал:

        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);

Это работает точно, как я хочу, с однимнебольшая проблемаМне нужно было бы одновременно изменить размер рабочей области основного экрана, чтобы другие развернутые формы / приложения не перекрывали мою панель. Кроме того, моя панель должна быть всегда видимой.

Я нашел здесь пост, именно по этой теме: Резервная область экрана в Windows 7

Вот как это былопредложил там:

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 лет, и решение, к сожалению, не сработало для меня.

Так что мой вопрос будет таким: Каков наилучший способсделать это? Я открыт для любых предложений, так как я все еще учусь;)

...