2014-02-12 23 views
0

环境:监控Windows任务栏中显示statechange使用Win32

的Windows 7

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

简短而亲切的目标:

确保Windows任务栏永远不可见。

详情:

我希望能够为窗口的事件ABN_STATECHANGE注册,如果被触发的情况下,禁用和隐藏任务栏。

我能做到后者很容易地:

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

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

但是我不知道如何使用Win32捕捉到任务栏stateChange事件。注意 - 我无法使用.NET框架。我应该通过CALLBACK WindowProc来做到这一点吗?我真的不知道从哪里开始。

任何帮助将不胜感激。

+0

应用程序需要允许用户访问任务栏。否则,用户被困。 –

+0

是的,其目的是防止用户进入任务栏并将其困住。我们正在一个相当独特的环境中工作,用户应该被锁定到我们的应用程序中,直到应用程序关闭。 – user1211653

+0

对不起,任务栏不支持执行此操作的功能,因为它具有始终可用的原则。如果这是一个特殊用途的系统,则可以完全使用备用外壳。如果您选择做不受支持的事情,请确保您的客户了解它可能随时停止工作。 (例如,安全修补程序可能会破坏它。) –

回答

0

该通知发送到appbars。您可以通过拨打SHAppBarMessageABM_NEW选项注册为一个。

+0

嗯,好吧 - 阅读了更多有关应用程序的信息之后,看起来这与Windows任务栏不一样,对吗?是否有Windows事件来跟踪Windows任务栏的可见性? – user1211653

+0

我不确定Windows事件是什么意思。应用程序通知任务栏的位置和外观,因为它们经常需要彼此协调。如果你想要这些通知,你需要注册你的窗口作为一个应用栏(它不一定真的可见)。我不知道此信息的任何其他来源。 –

+0

我想我们正在谈论两件不同的事情。它在MSDN上说: 应用程序桌面工具栏(也称为appbar)是一个类似于Windows任务栏的窗口。 我认为我们正在谈论两件不同的事情。我希望能够通过检测Windows事件来让Windows任务栏自动重新出现,以通知系统该任务栏已出现并使其消失。 – user1211653

0

有许多工具,让您以取代Windows外壳。你可能会弄清楚这些应用程序是如何工作的。
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任务栏,并阻止用户访问它,直到它们退出应用程序。

相关问题