摘 要:主要介紹了C/S模式下遠程控制中自動截屏功能的實現方法?;赪inSock和ImgEdit控件,提供了一種具有自動或手動遠程截圖、圖片編輯功能的開發(fā)框架,為遠程控制中核心功能的實現提供了一種有效的實現方法。
關鍵詞:遠程控制;API;WinSock;ImgEdit
中圖法分類號:TP311.11文獻標識碼:A
文章編號:1001—3695(2007)02—0266—03
遠程控制是指在兩臺計算機之間建立一條數據交換的通道,從而使得控制端可以向服務端發(fā)送指令,操縱服務端完成某些特定的工作。通過遠程控制軟件可以進行多種遠程操作,如查看被控電腦屏幕、窗口;訪問被控電腦的磁盤、文件夾及文件,并可對其進行管理或共享其中的資源;運行或關閉被控電腦中的應用程序;查看被控電腦的進程表,激活、中止程序進程;記錄并提取被控電腦的鍵盤操作;對被控電腦進行關閉、注銷或重啟等操作;修改被控電腦的Windows注冊表;操縱與被控電腦相接的打印機、掃描儀等外部設備;通過被控電腦捕獲音頻、視頻信號等。遠程控制在眾多的領域里有著非常廣泛的應用,如遠程培訓與教學、遠程辦公、對計算機及網絡的遠程管理與維護、遠程監(jiān)控。
要進行遠程控制,應使:①主控電腦和被控電腦均處在網絡中,網絡可以是局域網、廣域網或Internet,某些軟件也可使用直接連接電纜利用電腦COM或LPT口進行遠程控制;②要保證雙方使用相同的通信協(xié)議,多數情況下遠程控制軟件使用的是TCP/IP協(xié)議互相通信,也有部分軟件可使用SPX,NetBIOS協(xié)議,但使用這類協(xié)議無法在廣域網及Internet上實現遠程控制[1]。
TCP/IP是Internet的基礎協(xié)議,也是一種電腦數據打包和尋址的標準方法?;赪inSock技術的遠程控制實現正是依托于TCP/IP這一基本協(xié)議而實現的。微軟的WinSock控件是Visual Basic中與互聯(lián)網有關的控件之一,它是應用程序與TCP(Transmission Control Protocol)或UDP(User Datagram Protocol)之間的橋梁,提供簡單的方法使用戶輕松享受TCP或UDP的網絡服務。本文借助于WinSock所提供的方法和事件,利用強大的API函數,使用C/S模型實現遠程控制,重點介紹了自動截屏功能的實現方法。
1 主要控件構成
1.1 WinSock控件
20世紀80年代初,美國加利福尼亞大學伯克利分校的研究人員為TCP/IP網絡通信開發(fā)了一個專門用于網絡通信開發(fā)的API。這個API就是Socket接口(套接字)——當今在TCP/IP網絡最為通用的一種API,也是在互聯(lián)網上進行應用開發(fā)最為通用的一種API。微軟的WinSock控件是Visual Ba-sic中與互聯(lián)網有關的控件之一,它是應用程序與TCP或UDP之間的橋梁,提供簡單的方法使用戶輕松享受TCP或UDP的網絡服務。這樣程序設計人員不需要太了解網絡間的關系和理論,只要利用Microsoft WinSock空間的各種屬性、事件及方法,便可輕松制作出FTP Client/Server,Telnet Server,Chat Client/Server,E-mail(POP3/SMTP)及Web Server等應用程序。
如果創(chuàng)建客戶應用程序,就必須知道服務器計算機名或IP地址(RemoteHost屬性),還要知道進行偵聽的端口(RemotePort屬性),然后調用Connect方法。如果創(chuàng)建服務器應用程序,就應設置一個收聽端口(LocalPort屬性)并調用Listen方法。當客戶計算機需要連接時就會發(fā)生ConnectionRequest事件;為了完成連接,可調用ConnectionRequest事件內的Accept方法,建立連接后,任何一方計算機都可以收發(fā)數據。為了發(fā)送數據,可調用SendData方法;當接收數據時會發(fā)生DataArrival事件,調用DataArrival事件內的GetData方法即可獲取數據[3]。1.2 Imgedit.ocx控件
Imgedit.ocx控件是柯達公司發(fā)布的圖像處理控件中的圖像控件,其強大的功能比起Picture和Image控件有很大的提高,其對BMP,JPG,GIF等圖片格式的支持要遠遠好過以上兩個,并且ImgEdit控件支持的圖像格式最多。
利用ImgEdit控件來進行截圖編程是最恰當的,其所提供的ImgEdit1.ClipboardPaste方法可以很輕松地獲取剪貼板上的圖像,通過調用ImgEdit1.SaveAs方法將圖像保存為*.tiff文件。該控件使用的獨特數據壓縮方式不僅可以最大限度地保存原始文件的清晰度而且ImgEdit控件的巨大優(yōu)勢就在于壓縮后的文件非常小,可以將2MB的BMP文件壓縮成200KB,同時清晰度基本不變,與此相比同樣清晰度的BMP文件卻有2MB,所以ImgEdit壓縮的文件很適合網絡傳輸[4]。
對截取的圖像,ImgEdit控件提供了強大的編輯功能供選擇,著名的ACDSee看圖編輯軟件也是使用ImgEdit控件。通過使用ImgEdit.Zoom方法可以自定義圖片顯示比例,最大化、最小化、適合高度、適合寬度、最佳尺寸均可輕松地完成。如果要對圖片進行編輯,ImgEdit也可以輕松勝任,通過調用ShowAnnotationToolPalet方法可以直接使用圖片編輯欄,可以實現諸如添加文字、截取圖片、染色等一系列操作,如同使用Windows自帶的畫圖工具一樣。
1.3 Active控件的注冊
對于非系統(tǒng)必需的Active控件或是第三方控件,Windows操作系統(tǒng)是無法自動識別的,除非注冊,否則使用此控件的程序無法運行。若要注冊一個控件,可以使用Regsvr32.exe來注冊控件。Regsvr32.exe 的使用:
(1)將控件復制到(C:/…/system32)目錄下;
(2)單擊“開始”按鈕,選擇運行菜單;
(3)鍵入Regsvr32.exe 參數和要注冊的控件名,按回車后即完成注冊,如圖1所示。
例如要注冊ImgEdit.ocx控件,則鍵入“Regsvr32.exe imgedit.ocx”,按回車鍵完成注冊。注冊成功后如圖2顯示。
圖1 控件注冊界面圖2 注冊成功界面
2 遠程截圖功能實現方法
2.1 自動截圖功能實現方法
自動截圖功能的主要目的是在客戶端設定好截取時間和保存路徑后,點擊“開始截圖”按鈕,就可以自動截取服務端上的屏幕圖片,并且自動傳回客戶端,同時在客戶端顯示收到的文件大小和數目,且自動用截取的時間命名該文件。
以上功能的實現主要是利用了WinSock和ImgEdit控件所提供的方法,結合鍵盤模擬的API來實現的。采取的主要實現步驟如下:
(1)客戶端將截取時間的數值通過WinSock的SendData方法發(fā)送給遠程服務器端。當服務器的Winsock_DataArrival事件出現時,將客戶端傳過來的時間值賦給一個Timer控件,并且激活該控件。
(2)在timer_time事件中,利用名為keybd_event的API模擬鍵盤上的截圖鍵,將圖片送入剪貼板。(3)使用ImgEdit的Paste方法獲得剪貼板上的截圖。示例代碼如下:
(4)利用VB的Open方法打開該臨時文件,建立一個動態(tài)數組,并使用Winsock.SendData方法發(fā)送該文件。
(5)客戶端Winsock_DataArrival將系統(tǒng)時間轉換為文件名接收該文件,并保存于由設置所設定的Path下。
通過點擊截圖窗口中的“自動截圖”按鈕后就會出現如圖3所示的界面。
2.2 手動截圖功能
與自動截圖不同之處在于,手動時不需設置截取時間,而是通過按鈕來控制,所以只需將Timer控件控制的工作改為由按鈕來控制就可以了,其他的地方不變。當按鈕被點擊時,Winsock.SendData發(fā)送截圖指令,服務器完成指令后依然用SendData發(fā)送圖片,客戶端用一個動態(tài)數組接收,其余過程與自動截圖一樣。手動界面如圖4所示。
2.3 圖片瀏覽器功能實現
為了對截取的圖片進行瀏覽或處理,開發(fā)客戶端圖片瀏覽器,使之可以很方便地對所截取的圖片進行諸如按比例縮放、添加文字、修改顏色等操作,如圖5所示。
圖5 圖片瀏覽器功能實現
對顯示的圖片通過對菜單的編程可實現按比例縮放等功能,主要是將ImgEdit.Zoom的數值設定為所要縮放的比例,如縮小50%,則代碼相應為
兩個事件的代碼將驅動器、文件夾、文件列表三個控件同步處理,然后對于文件列表的鼠標雙擊事件完成響應,讓ImgEdit顯示由鼠標雙擊所選定的圖片文件,代碼如下:
由于采用標準的Windows對話框,用戶可以方便、熟悉地使用此功能。
3 結論
遠程控制實現技術的一個特點就是要能夠對服務器端的資源進行遠程管理和使用,通過編寫資源瀏覽器可以實現對遠程服務器各驅動器資源的本地化瀏覽,并結合文件操作的核心技術實現對文件的上傳/下載、文件夾的建立及刪除、對于可執(zhí)行文件的遠程運行,結合遠程截屏功能可以很方便地觀察服務器的運行狀態(tài),了解相關信息。本文通過WinSock控件和利用ImgEdit控件所提供的方法,結合API 所提供的方法實現具有遠程自動屏幕截屏及回傳顯示的功能,同時具備對圖片的一些基本的操作,為下一步遠程控制提供前期準備。
基于WinSock互連通信技術,利用WinAPI可以實現幾乎所有的本地化操作,同時由于不受距離等因素的限制,遠程互連控制技術具有本地操作所無法比擬的優(yōu)勢。開發(fā)具有遠程監(jiān)控的工業(yè)化實例程序是下一步需做的工作。
本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。