在Windows 7中保留屏幕区域

5

在Windows 7中,是否有可能保留屏幕边缘附近的屏幕区域用于您的应用程序?它将类似于Windows任务栏(即最大化的窗口不会与其重叠)。

我正在编写一个具有对多个监视器的正确支持的任务栏应用程序。其主要目的是在每个屏幕上显示仅包含该屏幕上的应用程序的任务栏。我所知道的所有现有解决方案(UlltramonDisplayFusion)都不适用于Win 7,并且没有开源解决方案。

如果能提供C#代码那就更好了,但也欢迎任何提示。

2个回答

5

我觉得自己回答自己的问题有点傻,但感谢迈克尔的提示,我找到了一个合适的C#代码示例

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

3

我本来会说这是不可能做到_完美_的,因为有办法规避它。例如全屏和kiosk以及directx应用程序都会忽略它。但后来我意识到,既然他正在构建一个“像任务栏”的应用程序,允许与任务栏相同的解决方法是完全适当的。 - Joel Coehoorn
1
他明确表示“最大化窗口”,而最大化窗口将尊重此设置。即使不跳转到DX,您也可以手动将窗口定位在工作区之外。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接