• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    利用VB驅動pcAnyWhere進行自動文件傳輸

    發布: 2007-5-25 09:21 | 作者: monkst | 來源: 互聯網 | 查看: 30次 | 進入軟件測試論壇討論

    領測軟件測試網  

    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的方法。

    在我的一個項目中有特別的應用,有五個處于不同地方的計算機,有實時數據采集文件,我需要定時拔號上去,將上面的數據文件下載下來,這些數據文件隨時間的不同就有不同,所以沒有辦法做固定的自動文件傳輸,為此我分別研究了軟件提供scriptOLE白皮書,最終決定選用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

                        Loop

                        '取文件結束,要進行轉存處理

                        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

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>