在Windows 7中保留屏幕区域

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

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

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

我不确定如何直接在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签名。

我觉得回答自己的问题很傻,但多亏了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); } }