MILY: 宋體; FONT-SIZE: 16pt; LINE-HEIGHT: 240%; mso-bidi-font-size: 22.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">利用VB驅動pcAnyWhere進行自動文件傳輸
pcAnywhere使你能夠遠程控制PC機,如同使用當前計算機一樣的工具。它支持多種連接方式: IP連接,MODEM連接,串口電纜直接連接。除了操作外,它還可以進行文件傳輸、計算機同步等功能。它是計算機遠程控制的王中之王。
PCAnyWhere的使用非常簡單,它的使用方法在網上有非常詳細的介紹,我就不再多說,我介紹一下利用VB驅動PCAnyWhere的方法。
在我的一個項目中有特別的應用,有五個處于不同地方的計算機,有實時數據采集文件,我需要定時拔號上去,將上面的數據文件下載下來,這些數據文件隨時間的不同就有不同,所以沒有辦法做固定的自動文件傳輸,為此我分別研究了軟件提供script與OLE白皮書,最終決定選用OLE。
一、 利用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()
CHFile = xProfile.GetValue(WatchPoint(nowRunID), "CHFFILE") '用于拔號的配置
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
'取文件結束,要進行轉存處理
moveDBFData localpath
Set RemoteData = Nothing
Set RemoteDataManager = Nothing
nowRunID = nowRunID + 1
End If
注意:一次完畢后必須將RemoteData、RemoteDataManager對象釋放,不然會出現錯亂的現象。
好了,拔號自動文件傳輸已經實現了,但這個文件傳輸是在PCANYWHERE中配置好的不變的自動文件傳輸,不能實現我要的根據時間不同下載不同文件的要求。
二、 動態生成自動文件傳輸文件
為了動態生成自動文件傳輸,自然要修改自動文件傳輸文件的配置,可OLE中沒有給出這方面的功能,我不得不另辟蹊徑了。
用文本編輯器打開ATF文件(自動文件傳輸文件),發現全是亂碼,只有路徑可以識別。靈機一動用UltraEdit-32打開并用十六進制打開,哈,秘密全在其中。
ATF的系統文件格式如下:
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 '第八位:00表示文件傳輸完畢后不掛斷,01表示文件傳輸完畢后不掛斷言 C
41 75 74 6F 58 66 65 72 5F 43 6F 6D 6D 61 6E 64 AutoXfer_Command
01 13 45 3A 5C 55 53 42 42 41 4B 5C 32 30 30 33 第一位是傳輸方式:00 發到主機01從主機接收 02同步 第二位是本地文件路徑長度 ,后面的是本地文件路徑
31 2E 64 62 66 14 44 3A 5C 71 74 64 61 74 61 31 '第六個主機文件路徑長度, 后面的是主機文件路徑
5C 32 30 30 33 31 2E 64 62 66
有了文件的組成格式,生成這么一個文件就不在話下了。只要用二進制方式生成這個文件,就一切OK了。
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 AutoXfer_Command
'01 13 45 3A 5C 55 53 42 42 41 4B 5C 32 30 30 33 第一位是傳輸方式:00 發到主機01從主 機接收 02同步 第二位是本地文件路徑長度
'31 2E 64 62 66 14 44 3A 5C 71 74 64 61 74 61 31 '第六個主機文件路徑長度
'5C 32 30 30 33 31 2E 64 62 66
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
'41 75 74 6F 58 66 65 72 5F 43 6F 6D 6D 61 6E 64 AutoXfer_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
'01 13 45 3A 5C 55 53 42 42 41 4B 5C 32 30 30 33 第一位是傳輸方式:00 發到主機01從主
tx(48) = &H1
tx(49) = len1
For ii = 1 To len1
tx(49 + ii) = Asc(Mid(localpath, ii, 1))
Next ii
tx(49 + len1 + 1) = len2
For ii = 1 To len2
tx(49 + ii + len1 + 1) = Asc(Mid(remotepath, ii, 1))
Next ii
'二進制文件打開
On Error Resume Next
Open filename For Binary As #1
For ii = 0 To 48 + len1 + len2 + 2
Put #1, , tx(ii)
Next ii
Close 1
End Sub
輸入本地文件路徑,主機文件路徑,ATF文件名,就可生成這么一個文件,再將RemoteData.AutoXferFile設成新生成的ATF文件,你就可以想傳什么就傳什么文件了,不過,有一點要注意:這兩個文件路徑都是必須存在的,不然會出錯。
結言:
利用VB驅動pcAnyWhere是一件非常簡單的事件,但不是很好,首先它無法完成由程序控制,還有是在拔號與文件傳輸時會出現操作界面,無法將其置為一個后臺程序,而人工的干預也過于容易,不過,在解決我當前的問題方面,它是一個非常好的選擇。
參考資料:
《OLE Automation.pdf》
文章來源于領測軟件測試網 http://www.kjueaiud.com/
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月