4

在 Windows Mobile 中,当您打开 Internet Explorer 并输入您的设备无法连接的 URL 时,您会收到通知并提示您(手动)导航到您可以作为用户实际执行此操作的屏幕(网络管理),像这样:

替代文字 http://www.freeimagehosting.net/uploads/d3d95e00d2.gif

但是,如果 .NET Compact Framework 应用程序尝试连接到 Web 服务并且无法访问 Web 服务 URL,则不会出现“无法连接”气泡,而是对 Web 服务的调用失败。有时我们最终会通过电话与客户交谈

替代文字 http://www.freeimagehosting.net/uploads/e74a0d4230.gif

然后他们还有两个步骤要走。

问题 1:是否可以以编程方式控制(在 C# 中)网络管理屏幕上的两个 ComboBox 的设置?

通常解决客户的连接问题涉及摆弄这两个盒子,直到它们可以连接。问题在于,由于客户可以自己在这里自由更改他们的网络内容,我经常不知道该告诉他们将其设置为什么(“它说明了什么?”这是我经常说的话)。到目前为止,从我的搜索来看,DMProcessConfigXML 似乎是这样做的方式,但到目前为止我所知道的是您调用此方法并传递一些 XML。

问题 2:是否可以通过编程方式(C#)触发“无法连接”气泡,或者更好的是是否可以通过编程方式使网络管理屏幕立即出现?

据推测,如果我的代码看不到 web 服务 URL,它可能会触发气泡或直接进入屏幕。

4

2 回答 2

3

在回答您的问题 2 时,此代码将显示连接控制面板:

Process.Start(@"\windows\ctlpnl.exe", "cplmain.cpl,19");

许多内置设置小程序通过 ctlpnl.exe 显示。我从这里的列表中获得了幻数,不确定它是否有帮助,因为您仍然需要指导用户完成其余的通信设置。

关于您的问题 1,我使用了 DMProcessConfigXML 和配置管理器设置 cabs 来配置通信设置(诚然来自 c++,但查看 api 它应该很容易按照 Shane 的建议进行 p/invoke)。这是不久前的事了,所以我现在手头没有任何示例,但我们确实可以进行新的网络设置并切换这些下拉菜单以选择新设置。稍后我会看看是否可以挖掘出 XML 的示例。

似乎不需要 P/Invoke,ConfigurationManager.ProcessConfiguration是 Microsoft.WindowsMo​​bile 命名空间中调用 DMProcessConfigXML 的托管包装器。

我仍在寻找要发送给它的正确 xml,很可能是 CM_Networks、CM_Planner 和其他一些组合的某种组合......细节都在这里,但文档有点棘手,无法弄清楚什么是什么,我可以'不记得了,因为那是很久以前的事了:(

好的,经过一些试验(因为我没有找到 xml),这里有一些 xml,您可以将其传递给 ConfigurationManager.ProcessConfiguration 来更改这两个设置:

<wap-provisioningdoc>
  <characteristic type="CM_ProxyEntries">
    <characteristic type="HTTP-{ADB0B001-10B5-3F39-27C6-9742E785FCD4}">
      <parm name="SrcId" value="{ADB0B001-10B5-3F39-27C6-9742E785FCD4}" options="My Work Network{18AD9FBD-F716-ACB6-FD8A-1965DB95B814}My ISP{ADB0B001-10B5-3F39-27C6-9742E785FCD4}Work{A1182988-0D73-439E-87AD-2A5B369F808B}Secure WAP Network{F28D1F74-72BE-4394-A4A7-4E296219390C}The WAP Network{7022E968-5A97-4051-BC1C-C578E2FBA5D9}The Internet{436EF144-B4FB-4863-A041-8F905A62C572}" />
      <parm name="DestId" value="{436EF144-B4FB-4863-A041-8F905A62C572}" options="My Work Network{18AD9FBD-F716-ACB6-FD8A-1965DB95B814}My ISP{ADB0B001-10B5-3F39-27C6-9742E785FCD4}Work{A1182988-0D73-439E-87AD-2A5B369F808B}Secure WAP Network{F28D1F74-72BE-4394-A4A7-4E296219390C}The WAP Network{7022E968-5A97-4051-BC1C-C578E2FBA5D9}The Internet{436EF144-B4FB-4863-A041-8F905A62C572}" />
      <parm name="Proxy" value="new-inet:1159" />
      <parm name="Override" value="" />
      <parm name="Enable" value="1" />
      <parm name="Type" value="0" />
      <parm name="Username" value="" />
      <parm name="Password" value="" />
      <parm name="ExtraInfo" value="" />
    </characteristic>
    <characteristic type="null-corp-{ADB0B001-10B5-3F39-27C6-9742E785FCD4}">
      <parm name="SrcId" value="{ADB0B001-10B5-3F39-27C6-9742E785FCD4}" options="My Work Network{18AD9FBD-F716-ACB6-FD8A-1965DB95B814}My ISP{ADB0B001-10B5-3F39-27C6-9742E785FCD4}Work{A1182988-0D73-439E-87AD-2A5B369F808B}Secure WAP Network{F28D1F74-72BE-4394-A4A7-4E296219390C}The WAP Network{7022E968-5A97-4051-BC1C-C578E2FBA5D9}The Internet{436EF144-B4FB-4863-A041-8F905A62C572}" />
      <parm name="DestId" value="{A1182988-0D73-439E-87AD-2A5B369F808B}" options="My Work Network{18AD9FBD-F716-ACB6-FD8A-1965DB95B814}My ISP{ADB0B001-10B5-3F39-27C6-9742E785FCD4}Work{A1182988-0D73-439E-87AD-2A5B369F808B}Secure WAP Network{F28D1F74-72BE-4394-A4A7-4E296219390C}The WAP Network{7022E968-5A97-4051-BC1C-C578E2FBA5D9}The Internet{436EF144-B4FB-4863-A041-8F905A62C572}" />
      <parm name="Proxy" value="" />
      <parm name="Override" value="" />
      <parm name="Enable" value="1" />
      <parm name="Type" value="0" />
      <parm name="Username" value="" />
      <parm name="Password" value="" />
      <parm name="ExtraInfo" value="" />
    </characteristic>
  </characteristic>
  </wap-provisioningdoc>

这是从我的 wm 6 pro 模拟器中获取的,因此您可能需要稍微调整一下设置。它将两个下拉菜单都设置为我的 ISP(ADB0B001-10B5-3F39-27C6-9742E785FCD4 guid)只需更改 type="HTTP-xxxx" 和 type="null-corp-xxxx" 中的 guid 并确保它在srcId 参数也是。

我用这个 xml(元数据设置为 true)调用 ProcessConfiguration 以获取所有已配置条目的列表,它在 xml 文档中返回它们。

<wap-provisioningdoc>
  <characteristic-query type="CM_Mappings" recursive="true"/>
  <characteristic-query type="CM_Planner" recursive="true"/>
  <characteristic-query type="CM_Networks" recursive="true"/>
  <characteristic-query type="CM_ProxyEntries" recursive="true"/>
  <characteristic-query type="Wi-Fi" recursive="true"/>
  <characteristic-query type="CM_PPPEntries" recursive="true"/>
  <characteristic-query type="CM_VPNEntries" recursive="true"/>
  <characteristic-query type="CM_NetEntries" recursive="true"/>
  <characteristic-query type="CM_GPRSEntries" recursive="true"/>
</wap-provisioningdoc>

您可以使用它来查看 guid 和设置是什么,或者查看 WM sdk 中的包含文件,因为它们在那里列出以与连接管理器 api 一起使用。

一个警告是我在弄乱它们之后没有尝试使用这些连接,但是当你处理配置时 UI 确实会改变

于 2010-03-10T23:40:35.480 回答
2

您需要使用Connection Manager API 来建立连接。实际上,您可以设置一个标志来停止错误通知!

是一篇关于如何在 wininet 中使用连接管理器的文章。我假设您将不得不 P/Invoke API。

我的一个建议是尽可能抽象地使用连接管理器,并尽可能少地使用它。连接管理器使用起来不是很好,我相信当前的界面将在未来版本的 Windows Mobile 中被删除。

更新:

从本机代码调用DMProcessConfigXML非常简单。我再次假设这个函数在 C# 中的 P/Invoke 应该不会太糟糕。按照链接查看调用此 DMProcessConfigXML 的简单示例。had 部分是从 microsoft 文档中找出您要发送的 xml。

您基本上需要在可以配置的任何区域中查看配置服务提供商MSDN 文档。如果您正在研究网络设置,我个人不会打扰。这是一个大麻烦,实际上仅对为特定移动运营商和/或公司网络 WIFI 设置设置代理设置有用。如果您想设置通用的 GPRS / Wifi 连接,这并不容易。

更新2:我应该更仔细地阅读这个问题,我相信“修改网络选项”的答案是否定的,但创建全新的网络设置的答案是“是的”。那是如果我正确理解规范。我只玩过设置网络。

希望有帮助。

于 2008-11-19T05:13:03.463 回答