环境:
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执行此操作吗?我真的不知道从哪里开始。
如有任何帮助,我们将不胜感激。
此通知将发送到appbars。您可以通过使用ABM_NEW
选项调用SHAppBarMessage
来注册为一体。
有许多工具可以用来替换windows shell。您也许能够弄清楚这些应用程序是如何工作的
您可以在此处看到替代窗口外壳的列表。
据我所见,他们用自己的可执行文件替换explorer.exe
您可以在启动应用程序时终止explorer.exe,然后在应用程序退出后恢复它。
此外,你可以在应用程序中放置一个监视器,监视explorer.exe的启动并杀死它,从而锁定更多精明的用户。你必须处理其他安全漏洞,例如访问TaskManager或命令提示符。
这是一种危险的方法,如果您的应用程序崩溃,系统可能会变得不可用,并且可能需要硬电源循环才能恢复。
或者您可以将应用程序设置为全屏应用程序,并使其锁定alt选项卡和windows键等功能。只需将主窗口的WindowState设置为最大化,TopMost设置为true,WindowStyle设置为none,就可以实现这一点。然后在低级别处理按键。这将覆盖您的windows任务栏,并阻止用户在退出应用程序之前访问它。