Показать всплывающее меню Networks (штучка для подключения к сети) без запуска explorer.exe

Требования:

  1. Наше приложение заменяет обычную оболочку Windows (explorer.exe). Это требование продукта для закрытой системы, которую мы поставляем.
  2. Мы должны позволить пользователю выбрать сеть Wi-Fi и подключиться к ней.

Проблема: диалоговое окно сетей wi-fi появляется только при запущенном explorer.exe.

Что мы пробовали:

  1. Напишем собственный wi-fi менеджер, использующий wlan API. Он перечисляет подключаемые сети и позволяет пользователю подключаться/отключаться. Проблема: слишком много типов/конфигураций сетей, которые нужно тестировать, особенно когда колесо уже изобретено и заново изобретено.

  2. Попробуйте и проверьте, как реализован диалог сетей. Оказывается, это недокументированный COM-интерфейс (IUIRAdioManager). Проблема: это недокументировано, поэтому нет API

  3. Используйте существующий сетевой менеджер, например тот, который поставляется с драйвером. Проблемы: некрасиво, не по вкусу продукту; и это открывает слишком много возможностей для пользователя, таких как создание и загрузка профилей, просмотр файлов в файловой системе - эти вещи неприемлемы.

  4. Запуск explorer.exe только для того, чтобы показать диалоговое окно сети, а затем убить его. Проблема: как только мы запускаем explorer.exe - он открывает вид метро и скрывает наше полноэкранное приложение или показывает панель задач.

Последнее кажется предпочтительным решением: не нужно изобретать велосипед, оно делает то, что нужно. Просто нужно сделать так, чтобы explorer.exe не выскакивал, чтобы он не работал в фоновом режиме.

Итак, у нас остается два варианта:

  1. Как показать всплывающее диалоговое окно сетей без explorer.exe?

  2. Как запустить explorer.exe так, чтобы он не выскочил из метро или панели задач над нашим приложением?


person Yury Korobkin    schedule 30.12.2014    source источник
comment
Я сомневаюсь, что любой из двух ваших вариантов возможен.   -  person Jonathan Potter    schedule 07.01.2015


Ответы (1)


Ваше первое решение было бы невероятно сложно реализовать. Я почти уверен, что окно «Сети» зависит от проводника.

Впрочем, ваш второй вполне возможен.

  1. Чтобы скрыть панель задач, вам нужно будет найти окно (используя FindWindowEx), чтобы найти панель задач (имя Shell_traywnd). Это скроет панель задач и кнопку «Пуск». РЕДАКТИРОВАТЬ: Если вы не реализуете свою собственную панель задач, вы можете настроить автоматическое скрытие панели задач.
  2. Далее вам нужно будет скрыть все программы метро. Аналогичным образом, как описано выше, найдите класс с именем EdgeUiInputWndClass и закройте его. Вы должны иметь возможность получить имя процесса, а затем убить процесс.
  3. Ключ Windows. Это немного сложнее. Вам, вероятно, потребуется использовать программу и удалить клавишу или клавиатурный хук (низкоуровневый клавиатурный хук) и просто игнорируйте нажатия клавиш с тем же скан-кодом, что и клавиша Windows. Левый Windows — 0x5b, правый — 0x5c (источник ). Обратите внимание, что это не заблокирует Ctrl+Alt+Del.
  4. Наконец, чтобы показать всплывающее окно, вы можете запустить %windir%\explorer.exe shell:::{38A98528-6CBF-4CA9-8DC0-B1E1D10F7B1B} (источник). РЕДАКТИРОВАТЬ2:
  5. Вы также должны иметь возможность скрывать всплывающие уведомления через это Конечно, я не понимаю, почему нельзя просто использовать Windows 8/8.1 и поместить приложение в режим киоска.
person IronManMark20    schedule 14.06.2015