大家知道,在 netants、download expert 等软件中都带有定时拨号上网下载软件的功能。而
一般用户的拨号上网,利用的是 windows 的 remote ACCESS service(ras,远程访问服务)。
下面介绍一下其在 visual c++下的实现。
visual c++为我们提供了包含 ras api 声明的“ras.h″头文件。要在程式中实现拨号上网
功能,其大致过程如下:
1. 利用 modem 拨号进行连接,应使用 rasdial 函数。
其声明如下:
dword ras dial(lprasdialextensions lpras dialextensions,lpctstr
lpszphonebook,lprasdialparams lp ras dialparams,dword dw notifier type,lpvoid lpv notifier,
lphrasconn lph ras conn )
参数说明:
lprasdialextensions 和 lpszphonebook:仅在 windows nt 下有效,在 windows 95 下,这两
个参数被忽略。
lprasdialparams:这个参数非常重要,他指向一个 rasdialparams 结构,该结构包含以下
几个成员:
dwsize:应设定为 sizeof(rasdialparams);
szentryname 和 szphonenumber:这两个参数有联系,szentryname 能指定要建立的连接,
比方说“我的连接”等等,这是处 理用户已在“拨号网络”里建立的连接的。这时,modem 将
拨打你在“我的连接”中设定的 isp 号码,此时 szphonenumber 成员设为空字符串 “”即可;如
果你要在程式中自行指定要拨打的 isp 号码的话,szentryname 能设定为空字符串“”,此时应
设置 szphonenumber 为你的 isp 号码(169,663 等),特别的,对于用 201 电话卡来上网的
情况,能设为“201,,,账号,密码#,,isp 号码#”(其中“,”表示停顿一 段时间(以等待确
认 账 号 , 密 码 等 ) , 你 能 根 据 自 己 所 在 位 置 的 线 路 状 况 自 行 调 节 。
szcallbacknumber,szdomain:设为空串“”即可。 szusername,szpassword:登录用户名和密
码。如 169 公用账号 guest,guest。
其他成员不必设置。
dwnotifiertype:指定是由窗口还是由回调函数来处理确认消息。通过确认消息我们能
得到 rasdial 过程的当前状态。如“正在打开段口”,“正在验证用户名和密码”等。也可设为
null。 dwnotifier:指定处理确认消息的窗口或回调函数。也可设为 null。
lphrasconn : 指 向 一 个 类 型 为 hrasconn 的 变 量 。 在 调 用 rasdial 前 必 须 指 定 为
null,rasdial 若成功返回,则将 ras 连接的句柄存放于他所指向的变量中。我们也能通过此
句柄来断开连接。
只要在程式中适当位置调用 rasdial 函数即可建立连接。
2. 理确认消息以得到拨号过程的当前状态。
我们以指定窗口来处理确认消息为例说明怎么得到拨号过程的当前状态。
在处理确认消息的对话框类(或视图类等)的实现代码中加入:
const uint wm_rasevent = ::registerwindowmessagea(rasdialevent);
在 message map 中手工加入消息映射:(****是你定义的对话框类名称)
begin_message_map(****, cdialog)
file://afx_msg_map(****)
……
on_registered_message(wm_rasevent, onrasdialevent)(<-加入此句)
file://afx_msg_map
end_message_map()
评论3