在没有运行explorer.exe的情况下显示网络弹出窗口(“连接到网络”的东西)

时间:2014-12-30 17:13:57

标签: windows-8 wifi windows-shell windows-explorer kiosk-mode

要求:

  1. 我们的应用程序取代了通常的Windows shell(explorer.exe)。这是我们提供的封闭系统的产品要求。
  2. 我们应该让用户选择一个Wi-Fi网络并连接到它。
  3. 问题:wi-fi网络对话框仅在explorer.exe运行时显示

    我们尝试了什么:

    1. 编写我们自己的使用wlan API的wi-fi管理器。它列出了可连接的网络,允许用户连接/断开连接。问题:需要测试的网络类型/配置太多,特别是当轮子已经被发明并重新发明时。

    2. 尝试检查网络对话框是如何实现的。它似乎是没有文档的COM接口(IUIRAdioManager)。问题:它没有记录,所以没有API

    3. 使用现有的网络管理器,例如驱动程序附带的网络管理器。问题:它很难看,不符合产品的味道;它为用户打开了太多选项,比如创建和加载配置文件,浏览文件系统上的文件 - 这些都是不可接受的。

    4. 运行explorer.exe只是为了显示网络对话框,然后将其删除。问题:一旦我们运行explorer.exe - 它会弹出metro视图并隐藏我们的全屏应用程序或显示任务栏。

    5. 后者似乎是首选的解决方案:无需重新发明轮子,它可以满足需要。只是让explorer.exe不会弹出,在后台保持安静。

      因此,我们有两个选择:

      1. 如何在没有explorer.exe的情况下显示网络弹出对话框?

      2. 如何运行explorer.exe而不会弹出我们应用程序上方的地铁或任务栏?

1 个答案:

答案 0 :(得分:0)

您的第一个解决方案难以实施。我几乎可以肯定网络窗口依赖于资源管理器。

然而,你的第二个是完全可能的。

  1. 要隐藏任务栏,您需要找到一个窗口(使用FindWindowEx)来查找任务栏(名称为Shell_traywnd)。这将隐藏任务栏和开始按钮。编辑:除非您正在实现自己的任务栏,否则您可能希望将任务栏设置为自动隐藏。
  2. 接下来,您需要隐藏所有地铁计划。以与上面类似的方式,找到名为EdgeUiInputWndClass的类并关闭它。您应该能够获取它的进程名称,然后终止进程。
  3. Windows键。这有点困难。您可能需要使用program并删除键或键盘挂钩(低级键盘挂钩),并忽略使用与Windows键相同扫描码的按键。左窗口是0x5b,右边是0x5c(source)。请注意,这不会阻止 Ctrl + Alt + Del
  4. 最后,要显示弹出窗口,您可以运行%windir%\explorer.exe shell:::{38A98528-6CBF-4CA9-8DC0-B1E1D10F7B1B} source)。 EDIT2:
  5. 您还应该能够通过this隐藏举报通知 当然,我不明白为什么你不能只使用Windows 8 / 8.1并将应用程序放在kiosk mode中。