(Tips &Tricks)如何为Windows Mobile 创建拨号连接--C#

  简单介绍在Windows Mobile系统上创建网络连接的2种方法。

1 通过用于更改系统配置的API DMProcessConfigXML

2创建的拨号连接的操作,其实是创建一个Phone-Book Entries,并将其存入注册表中。Phone-Book Entries包括一组值,例如用户名,密码,phone number network protocols等,操作系统使用Phone-Book Entries中的值创建RAS 连接。方法二通过RAS API 创建一个Phone-Book Entries,并在注册表中填入相应的项。

 

 方法一: 通过DMProcessConfigXML

 

DMProcessConfigXML是一个用于修改系统配置的API。这个函数接受使用OMA Client Provisioning XML描述的配置信息。

 

  

  [DllImport( " aygshell.dll " )]
        
private   extern   static  UInt32 DMProcessConfigXML( string  xmlIn, UInt32 flag,  out  IntPtr xmlOutPtr);

 

我们只需要将需要建立的拨号连接参数,用指定的XMl格式描述出来,然后传递给它,即可。

 

   IntPtr xmlOutPtr;
   long result;        
   result = DMProcessConfigXML(xml, (uint)flag, out xmlOutPtr);
   System.Diagnostics.Debug.Assert(result == 0);
   //此处一定要释放掉 xmlOutPtr所指向的内存

 

相应的XML示例:

 

< wap-provisioningdoc >

    
< characteristic  type ="CM_GPRSEntries" >

        
< characteristic  type ="我的连接1" >

            
< parm  name ="DestId"  value ="{ADB0B001-10B5-3F39-27C6-

9742E785FCD4}"
/>

            
< parm  name ="CountryCode"  value ="0" />

            
< parm  name ="AreaCode"  value ="" />

            
< parm  name ="Phone"  value ="#777" />

                        
< parm  name ="UserName"  value ="******" />

            
< parm  name ="Password"  value ="******" />

            
< parm  name ="Domain"  value ="" />

            
< parm  name ="DeviceType"  value ="modem" />

            
< parm  name ="DeviceName"  value ="Cellular Line" />

            
< parm  name ="Enabled"  value ="1" />

            
< parm  name ="RequirePw"  value ="1" />

         
</ characteristic >

    
</ characteristic >

</ wap-provisioningdoc >

 

 

上面XML建立了一个名为“我的连接1”的拨号连接.

其中CM_GPRSEntriesConfiguration Service Provider,用于配置网络连接。关于其支持的所有参数,以及详细的XML格式,可以参考MSDN 上的文档

 

此处有一个问题。以上的XML指定了“我的连接1",使用的设备名称为"电话线路(Cellular Line)",可是调用DMProcessConfigXML后,用新创建的连接拨号,提示错误“找不到设备”。开始以为是设备名称有误,但是使用RAS API函数RasGetEntryProperties获取设备名称(通过正常工作的,使用电话线路的连接),得到的名称的确是“Cellular Line”,无奈之下只好用设备的序列号来指定设备。

 

< wap-provisioningdoc >
    
< characteristic  type ="CM_GPRSEntries" >
        
< characteristic  type ="我的连接1" >
            
< parm  name ="DestId"  value ="{ADB0B001-10B5-3F39-27C6-
9742E785FCD4}"
/>
            
< parm  name ="CountryCode"  value ="0" />
            
< parm  name ="AreaCode"  value ="" />
            
< parm  name ="Phone"  value ="#777" />
                        
< parm  name ="UserName"  value ="******" />
            
< parm  name ="Password"  value ="******" />
            
< parm  name ="Domain"  value ="" />
            
< parm  name ="DeviceType"  value ="modem" />
            
< parm  name ="DeviceName"  value ="Cellular Line" />
            
< parm  name ="Enabled"  value ="1" />
            
< parm  name ="RequirePw"  value ="1" />
< parm  name ='DeviceSpecificRAW'
value
='B4010000B4010000B4010000010000000F0000000100000002000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000'
/>

         
</ characteristic >
    
</ characteristic >
</ wap-provisioningdoc >

 

 

设备序列号即注册表目录HKEY_CURRENT_USER/Comm/RasBook/下的值DevCfg

 

 

方法二 通过RAS API

 

      创建的拨号连接的操作,其实是创建一个Phone-Book Entries,并将其存入注册表中。Phone-Book Entries包括一组值,例如用户名,密码,phone number network protocols等,操作系统使用Phone-Book Entries中的值创建RAS 连接。

      我们可以使用Ras Api

 

 [DllImport( " coredll.dll " )]
        
public   static   extern  UInt32 RasGetEntryProperties(
   
string  lpszPhoneBook,
   
string  szEntry,
   IntPtr lpEntry,
   
ref  UInt32 lpdwEntrySize,
    
char [] lpb, ref   uint  dwSize);

 

 

将一个Phone-Book Entries对象保存到注册表里。OpenNETCF有一个类库RAS library ,封装了Ras相关的操作,你可以Codeplex上获取到

 

为了使 RasGetEntryProperties创建的连接可以显示在windows mobile中的设置--系统--连接---管理现有连接里,你需要再注册表中写入一些值。

 

 

            RegistryKey hklm  =  Registry.LocalMachine;
            hklm 
=  hklm.OpenSubKey( " Comm " );
            hklm 
=  hklm.OpenSubKey( " ConnMgr " );
            hklm 
=  hklm.OpenSubKey( " Providers " );
            hklm 
=
            hklm.OpenSubKey(
" {7C4B7A38-5FF7-4bc1-80F6-5DA7870BB1AA} " );
            hklm 
=  hklm.OpenSubKey( " Connections " true );
                   RegistryKey MASCA 
=  hklm.CreateSubKey(lpszName);
            hklm 
=  hklm.OpenSubKey(lpszName,  true );
            hklm.SetValue(
" EntryType " 0 , RegistryValueKind.DWord);
            hklm.SetValue(
" Enabled " 1 , RegistryValueKind.DWord);
            hklm.SetValue(
" RequirePW " 1 , RegistryValueKind.DWord);
            
//   hklm.SetValue("DestId", "{ADB0B001-10B5-3F39-27C6-9742E785FCD4}", RegistryValueKind.String);
            hklm.SetValue( " DestId " " {B8F853C5-2CCF-4CA6-957B-B3A41AC8C9D8} " , RegistryValueKind.String);
           
            hklm.Close();

 

 

又有一个问题(),通过这种方法创建的连接,使用连接管理API函数ConnMgrMapConRef 获取不到它的Connection GUID,

但是在“设置--系统--连接---管理现有连接里”,点击连接,拨号成功,然后才可以获取到Connection Guid .目前尚不知道如何解决这个问题。

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值