2010-06-30 78 views
0

我有一个应用程序,我使用notifyicon显示一些气球提示。但是,它将在总是以全屏模式运行的独立主应用程序的环境中运行。我的问题是将任务栏放在最前面 - 我认为它会在系统托盘中的notifyicon上出现气球提示时自动启动。当全屏应用程序运行时,将Windows任务栏放在前面

我可以通过在全屏模式下运行的应用程序使任务栏变为可见吗?

我曾尝试以下,但是它不是隐藏的情况下,或取消隐藏任务栏 - 这是它为大家带来前方或使正在运行的应用程序不是全屏的情况下...

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 

编辑 必须有一种方法做到这一点 - 如果我正在看一部电影,而且电池电量不足,那么任务栏会滑动,然后我会收到有关电池的通知。我需要找出操作系统确实得到这种行为......

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

+0

通知不应该在显示全屏幕应用程序 - 我不想让他们打断我的发言或我的电影。 – Michael 2010-06-30 15:33:16

+0

欣赏迈克尔的回应,而不是告诉我当你看电影时你的偏好是什么,你能提供一个回答所提出的问题吗?如果你再次读到这个问题,我不问是否应该完成,我问是否可以完成。谢谢。 – 2010-06-30 17:38:44

+0

对不起,我有点太微妙了。通知不应该在全屏应用上显示,而且系统会主动阻止此类行为,这就是您遇到问题的原因。 – Michael 2010-06-30 18:16:57

回答

0

一种方式是通过发送从我的NotifyIcon ESC键应用程序。

SendKeys.Send("{ESC}"); 

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

0

从纯粹的技术角度来看,这是一个非常有趣的问题。 ,想到的第一件事是远远不是一个完美的解决方案,但也许是一个有效方法 - 打开开始菜单:

SendMessage(hAnyWnd, WM_SYSCOMMAND, SC_TASKLIST, 0) 

我会看看我能找到另一种解决方案。

(当然,最明显的解决方案,当然,是BringWindowToTop(hTaskBar),但似乎没有工作。)我现在在看做

+0

感谢您的努力。这是一个有趣的问题,我同意! – 2010-07-01 16:52:42

0

如何另一种解决方案?

不使主应用程序全屏:它将覆盖整个屏幕视图,但默认情况下任务栏总是处于定位的区域。如果任务栏重新定位到另一侧,OS将通知应用程序刷新其窗口大小,但它总是会避免新的任务栏区域。最糟糕的情况是当任务栏设置为自动隐藏时。虽然它看起来不太好看。

+0

在我的情况下,应用程序需要全屏才能获得最大的屏幕空间 - 这是不容易的! – 2010-07-02 09:21:12

+0

将Windows任务栏的属性设置为始终在前面(通过右键单击任务栏的属性并将其设置为其他窗口选项的顶部),该如何操作? 它会始终使系统托盘图标中的任何通知气球出现在前面。就我而言,任务栏始终处于锁定状态,不会自动隐藏。 – eee 2010-07-02 09:33:23

+0

以全屏模式运行的应用程序仍将显示在包括任务栏在内的所有其他窗口上,因此虽然通知仍会发生,但不会显示。 – 2010-07-02 09:56:10

1

如果没有问题,开始菜单将弹出比您可以按窗口按钮。在Windows 7对我来说

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

工作正常

+0

这是一个可行的解决方案,但我已经选择了发送ESC键。无论如何,这是预期的行为 - 全屏应用程序通过退出全屏模式来响应ESC键。 – 2010-07-22 16:12:24