【问题标题】:Bring Windows Taskbar to front when a fullscreen application is running运行全屏应用程序时将 Windows 任务栏置于最前面
【发布时间】:2010-06-30 15:28:04
【问题描述】:

我有一个应用程序,我在其中使用通知图标来显示一些气球提示。但是,它将在始终有一个单独的主应用程序以全屏模式运行的环境中运行。我的问题是让任务栏出现在前面 - 我认为当系统托盘中的通知图标上出现气球提示时它会自动出现。

我可以让任务栏在全屏模式下运行的应用上可见吗?

我尝试了以下方法,但这不是隐藏或取消隐藏任务栏的情况 - 这是将其置于最前面或使正在运行的应用程序不是全屏的情况...

int TaskBarHwnd = FindWindow("Shell_traywnd", "");
bool result1 = SetWindowPos(TaskBarHwnd, 0, 0, 0, 0, 0, SWP_HIDEWINDOW);   // Hide Taskbar
bool result1 = SetWindowPos(TaskBarHwnd, 0, 0, 0, 0, 0, SWP_SHOWWINDOW); // Show Taskbar

编辑 一定有办法做到这一点 - 如果我正在看电影并且我的电池电量不足,那么任务栏会向上滑动并且我会收到有关电池的通知。我需要找出操作系统做了什么来获得这种行为......

编辑 值得一提的是,全屏应用的源代码在我们的控制之下。这确实改变了公平问题,但我仍然想知道一种“中断”全屏应用程序的方法,无论您是否有控制权。

【问题讨论】:

  • 通知不应在全屏应用上显示 - 我不希望它们打断我的演示或电影。
  • 感谢迈克尔的回复,但不要告诉我您在看电影时的偏好是什么等。您能回答提出的问题吗?如果您再次阅读该问题,我不会问是否应该这样做,我会问是否可以这样做。谢谢。
  • 对不起,我有点太微妙了。通知不应显示在全屏应用程序上,系统确实会主动尝试阻止此类行为,这就是您遇到问题的原因。
  • 好的,这很公平,也很有意义——一个好的操作系统应该阻止这样的事情,为清除它而欢呼。在这种情况下,全屏应用程序在专有手持设备上运行,其唯一目的是运行该应用程序。然而,当有可用更新时,第二个应用程序应该显示通知 - 这些在全屏后会丢失......
  • 我现在在想(在阅读了很多内容之后)自定义控件——比如半透明的 winform——在这里会是一个更好的解决方案......

标签: c# winapi


【解决方案1】:

如果弹出开始菜单没有问题,那么您可以按下 windows 按钮。

keybd_event(VK_LWIN, 0, 0, 0);
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);

在 Windows 7 下工作正常。

【讨论】:

  • 这是一个可行的解决方案,但我已经选择了发送 ESC 键的选项。无论如何,这是预期的行为 - 全屏应用通过退出全屏模式来响应 ESC 键。
【解决方案2】:

从纯技术的角度来看,这是一个非常有趣的问题。首先想到的不是一个优雅的解决方案,而是一个可行的解决方案——打开开始菜单:

SendMessage(hAnyWnd, WM_SYSCOMMAND, SC_TASKLIST, 0)

我会看看我是否可以找到其他解决方案。

(嗯,最明显的解决方案当然是BringWindowToTop(hTaskBar),但这似乎行不通。)

【讨论】:

    【解决方案3】:

    我现在正在考虑的一种方法是从我的 notifyicon 应用程序发送转义键。

    SendKeys.Send("{ESC}");
    

    这作为全屏应用程序的标准行为通常是在键盘上按下转义键时退出全屏模式。我仍然认为这不是最好的解决方案,因为如果用户正在做其他事情,有时强制 ESC 可能会产生副作用......但它很可能“足够好”

    【讨论】:

      【解决方案4】:

      其他解决方案怎么样?

      不使主应用全屏:它将覆盖整个屏幕视图,但默认情况下任务栏始终位于的区域除外。如果任务栏重新定位到另一侧,操作系统会通知应用程序刷新其窗口大小,但它始终会避开新的任务栏区域。最坏的情况是任务栏设置为自动隐藏。不过看起来不会那么好看。

      【讨论】:

      • 在我的情况下,应用程序需要全屏才能获得尽可能多的屏幕空间 - 这是没有商量余地的!
      • 如何将 Windows 任务栏的属性设置为始终在前面(通过右键单击任务栏的属性并将其设置在其他窗口选项的顶部)?它总是会使系统托盘图标中的任何通知气球也出现在前面。在我的情况下,任务栏始终被锁定并且不会自动隐藏。
      • 在全屏模式下运行的应用程序仍会出现在包括任务栏在内的所有其他窗口上,因此尽管通知仍会发生,但不会被看到。
      猜你喜欢
      • 1970-01-01
      • 2011-09-12
      • 2011-11-03
      • 2017-04-20
      • 2010-11-02
      • 2011-05-16
      • 1970-01-01
      • 2013-03-28
      • 2020-02-06
      相关资源
      最近更新 更多