在全屏应用程序运行时将Windows任务栏置于前面

时间:2010-06-30 15:28:04

标签: c# winapi

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

我是否可以通过在全屏模式下运行的应用程序显示任务栏?

我尝试了以下操作,但这不是隐藏或取消隐藏任务栏的情况 - 这是将它带到前面或使正在运行的应用程序不是全屏的情况......

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

修改 必须有这样做的方法 - 如果我正在看电影而我的电池电量低,那么任务栏会向上滑动,我会收到有关电池的通知。我需要找出操作系统做什么来获得这种行为......

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

4 个答案:

答案 0 :(得分:1)

如果弹出开始菜单没问题,可以按下窗口按钮。

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

在Windows 7下可以正常使用。

答案 1 :(得分:0)

从纯粹的技术角度来看,这是一个非常有趣的问题。首先想到的是迄今为止不是一个优雅的解决方案,但也许是一个有效的解决方案 - 打开开始菜单:

SendMessage(hAnyWnd, WM_SYSCOMMAND, SC_TASKLIST, 0)

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

(当然,最明显的解决方案是BringWindowToTop(hTaskBar),但似乎没有用。)

答案 2 :(得分:0)

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

SendKeys.Send("{ESC}");

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

答案 3 :(得分:0)

其他解决方案怎么样?

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