1 引言 全自动生化分析仪Ⅱ型机是基于I型机的换代产品,它具有了许多I型机不具备的优点。其中一个改进就是增加了网络支持功能,即在用户需要或者仪器发生故障时,可选择登录公司网站,或寻求详细的故障信息,或选择远程故障诊断,或进行网上升级等等。本文介绍了Visual C++下的一种网络支持程序,可在需要时自动登录公司网站。 2 网络支持程序完成的功能 在用户需要或仪器发生故障时,调用设置对话框,由用户来完成拨号网络的设置;完成设置并确定后进行拨号;显示拨号过程的当前状态并可随时断开连接;连接完成后,直接调用Ⅲ完成浏览公司网站。 3 程序的实现过程 (1)设置对话框: 创建设置对话框资源和类,并加入EditBox控件,再添加与该控件相关联的成员变量m_Usemame(用户名)、m_Password(密码)、m_Phonenum(电话号码)。 可以将用户输入值保存到注册表,以便再次调用时成为默认值。先在注册表中新建一个主键及该主键下欲保存用户输入的三个串值,UserName、PassWord、PhoneNumber。 欲对一个指定键进行操作,先用RegOpenKeyEx函数打开,用RegSetValueEx设置注册表中键的值。 在设置对话框的初始化中,将注册表中保存的值赋予控件变量,即读取默认值: m_Usemame=UserName,m_Password=PassWord,m_Pho-nenum=PhoneNumber。 (2)拨号连接: 使用调制解调器拨号进行连接。Visual C++为我们提供了包含RAS APl声明的ras.h头文件。要在程序中实现拨号上网功能,可以使用RasDial函数。其原型如下: DWORD RasDial LPRASDIALEXTENSIONS lpRasDialExtensions.//Windows NT下有效,Windows 98下置为NULL LPCTSTR lpszPhonebook,//Windows NT下有效,Windows 98下置为NULL LPRASDIALPARAMS lpRasDialParams, DWORD dwNotifierType,//Windows NT下有效,Windows 98下置为NULL LPVOID IpvNotifier,//指定处理确认信息的窗口或回调函数 LPHRASCONN lphRasConn);//指向类型为LPHRAS-CONN的变量,调用RasDial前需指定为NULL IpRasDialParams是一个LPRASDIALPARAMS结构指针,用于指定拨号连接的参数。其中,szEntryName可指定用户已在拨号网络里建立的连接,Modem将拨打其中设定的ISP号码,此时szPhoneNumber设为NULL。如果在程序中自行设定要拨打的ISP号码,szEntryName设定为NULL,此时szPhoneNumber应为ISP号码。 在确认用户输入后,调用RasDial函数即可拨号进行连接。 (3)拨号状态显示: ①建立状态显示对话框来处理确认消息。建立对话框资源和对应的对话框类CDIgStatus。在此对话框类的实现代码中定义一个新的Windows消息: const UNIT WM-RASEVENT=::Register Window Message (RASDIALEVENT); ②在MESSAGE MAP中加入消息映射,如下:BEGIN_MESSAGE_MAP(CDIgStatus,CDialog) file://((A隈-MSC-MAP(CDlgStatus) ON_REGISTERED_MESSAGE(WM_RASEVENT,OnRas DialEvent)-加入此句 file://))AFlMSLMAP END_MESSAGE_MAPO ③在确认消息的对话框实现代码之后,加入成员函数处理消息: LRESULT CDlgStatus::OnRasDialEvent(WPARAM wp,LPARAM Ip) (RASCONNSTATE rasstate=(RASCONNSTATE)wp; HRASCONN hRasConn; switeh(rasstate) {case RASCLOpenPort: m_Status->SetWindowText(T(//正在打开端口…//)); case RASCS_Disconnected: m_Status->SetWindowText(_T(//连接已经断开! file://)); hRasConn:NULL; /定义类型为HRASCONN的成员变量m_hRasConn来保存RAS连接的句柄,调用RasDial时m_hRasConn指针作为lphRasConn的参数用来保存连接句柄,连接断开后应重置为NULL. / } (4)断开连接: 在状态显示对话框的资源中加入Button控件,并创建消息响应函数。如下: void CDleStatus::OnButton () {… if (hRasConn!=NULL) { RasHangUp(hRasConn); hRasConn=NULL; ::Sleep(2000); } } 上述代码中的Sleepo函数是必需的,因为需要一定时间来断开连接,如不等一段时间,计算机有可能无法正常关闭端口,导致下一次拨号不能正常进行,那时只能重新启动Win-dows。 (5)浏览网页: 连接成功后,可直接用WinExec0函数来调用外部程序以实现调用IE完成浏览。 在OnRasDialEvent消息函数实现代码的CaseRASCS_Connected,中加入WinExec即可实现。case RASCS_Connected: m_Status->SetWindowText(_T(//连接成功!正在登录公司网站…//)) ::WinExec(//C\\kProgramFiles\\IntemetExPlorer\\IEXPLOR EEXE****,SW_MAXIMIZEISW_SHOW); file://****为欲浏览的公司的网址 这样,一个完整的拨号上网程序完成了。本程序已在Windows 2000的Visual C++6.0下调试通过。 本程序属于全自动生化分析仪Ⅱ型机网络支持程序的一部分,主要用于用户在仪器发生故障时上网连接公司网站,以便于故障的排除。它相比于系统自带的拨号网络,有自动运行、操作直接、显示明了的特点。 |