使用win32监视Windows TaskBar状态更改

时间:2014-02-12 19:06:54

标签: c++ windows visual-c++

环境:

Windows 7

Visual Studio(2008)C ++(无.NET)

简短而甜蜜的目标:

确保永远不会显示Windows任务栏。

详细信息:

我希望能够注册Window的事件ABN_STATECHANGE,如果事件被触发,请禁用并隐藏任务栏。

我很容易做到后者:

CWnd *Wnd;
Wnd = CWnd::FindWindow("Shell_TrayWnd", NULL);

Wnd -> ShowWindow(SW_HIDE);
Wnd -> EnableWindow(false);

但是我不确定如何使用win32捕获任务栏状态转换事件。注意 - 我不能使用.NET框架。我应该通过CALLBACK WindowProc来做到这一点吗?我真的不知道从哪里开始。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

此通知已发送至appbars。您可以使用ABM_NEW选项致电SHAppBarMessage注册为一个。

答案 1 :(得分:0)

有许多工具可以让你替换windows shell。您可能能够弄清楚这些应用程序是如何工作的 You can see a list of alternative windows shells here.

根据我所见,他们用自己的可执行文件替换explorer.exe 您可以在启动应用程序时终止explorer.exe,然后在应用程序退出后恢复它。

此外,您可以通过在应用程序中放置一个监视器来监视更多精明的用户,该监视器会监视explorer.exe的启动并将其杀死。您必须处理其他安全循环漏洞,例如访问TaskManager或命令提示符。

这是一种危险的方法,如果您的应用程序崩溃,系统可能会无法使用,并且可能需要硬启动才能恢复它。

或者你可以让你的应用程序成为一个全屏应用程序,并让它锁定alt选项卡和windows键等功能。 您只需将主窗口的WindowState设置为最大化,将TopMost设置为true,将WindowStyle设置为none即可。然后处理低水平的按键。 这将覆盖您的Windows任务栏,并阻止用户访问它,直到他们退出应用程序。

相关问题