VB驱动pcAnyWhere进行文件传输 |
PCAnyWhere的 使用十分 容易,它的 使用 步骤在网上有十分 详尽的介绍,我就不再多说,我介绍一下利用VB驱动PCAnyWhere的 步骤 。 在我的一个 名目中有特殊的 利用,有五个处于不同地方的计算机,有实时数据采集文件,我需求定时拔号上去,将上面的数据文件下载下来,这些数据文件随 工夫的不同就有不同,所以没有 步骤做固定的自动文件传输,为此我分别探究了软件提供script与OLE白皮书,最后决定选用OLE 。 一、利用OLE进行远程衔接 在OLE白皮书上,将OLE驱动写得十 清晰白,我 惟独将我的衔接代码帖上来,应该十 清晰白 。 1、 审查MODEM是不是在 使用,因为PCAnyWhere启动后不能再由程序操纵,我们必须 审查MODEM是不是是空暇 威力确保拔号 可以顺利外拔 。 审查MODEM空暇可能通过 打开MODEM所在的串口是不是 顺利来推断 。 2、生成RemoteDataManager对象 3、进入C:DocumentsandSettingsAllUsersApplicationDataSymantecpcAnywhere,因为 PCAnyWhere安装时将配置文件都放在这个目录下,我们将运行路径切换到这个目录下, 可以更容易地 使用 。 4、生成RemoteData对象,这要求在配置文件路径下有对应CHF文件上,这是在PCAnyWhere中配置的, 惟独名称与衔接 模式 雷同就 可以了 。 5、设置拔号的电话号码,设置登录的消费者名与密码,设置进行自动传输的ATF文件,并将RunOnConnect设为TRUE,并将这此配置的 批改良行 保留 。 6、开始拔号并自动传输文件 。 7、延时,推断MODEM是不是空暇,空暇则这一次拔号、文件传输 结束(也有可能失败) 。推断已下载的文件,假如 批改 工夫已更新,则这次是 顺利的 。否则是失败的 。 8、将RemoteData、RemoteDataManager对象 开释 。 9、拔下一个点 。 IfcheckMODEMIdleThen showBegin 诠释:显示开始信息 诠释:CreateCRemoteDataManagerobject SetRemoteDataManager=CreateObject("WINAWSVR.RemoteDataManager") RemoteDataManager.ChangeDirectory"C:DocumentsandSettingsAllUsersApplicationDataSymantecpcAnywhere" S=RemoteDataManager.CurrentDirectory() CHFile=xProfile.GetValue(WatchPoint(nowRunID),"CHFFILE") 诠释:用于拔号的配置 SetRemoteData=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 Sleep30000 Do IfcheckMODEMIdleThenExitDo DoEvents Sleep5000 Loop 诠释:取文件 完毕,要进行转存 解决 moveDBFDatalocalpath SetRemoteData=Nothing SetRemoteDataManager=Nothing nowRunID=nowRunID 1 EndIf 留神:一次 结束后必须将RemoteData、RemoteDataManager对象 开释,否则会浮现错乱的 景象 。 好了,拔号自动文件传输已经实现了,但这个文件传输是在PCANYWHERE中配置好的不变的自动文件传输,不能实现我要的依据 工夫不同下载不同文件的要求 。 二、动态生成自动文件传输文件 为了动态生成自动文件传输,自然要 批改自动文件传输文件的配置,可OLE中没有给出这方面的 性能,我只能另辟蹊径了 。 用文本编辑器 打开ATF文件(自动文件传输文件),发现全是乱码,惟独路径 可以 鉴别 。 眉头一皱,计上心来用UltraEdit-32 打开并用十六进制 打开,哈, 机密全在其中 。 ATF的系统文件 格局如下: 04404154460100010100010101010001 诠释:第八位:00 示意增量下载,01所有再一次下载 000000000000000100FFFF0000110043 诠释:第八位:00 示意文件传输 结束后不挂断,01 示意文件传输 结束后不挂断言C 4175746F586665725F436F6D6D616E64AutoXfer_Command 0113453A5C55534242414B5C32303033第一位是传输 模式:00发到主机01从主机 接纳02同步第二位是当地文件路径长度,后面的是当地文件路径 312E64626614443A5C71746461746131 诠释:第六个主机文件路径长度,后面的是主机文件路径 5C32303033312E646266 有了文件的构成 格局,生成这么一个文件就不在话下了 。 惟独用二进制 模式生成这个文件,就 所有OK了 。 PublicSubmakeATFFile(ByVallocalpathAsString,ByValremotepathAsString,ByValfilenameAsString) Dimtx()AsByte DimiiAsInteger Dimlen1,len2AsInteger len1=Len(localpath) len2=Len(remotepath) ReDimtx(0To48 len1 len2 2) 诠释:04404154460100010100010101010001 诠释:第八位:00 示意增量下载,01自然下载 诠释:000000000000000100FFFF0000110043C 诠释:4175746F586665725F436F6D6D616E64AutoXfer_Command 诠释:0113453A5C55534242414B5C32303033第一位是传输 模式:00发到主机01从主机 接纳02同步第二位是当地文件路径长度 诠释:312E64626614443A5C71746461746131 诠释:第六个主机文件路径长度 诠释:5C32303033312E646266 tx(0)=&H4 tx(1)=&H40 tx(2)=&H41 tx(3)=&H54 tx(4)=&H46 tx(5)=&H1 tx(6)=&H0 tx(7)=&H1 tx(8)=&H1 tx(9)=&H0 tx(10)=&H1 tx(11)=&H1 tx(12)=&H1 tx(13)=&H1 tx(14)=&H0 tx(15)=&H1 tx(16)=&H0 tx(17)=&H0 tx(18)=&H0 tx(19)=&H0 tx(20)=&H0 tx(21)=&H0 tx(22)=&H0 tx(23)=&H1 tx(24)=&H0 tx(25)=&HFF tx(26)=&HFF tx(27)=&H0 tx(28)=&H0 tx(29)=&H11 tx(30)=&H0 tx(31)=&H43 诠释:4175746F586665725F436F6D6D616E64AutoXfer_Command tx(32)=&H41 tx(33)=&H75 tx(34)=&H74 tx(35)=&H6F tx(36)=&H58 tx(37)=&H66 tx(38)=&H65 tx(39)=&H72 tx(40)=&H5F tx(41)=&H43 tx(42)=&H6F tx(43)=&H6D tx(44)=&H6D tx(45)=&H61 tx(46)=&H6E tx(47)=&H64 诠释:0113453A5C55534242414B5C32303033第一位是传输 模式:00发到主机01从主 tx(48)=&H1 tx(49)=len1 Forii=1Tolen1 tx(49 ii)=Asc(Mid(localpath,ii,1)) Nextii tx(49 len1 1)=len2 Forii=1Tolen2 tx(49 ii len1 1)=Asc(Mid(remotepath,ii,1)) Nextii 诠释:二进制文件 打开 OnErrorResumeNext OpenfilenameForBinaryAs#1 Forii=0To48 len1 len2 2 Put#1,,tx(ii) Nextii Close1 EndSub 输入当地文件路径,主机文件路径,ATF文件名,就可生成这么一个文件,再将RemoteData.AutoXferFile设成新生成的ATF文件,你就 可以想传什么就传什么文件了,不过,有丝毫要 留神:这两个文件路径都是必须存在的,否则会出错 。 论断: 利用VB驱动pcAnyWhere是一件十分 容易的事件,但不是很好,首先它 无奈 实现由程序操纵,还有是在拔号与文件传输时会浮现操作界面, 无奈将其置为一个 后盾程序,而人工的 干涉也过于容易,不过,在解决我目前的问题方面,它是一个十分好的 取舍 。 |