VC下利用windows API进行modem拨号

 

1.       API, RasValidateEntryName, RasGetEntryProperties, RasSetEntryProperties, RasEnumEntriesRasSetEntryDialParams, RasDial, RasHangUpRasDialFunc

2.       Process,

a)         CreatePhoneBookEntry:

                         i.              DWORD RasValidateEntryName(LPCTSTR lpszPhonebook, LPCTSTR lpszEntry), 确定所要创建的DUN Name是否合法或是否已经存在.

                       ii.              DWORD RasSetEntryProperties(LPCTSTR lpszPhonebook,LPCTSTR lpszEntry,LPRASENTRY lpRasEntry,DWORD dwEntryInfoSize,LPBYTE lpbDeviceInfo,DWORD dwDeviceInfoSize),按照一定属性配置创建一个新的DUN, 其中较为需要关注的是lpRasEntry, dwEntryInfoSize,两个参数;示例中lpRasEntry-> dwfOptions0x3d2d0218,而dwEntryInfoSizelpRasEntry-> dwSize均通过函数RasGetEntryProperties获得(其参数中,除lpdwEntryInfoSize外,其它参数均传入NULL)

b)        SetPhbProperty/UpdatePhbProperty,使用函数DWORD RasEnumEntries(LPCTSTR reserved,LPCTSTR lpszPhonebook,LPRASENTRYNAME lprasentryname,LPDWORD lpcb,LPDWORD lpcEntries);枚举并找到特定的phb entry, 由此得到相应phk文件内对应的配置项(通常phk文件为alluserappdata目录下//Microsoft//Network//Connections//Pbk//rasphone.pbk),通过修改这些配置项的方式,设置DUN的属性,比如WritePrivateProfileString(PhbEntryName, ShowMonitorIconInTaskBar, 1, PhkFilePath);为设置连接成功时系统托盘上显示网络连接图标。主要需要设置的为modem设备名,相应COM口号等。另一种更简单的方式是通过RasSetEntryProperties函数修改。

c)        Connect:

                         i.              DWORD RasDial(LPRASDIALEXTENSIONS lpRasDialExtensions,LPCTSTR lpszPhonebook,LPRASDIALPARAMS lpRasDialParams,DWORD dwNotifierType,LPVOID lpvNotifier,LPHRASCONN lphRasConn);通过之前创建的DUN发起拨号,可以通过参数lpRasDialParams临时修改number, user, psw等参数;lpvNotifier用来指定处理连接过程中的状态和事件的回调函数,其定义必须为void CALLBACK RasDialFunc(UINT unMsg,RASCONNSTATE rasconnstate,DWORD dwError);

                       ii.              连接成功时,系统将通过lphRasConn返回一个句柄,可通过这个句柄对该连接进行操作,比如hang up.

d)        Process connect state/event,回调函数void CALLBACK RasDialFunc(UINT unMsg,RASCONNSTATE rasconnstate,DWORD dwError)将获得OS传回的拨号状态,拨号成功或失败后将停止

e)         Disconnect, 函数DWORD RasHangUp(HRASCONN hrasconn);其中参数hrasconn通过RasDial函数传出的参数lphRasConn获得(This is a handle returned from a previous call to RasDial or RasEnumConnections.)。由于该函数返回并不意味着hang up动作完成,所以推荐通过以下代码来确认之后,再退出程序(或者继续进行下面流程)。

    while(RasGetConnectStatus(m_hRasConn, &rascnnstatus) != ERROR_INVALID_HANDLE)

    {

        ::Sleep(0);

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值