Требования:
- Наше приложение заменяет обычную оболочку Windows (explorer.exe). Это требование продукта для закрытой системы, которую мы поставляем.
- Мы должны позволить пользователю выбрать сеть Wi-Fi и подключиться к ней.
Проблема: диалоговое окно сетей wi-fi появляется только при запущенном explorer.exe.
Что мы пробовали:
Напишем собственный wi-fi менеджер, использующий wlan API. Он перечисляет подключаемые сети и позволяет пользователю подключаться/отключаться. Проблема: слишком много типов/конфигураций сетей, которые нужно тестировать, особенно когда колесо уже изобретено и заново изобретено.
Попробуйте и проверьте, как реализован диалог сетей. Оказывается, это недокументированный COM-интерфейс (IUIRAdioManager). Проблема: это недокументировано, поэтому нет API
Используйте существующий сетевой менеджер, например тот, который поставляется с драйвером. Проблемы: некрасиво, не по вкусу продукту; и это открывает слишком много возможностей для пользователя, таких как создание и загрузка профилей, просмотр файлов в файловой системе - эти вещи неприемлемы.
Запуск explorer.exe только для того, чтобы показать диалоговое окно сети, а затем убить его. Проблема: как только мы запускаем explorer.exe - он открывает вид метро и скрывает наше полноэкранное приложение или показывает панель задач.
Последнее кажется предпочтительным решением: не нужно изобретать велосипед, оно делает то, что нужно. Просто нужно сделать так, чтобы explorer.exe не выскакивал, чтобы он не работал в фоновом режиме.
Итак, у нас остается два варианта:
Как показать всплывающее диалоговое окно сетей без explorer.exe?
Как запустить explorer.exe так, чтобы он не выскочил из метро или панели задач над нашим приложением?