【问题标题】:Reserve screen area in Windows 7在 Windows 7 中保留屏幕区域
【发布时间】:2010-10-24 14:53:36
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net windows-7 taskbar


    【解决方案1】:

    我觉得回答自己的问题很愚蠢,但感谢迈克尔的提示,我找到了合适的C# code sample

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我会说要做到这一点完美是不可能的,因为有很多方法可以绕过它。例如,全屏和信息亭以及 directx 应用程序将忽略这一点。但后来我意识到,由于他正在构建一个“类似于任务栏”的应用程序,因此允许与任务栏相同的解决方法是非常合适的。
      • 他特别说“最大化窗口”,最大化一个窗口会尊重这个设置。甚至无需跳转到 DX,您就可以手动将窗口定位在工作区域之外。
      猜你喜欢
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多