Windows Mobile中GPRS连接网络
2008-09-27 11:48
274 查看
Windows Mobile程序中如果要使用http或socket连接服务器,需要先连接网络。可以使用ConnMgrEstablishConnectionSync函数来连接。
DWORD dwStatus = 0;
HANDLE hConnection = NULL;
CONNMGR_CONNECTIONINFO sConInfo;
memset(&sConInfo, 0 ,sizeof(CONNMGR_CONNECTIONINFO));
sConInfo.cbSize = sizeof(CONNMGR_CONNECTIONINFO);
sConInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
sConInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;
sConInfo.dwFlags = CONNMGR_FLAG_PROXY_HTTP
|CONNMGR_FLAG_PROXY_WAP
|CONNMGR_FLAG_PROXY_SOCKS4
|CONNMGR_FLAG_PROXY_SOCKS5;
sConInfo.bExclusive = FALSE;
sConInfo.bDisabled = FALSE;
sConInfo.guidDestNet = IID_DestNetWAP;
ConnMgrEstablishConnectionSync(&sConInfo, &hConnection, 15000, &dwStatus);
如果知道一个接入点的名称,则可以通过ConnMgrEnumDestinations得到相应接入点的guidDestNet。然后可以使用底层的INET接口连接HTTP了。完了吗?没有。还有个问题:代理服务器。我们都知道,移动的CMNET不需要代理,CMWAP则需要。接入点中可能含有代理服务器信息,而且接入类型包括HTTP、WAP、安全WAP、Socks等等,每一种都可能需要不同的代理。不要奢望ConnMgrEnumDestinations函数可以得到这么多的东东。
事实上,微软是提供了一个函数的,这就是传说中的ConnMgrProviderMessage。怎么样,这下总该圆满了吧?...还没完,接着往下走。
我测的结果,在真机上,这个函数从来没有成功过,Never。郁闷之极。与签名有关吗?未可知。
正面强攻不行。打枪的不要,悄悄的进村。我们来看看手机的注册表。在HKEY_LOCAL_MACHINE/Comm/ConnMgr项下,有详细的接入点的信息。Destinations子项下列出了手机所有的接入点,相应的键值有DestId这一项。我们的目光再跳到与ConnMgr平级的Providers项,也有很多信息,其中一子项{EF097F4C-DC4B-4c98-8FF6-AEF805DC0E8E},快接近我们要的宝贝了。该项有很多子项,我们遍历每一项,直到找到一个键值SrcId与我们上面说的DestId相等。看到了吧,与SrcId平级的键值有很多,不过我们目前需要的就那么两项,Type和Proxy。Type就是上面说的接入类型(HTTP、WAP、安全WAP、Socks等),而Proxy正是我们凄凄惨惨戚戚寻寻觅觅的一串字符。
以上是Windows Mobile5.0的结果。在Pocket PC2003和Smartphone2003中,HKEY_LOCAL_MACHINE/Comm/ConnMgr对应为HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/ConnMgr。
至此,寻宝经历告一段落。
来源:http://blog.csdn.net/pknife/archive/2008/05/21/2467602.aspx
DWORD dwStatus = 0;
HANDLE hConnection = NULL;
CONNMGR_CONNECTIONINFO sConInfo;
memset(&sConInfo, 0 ,sizeof(CONNMGR_CONNECTIONINFO));
sConInfo.cbSize = sizeof(CONNMGR_CONNECTIONINFO);
sConInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
sConInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;
sConInfo.dwFlags = CONNMGR_FLAG_PROXY_HTTP
|CONNMGR_FLAG_PROXY_WAP
|CONNMGR_FLAG_PROXY_SOCKS4
|CONNMGR_FLAG_PROXY_SOCKS5;
sConInfo.bExclusive = FALSE;
sConInfo.bDisabled = FALSE;
sConInfo.guidDestNet = IID_DestNetWAP;
ConnMgrEstablishConnectionSync(&sConInfo, &hConnection, 15000, &dwStatus);
如果知道一个接入点的名称,则可以通过ConnMgrEnumDestinations得到相应接入点的guidDestNet。然后可以使用底层的INET接口连接HTTP了。完了吗?没有。还有个问题:代理服务器。我们都知道,移动的CMNET不需要代理,CMWAP则需要。接入点中可能含有代理服务器信息,而且接入类型包括HTTP、WAP、安全WAP、Socks等等,每一种都可能需要不同的代理。不要奢望ConnMgrEnumDestinations函数可以得到这么多的东东。
事实上,微软是提供了一个函数的,这就是传说中的ConnMgrProviderMessage。怎么样,这下总该圆满了吧?...还没完,接着往下走。
我测的结果,在真机上,这个函数从来没有成功过,Never。郁闷之极。与签名有关吗?未可知。
正面强攻不行。打枪的不要,悄悄的进村。我们来看看手机的注册表。在HKEY_LOCAL_MACHINE/Comm/ConnMgr项下,有详细的接入点的信息。Destinations子项下列出了手机所有的接入点,相应的键值有DestId这一项。我们的目光再跳到与ConnMgr平级的Providers项,也有很多信息,其中一子项{EF097F4C-DC4B-4c98-8FF6-AEF805DC0E8E},快接近我们要的宝贝了。该项有很多子项,我们遍历每一项,直到找到一个键值SrcId与我们上面说的DestId相等。看到了吧,与SrcId平级的键值有很多,不过我们目前需要的就那么两项,Type和Proxy。Type就是上面说的接入类型(HTTP、WAP、安全WAP、Socks等),而Proxy正是我们凄凄惨惨戚戚寻寻觅觅的一串字符。
以上是Windows Mobile5.0的结果。在Pocket PC2003和Smartphone2003中,HKEY_LOCAL_MACHINE/Comm/ConnMgr对应为HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/ConnMgr。
至此,寻宝经历告一段落。
来源:http://blog.csdn.net/pknife/archive/2008/05/21/2467602.aspx
相关文章推荐
- Windows Mobile手机连接GPRS或者CDMA网络(用C# .NET开发)
- Windows Mobile中GPRS连接网络
- PPC Windows Mobile判断网络(gprs)连接与否代码
- Windows Mobile中GPRS连接网络
- Windows Mobile中GPRS连接网络
- PPC Windows Mobile判断网络(gprs)连接与否代码
- 【C#】Windows Mobile 通过代码设置GPRS连接,设置网络与接入点
- Windows Mobile中GPRS连接网络
- Windows Mobile中GPRS连接网络
- Windows Mobile手机连接GPRS或者CDMA网络(用C# .NET开发)
- Windows Mobile中GPRS连接网络
- Windows Mobile 模拟器网络连接设置
- 使用GPRS的cmwap接入点实现网络通讯1-----建立连接
- Windows Mobile中如何建立GPRS连接以便Socket能正常通信
- Windows Mobile Gprs连接与数据传输
- 浅谈mtk平台手机通过gprs网络连接pc
- Windows Mobile 2005网络连接之真机和模拟器的异同
- 【转】Windows Mobile中如何建立GPRS连接以便Socket能正常通信
- 确保Windows Mobile通过GPRS连接CMNET成功的办法(附源码)
- Windows Mobile,用C#更改网络连接(SSID、IP Address、Subnet Mask、Gatew... (转)