电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

自动上网的机器人(网络编程,很有借鉴意义)C

4页
  • 卖家[上传人]:汽***
  • 文档编号:472856121
  • 上传时间:2023-01-31
  • 文档格式:DOC
  • 文档大小:35KB
  • / 4 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、作者:meteoremail: 日期:8/22/2001 3:37:12 PM第三部分 自动拨号、自动挂断以及自动处理中途掉线 一个出色的“自动上网机器人”程序应能按照既定的时间准时开始拨号、并当所需任务已完成后立即挂断。而且仅做到这些还不够,它还应在发出拨号指令后跟踪拨号操作是否真的成功、上网速度如何、是否需要挂断后重新拨号、自动浏览过程中是否出现掉线、以及最终的挂断操作是否真的成功完成,等等。 因此,“机器人”程序应定时检查在线状况,以保证浏览时一定在在线状态、浏览完毕后一定不在在线状态。同时还要检查浏览进度,当浏览速度过慢时尝试挂断后重新拨号。 本部分讨论了实现“自动拨号”、“检查在线状况”、以及“自动挂断”这三个功能的若干方法,比较了诸方法各自的优劣,并总结给出了使用建议。本部分的示例程序将这三个功能的诸方法集成在一起,以便于大家对比使用(见下图)。 1. 自动拨号 方法1A:使用rnaui.dll rnaui.dll是微软的“拨号网络用户接口”程序集,一般在“WindowsSystem”目录下。其中的RnaDial程序用于启动拨号。该程序可在命令行执行(在“开始”-“运行”中

      2、键入): rundll32.exe rnaui.dll,RnaDial 其中的“RnaDial”和“”是区分大小写的。 但由于上述命令仅启动拨号窗口而未立即开始拨号,因此在程序中使用时还应再送出模拟“回车”的按键:ret = Shell(rundll32.exe rnaui.dll,RnaDial + 连接名, 1) SendKeys enter, True 方法1B:使用wininet.dll wininet.dll是微软的Internet扩充函数集,一般在“WindowsSystem”目录下。其中的InternetAutodial、InternetAutodialHangup和InternetGetConnectedState三个函数分别可完成自动拨号、自动挂断和判断在线状态等任务。InternetAutodial的定义为:Private Declare Function InternetAutodial Lib wininet.dll _ (ByValdwFlags As Long, ByValdwReserved As Long) As Long 若将第一个参数(dwFlags

      3、)的值设为2,该函数无需用户干预就可自动拨号。但使用该函数有一个前提:即必须将“Internet 属性”-“连接”设成“始终拨打默认连接”(见下图)。 用InternetAutodial函数自动拨号的情况可参见下图。从图中可以看出,该方法可自动重试多次。具体的重试次数在默认连接的“设置”-“高级”中定义: 方法1C:使用RAS RAS 是微软的远程访问服务(Remote Access Service)API集合。其中的 API函数RasDial可完成拨号任务。但由于该函数在使用上略显复杂而不太常用,故示例程序中未采纳。 自动拨号方法小结:rnaui方法使用起来最简单,又由于它不一定非要使用默认连接,因此也最灵活。但这种灵活恰恰又给它带来了弱点,即如果不提供连接名,该方法不会自动调用默认连接。此外,这种方法还有两个最大的缺点:一是仅拨号一次,若出现占线或没有响应等情况时不会自动重试;二是调用程序不容易得到拨号是否成功的返回值。相比之下,wininet方法虽仅能拨打默认连接(无默认连接时,使用第一个连接),但它可多次试拨,并且InternetAutodial函数等待拨号成功或所有试拨结束以

      4、便给调用程序返回拨号是否成功的值,因此,在“自动上网机器人”的环境中wininet方法是最适宜的。2. 检查在线状况 方法2A:wininet方法 若InternetGetConnectedState函数返回True,则为在线状态。该方法最大的缺点是:若当前连接不是用wininet方法建立的,则返回值可能不准确。 方法2B:查找窗口法 拨号连接成功后,下图所示的窗口一定存在(不管它是最小化在任务栏的最右端,或是开启为下图所示的状态): 用FindWindow API函数找到该窗口即意味着当前在线。此外,查找窗口法的另一个用处是查找“重新连接”窗口:当中途掉线时,操作系统往往会询问你是否重新连接,找到该窗口并发出模拟“回车”按键即可实现再拨号。 查找窗口法的缺点是:由于找窗口时需要提供窗口标题,因此即使使用的是默认连接也必须事先知道默认连接名。 方法2C:RAS 方法 先用RasEnumConnections函数返回整个RAS集合,再用RasGetConnectStatus函数判断第一个 RAS连接的状态。RAS方法的最大优点是:不管当前连接是否是用wininet建立的,RAS 方法均可

      5、对在线状态做出正确判断。 方法2D:注册表法 在线时,注册表的“HKEY_LOCAL_MACHINESystemCurrentControlSetServicesRemoteAccess”处有键值“Remote Connection”,且其值不为零;不在线时,该处无“Remote Connection”键值(当本次系统启动后从未拨号成功时),或者其值为零(表明曾拨号成功,但现在已断掉)。检查在线状况之方法小结:由于wininet方法的局限性,一般我们应避免使用之;查找窗口法是可靠的,只是要知道连接名;因此我们推荐使用RAS 方法和注册表法。3. 自动挂断 方法3A:wininet法使用InternetAutodialHangup函数。同样地,若当前连接不是用wininet方法建立的,则返回值可能不准确(即不能成功挂断)。 方法3B:窗口查找法找到图九所示的窗口,然后用ShowWindow API函数使之成为当前窗口,最后发出模拟+C的按键操作(从图九中可以看出,+C是“断开连接”按键的快捷方式)。 方法3C:RAS 法用RasHangUp函数执行挂断。不管用何种方法建立的连接,RAS

      6、法均能可靠地完成任务。自动挂断方法小结:相比之下,窗口查找法和RAS 法是可以信赖的。4. 本部分总结综上所述,对于“自动拨号”、“检查在线状况”、以及“自动挂断”的各种方法,我们推荐“1A-2C-3C”组合。当然各方法可综合使用(如加入2D、3B等),以确保万无一失。在具体编程时还应注意:拨号后判断结果,如不成功应重新拨号;任务进行过程中定时检查在线状态,出现掉线后应及时处理;最后的挂断操作后应再查在线状态,以确保挂断成功。 下面是实例程序的完整代码。源代码中的全局定义已按照wininet、RAS、注册表等进行分类,各具体方法也均按序排列,以便于大家挑选使用。该程序的执行情况在本部分的开始处已给出(图六)。 程序三:自动拨号、自动挂断以及自动处理中途掉线Option Explicit 有关 wininet 的全局定义Private Const INTERNET_AUTODIAL_FORCE_UNATTENDED = 2Private Const INTERNET_CONNECTION_MODEM = 1Private Declare Function InternetAutodial

      7、 Lib wininet.dll _(ByVal dwFlags As Long, ByVal dwReserved As Long) As LongPrivate Declare Function InternetAutodialHangup Lib _wininet.dll (ByVal dwReserved As Long) As LongPrivate Declare Function InternetGetConnectedState Lib _wininet.dll (ByRef lpdwFlags As Long, ByVal _dwReserved As Long) As Long 有关“窗口查找”的全局定义Private Declare Function FindWindow Lib user32 _Alias FindWindowA (ByVal lpClassName As String, _ByVal lpWindowName As String) As LongPrivate Declare Function ShowWindow Lib user32 _(B

      8、yVal hwnd As Long, ByVal nCmdShow As Long) As LongPrivate Const SW_SHOW = 5 有关 RAS 的全局定义Private Const RASCS_DONE = &H2000&Private Const RAS_MaxEntryName = 256Private Const RAS_MaxDeviceType = 16Private Const RAS_MaxDeviceName = 128Private Type RASCONNdwSize As LonghRasConn As LongszEntryName(RAS_MaxEntryName) As ByteszDeviceType(RAS_MaxDeviceType) As ByteszDeviceName(RAS_MaxDeviceName) As ByteEnd TypePrivate Type RASCONNSTATUSdwSize As LongRasConnState As LongdwError As LongszDeviceType(RAS_MaxD

      9、eviceType) As ByteszDeviceName(RAS_MaxDeviceName) As ByteEnd TypePrivate Ras_Buf(255) As RASCONNPrivate Ras_Status As RASCONNSTATUSPrivate lpcb As LongPrivate lpcConnections As LongPrivate Declare Function RasEnumConnections Lib _rasapi32.dll Alias RasEnumConnectionsA (lprasconn _As Any, lpcb As Long, lpcConnections As Long) As LongPrivate Declare Function RasGetConnectStatus Lib _rasapi32.dll Alias RasGetConnectStatusA (ByVal _hRasConn As Long, lpRASCONNSTATUS As Any) As LongPrivate Declare Function RasHangUp Lib rasapi32.dll _Alias RasHangUpA (ByVal hRasConn As Long) As Long 有关“注册表”的全局定义Private Const HKEY_LOCAL_MACHINE = &H80000002Private Declare Function RegOpenKey Lib

      《自动上网的机器人(网络编程,很有借鉴意义)C》由会员汽***分享,可在线阅读,更多相关《自动上网的机器人(网络编程,很有借鉴意义)C》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.