【问题标题】:How to get a print screen of the desktop without any windows or the taskbar?如何获得没有任何窗口或任务栏的桌面打印屏幕?
【发布时间】:2012-07-23 09:09:02
【问题描述】:

我的应用程序是一个 Windows 窗体。

我尝试使用 windows 壁纸,但这取决于“填充”、“拉伸”、“适合”或“平铺”设置。 我只需要桌面上的图像,但包括任务栏“下方”的部分,因为在透明任务栏的情况下这部分是可见的。

为什么我需要这个? 因为我有一个托盘应用程序,它在打开时会从任务栏下方滑动。而且我需要在那里设置一个遮罩,所以在它到达任务栏的顶部之前看不到它的滑动。同样,这只是任务栏透明时的问题。

【问题讨论】:

  • 如果你想获得一个没有图标、任务栏等的背景副本,你必须在代码方面,将它们全部隐藏,占据屏幕,然后将它们放回原来的样子
  • @BaliC 所以不要打扰回答
  • @BugFinder 这不会影响用户吗?
  • 是的。但是如果你不能在应用出现之前隐藏你的应用,那就没有太多选择了。
  • 或者,既然你不想看到它在任务栏后面滑动,那么从任务栏顶部开始滑动?

标签: windows winforms


【解决方案1】:

我不确定我是否正确理解了您的问题。但对我来说,您似乎需要创建壁纸的图像。如果看起来更容易,请查看以下位置的注册表项:

HKEY_CURRENT_USER\Control Panel\Desktop

这将为您提供墙纸的路径、大小、平铺/无平铺等信息。

【讨论】:

    【解决方案2】:

    有一个名为 PaintDesktop 的 Win32 函数你可以尝试,但除非我误解了你应该能够调整窗口的高度,所以它永远不会真正位于任务栏后面...

    【讨论】:

      【解决方案3】:

      为什么我需要这个?因为我有一个托盘应用程序,它在打开时会从任务栏下方滑动。而且我需要在那里设置一个遮罩,所以在它到达任务栏的顶部之前看不到它的滑动。同样,这只是任务栏透明时的问题。

      这里的问题是您从整个屏幕的底部开始向上滑动,而不是从屏幕工作区域的底部开始(即,任务栏的顶部)。这就是为什么您会看到弹出窗口在透明任务栏后面向上滑动。

      幸运的是,该解决方案比获取桌面背景和/或进行任何类型的遮罩要简单得多。它也更快,而且你的眼睛糖果不会对用户的计算机造成不必要的负担,这总是好的。

      你只需要确定屏幕工作区域的坐标,Windows定义为应用程序可以使用的区域,不包括任务栏和其他侧边栏。您可以通过查询Screen.PrimaryScreen.WorkingArea property 在 WinForms 中轻松获取此信息。这将返回对应于主屏幕工作区域的Rectangle。由于您知道任务栏始终显示在主屏幕上,这正是您想要的。

      获得主屏幕工作区域的坐标后,从底部开始滑动弹出窗口。*

      这是一个很好的教训,说明为什么你应该总是解释你为什么要完成某事。通常有一种更好的方法是您没有想到的。

      *当然,我忽略了用户可能没有将他们的任务栏定位在屏幕的底部这一事实。你可以把它放在两边,甚至放在上面。在我看来,您的问题中也没有考虑到这一点。如果这是您仅为自己编写的应用程序,或者是为受控环境编写的应用程序,您可以确保没有人将任务栏置于非默认位置,那可能没问题。但是,如果您正在编写软件以分发给更广泛的受众,您将需要考虑到这一点。 rcWork 坐标将是正确的,无论任务栏位于何处,当然,但您需要知道是从底部、左侧、右侧还是顶部启动弹出窗口的滑动.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 2010-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多