问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

VB驱动pcAnyWhere进行文件传输

发布网友 发布时间:2023-05-11 15:14

我来回答

1个回答

热心网友 时间:2024-02-02 18:22


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是一件非常简单的事件,但不是很好,首先它无法完成由程序控制,还有是在拔号与文件传输时会出现操作界面,无法将其置为一个后台程序,而人工的干预也过于容易,不过,在解决我当前的问题方面,它是一个非常好的选择。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
家政服务阿姨是做什么的? 中央空调水滴图标是什么模式? 和EXO有关(字)的头像3张, 真的没人要么 exo这几个字母头像组合的头像 有没有EX0成员穿有EXO字的衣服的图片,和我头像一样的,越多越好! 为什么工商办卡要证明 亲子阅读的优缺点是什么? 馒头冬天放在室外存放 宝宝2 岁半说话结巴,宝宝结巴怎么纠正? 宝宝讲话口齿不清怎么办 品牌联想的简介 勉强度日的勉强什么意思?,勉强度日的勉强是什么 洗衣机过滤袋的问题 wp手机怎么同步短信 黄龙玉手镯有两总颜色有什么寓意 心里价格叫什么 70年房屋产权从什么时间算起 我对别人没有安全感,也不信任,这是这是为什么 日丰暗盒与abb暗盒哪个好 玉米属于蔬菜还是水果?午餐只吃玉米健康吗? 产权70年从什么时候开始 QQ同步助手WP版如何备份短信 宫颈囊肿 和双侧卵巢多囊改变 怎么办啊 男生被动是什么意思? 欠妥的近义词欠妥的近义词是什么 滨崎步为什么耳朵会失聪,起底滨崎步失聪原因是什么 滨崎步为什么失聪了 一般来讲,一个汉字就是一个音节。只有儿化音节除外。对还是错?_百度知 ... 汉字是表音文字还是表义文字? 万圣节讨糖由来 取名字 - 品牌联想的相关性定义 男生说他被动了是什么意思大神们帮帮忙 求教文化冲突的定义? 会亲联谊会是什么意思? 怎样分析冰菓第一话? 7476 与74112的区别? 健康才是硬道理 天下胜者众矣,而霸者乃五出自哪里 ...的函数中不能定义另一个函数,这句话是什么意思啊?为什么啊,请大神用... 安卓版海康智存可以自动传输文件吗 风鸟整木家装ABB智能家居布线注意 隔音性能等级越高越好? 宫口已经变薄了,是不是要生了 婆妈张飞是什么意思 等号上加个点是什么意思 健康观念:养生再贵也贵不过医疗费,健康才是硬道理 充电桩代理怎么样 手指头,9个圈,一个叉,叫什么九箩缺一十箩全, 充电桩代理怎么样