Окружающая среда:
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. Note-- Я не могу использовать.NET framework. Должен ли я сделать это через CALLBACK WindowProc? Я действительно не знаю, с чего начать.
Любая помощь будет принята с благодарностью.
Существует множество инструментов, которые позволяют заменить оболочку Windows. Возможно, вам удастся выяснить, как работают эти приложения.
Здесь вы можете увидеть список альтернативных оболочек Windows.
Из того, что я видел, они заменяют explorer.exe своим собственным исполняемым файлом.
Возможно, вы сможете убить explorer.exe при запуске приложения, а затем восстановить его после выхода приложения.
Кроме того, вы можете заблокировать более безопасных пользователей, разместив в своем приложении монитор, который следит за запуском explorer.exe и убивает его. Вам придется иметь дело с другими дырами в области безопасности, такими как доступ к TaskManager или командной строке.
Это опасный подход, если ваше приложение выйдет из строя, система может стать непригодной и может потребовать жесткого силового цикла для его восстановления.
В качестве альтернативы вы можете сделать приложение полноэкранным приложением и заблокировать функции, такие как вкладка alt и ключ Windows. Вы можете сделать это просто с помощью настроек главного окна WindowState для максимизации, TopMost - true и WindowStyle - никому. Затем обработка нажатий клавиш на низком уровне. Это будет охватывать панель задач Windows и предотвращать доступ пользователя к ней до выхода из приложения.
Это уведомление отправляется в приложения. Вы регистрируетесь как один, вызывая SHAppBarMessage
с опцией ABM_NEW
.