| 用VB设计文件传输程序 | ||
作者:北极圈 文章来源:本站整理 点击数: 更新时间:2008-6-25 16:36:36 |
||
|
PCAnyWhere的使用非常简单,它的使用方法在网上有非常详细的介绍,我就不再多说,我介绍一下利用VB驱动PCAnyWhere的方法。 一、利用OLE进行远程连接 在OLE白皮书上,将OLE驱动写得十分明白,我只要将我的连接代码帖上来,应该十分明白。 1、 检查MODEM是否在使用,由于PCAnyWhere启动后不能再由程序控制,我们必须检查MODEM是否是空闲才能确保拔号可以顺利外拔。检查MODEM空闲可能通过打开MODEM所在的串口是否成功来判断。 2、 生成RemoteDataManager对象 3、 进入C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere,由于 PCAnyWhere安装时将配置文件都放在这个目录下,我们将运行路径切换到这个目录下,可以更方便地使用。 4、 生成RemoteData对象,这要求在配置文件路径下有对应CHF文件上,这是在PCAnyWhere中配置的,只要名称与连接方式相同就可以了。 5、 设置拔号的电话号码,设置登录的用户名与密码,设置进行自动传输的ATF文件,并将RunOnConnect设为TRUE,并将这此配置的修改进行保存。 6、 开始拔号并自动传输文件。 7、 延时,判断MODEM是否空闲,空闲则这一次拔号、文件传输完毕(也有可能失败)。判断已下载的文件,如果修改时间已更新,则这次是成功的。否则是失败的。 8、 将RemoteData、RemoteDataManager对象释放。 9、 拔下一个点。 If checkMODEMIdle Then showBegin 注释:显示开始信息 注释:Create CRemoteDataManager object Set RemoteDataManager = CreateObject("WINAWSVR.RemoteDataManager") RemoteDataManager.ChangeDirectory "C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere" S = RemoteDataManager.CurrentDirectory()
Set RemoteData = RemoteDataManager.RetrieveObject(CHFile, 2, 0) RemoteData.PhoneNumber = xProfile.GetValue(WatchPoint(nowRunID), "PHONENUM") RemoteData.AutoXferFile = filename RemoteData.AutoLoginName = xProfile.GetValue(WatchPoint(nowRunID), "USERNAME") RemoteData.AutoLoginPassword = xProfile.GetValue(WatchPoint(nowRunID), "PSW") RemoteData.RunOnConnect = True RemoteData.WriteObject (0) S = RemoteData.PhoneNumber RemoteData.Launch Sleep 30000 Do If checkMODEMIdle Then Exit Do DoEvents Sleep 5000 Loop 注释:取文件结束,要进行转存处理 moveDBFData localpath Set RemoteData = Nothing Set RemoteDataManager = Nothing nowRunID = nowRunID + 1 End If
好了,拔号自动文件传输已经实现了,但这个文件传输是在PCANYWHERE中配置好的不变的自动文件传输,不能实现我要的根据时间不同下载不同文件的要求。 二、动态生成自动文件传输文件 为了动态生成自动文件传输,自然要修改自动文件传输文件的配置,可OLE中没有给出这方面的功能,我不得不另辟蹊径了。 用文本编辑器打开ATF文件(自动文件传输文件),发现全是乱码,只有路径可以识别。灵机一动用UltraEdit-32打开并用十六进制打开,哈,秘密全在其中。 ATF的系统文件格式如下:
00 00 00 00 00 00 00 01 00 FF FF 00 00 11 00 43 注释:第八位:00表示文件传输完毕后不挂断,01表示文件传输完毕后不挂断言 C 41 75 74 6F 58 66 65 72 5F 43 6F 6D 6D 61 6E 64 AutoXfer_Command
5C 32 30 30 33 31 2E 64 62 66
Public Sub makeATFFile(ByVal localpath As String, ByVal remotepath As String, ByVal filename As String) Dim tx() As Byte Dim ii As Integer Dim len1, len2 As Integer len1 = Len(localpath) len2 = Len(remotepath) ReDim tx(0 To 48 + len1 + len2 + 2) 注释:04 40 41 54 46 01 00 01 01 00 01 01 01 01 00 01 注释:第八位:00表示增量下载,01自然下载 注释:00 00 00 00 00 00 00 01 00 FF FF 00 00 11 00 43 C 注释:41 75 74 6F 58 66 65 72 5F 43 6F 6D 6D 61 6E 64 Auto |
||
| 文章录入:admin 责任编辑:admin | ||
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | ||