在Windows 7中保留屏幕区域

dbk*_*bkk 5 .net c# taskbar windows-7

是否可以在Windows 7中为应用程序的屏幕边缘预留屏幕区域?它的行为类似于Windows任务栏(即最大化的窗口不会与它重叠).

我正在编写一个任务栏应用程序,并支持多个监视器.主要目的是在每个屏幕上显示仅包含该屏幕上的应用程序的任务栏.我所知道的现有解决方案(Ulltramon,DisplayFusion)都没有为Win 7工作,也没有一个是开源的.

C#代码会很好,但任何提示也都很受欢迎.

dbk*_*bkk 5

我觉得很难回答我自己的问题,但多亏了Michael的提示,我发现了一个合适的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);
  }
}
Run Code Online (Sandbox Code Playgroud)


Mic*_*ael 4

我不确定如何直接在 C# 中执行此操作,但在本机代码中,您可以使用 SPI_SETWORKAREA 调用 SystemParametersInfo。这就是任务栏、侧边栏等应用程序如何防止最大化的窗口与它们重叠的方式。

http://msdn.microsoft.com/en-us/library/ms724947.aspx是 SystemParametersInfo 的文档。

http://social.msdn.microsoft.com/forums/en-US/winforms/thread/9fe831e5-ccfb-4e8d-a129-68c301c83acb / 显示此方法的 P/Invoke 签名。