VB實(shí)現(xiàn)局域網(wǎng)屏幕監(jiān)視介紹
局域網(wǎng)中,往往有定時(shí)監(jiān)視同一組內(nèi)機(jī)器的屏幕的需要。下面由學(xué)習(xí)啦小編給你做出詳細(xì)的VB實(shí)現(xiàn)局域網(wǎng)屏幕監(jiān)視介紹!希望對(duì)你有幫助!
VB實(shí)現(xiàn)局域網(wǎng)屏幕監(jiān)視介紹:
VB實(shí)現(xiàn)局域網(wǎng)屏幕監(jiān)視一、
引言
在工業(yè)控制中,某車間有多條生產(chǎn)線,每條生產(chǎn)線有一臺(tái)或幾臺(tái)計(jì)算機(jī)實(shí)時(shí)監(jiān)控該生產(chǎn)線的工序參數(shù)的波動(dòng);同時(shí),需要有一臺(tái)計(jì)算機(jī)(可以稱之為屏幕監(jiān)視)來定時(shí)循環(huán)地顯示各監(jiān)視器的屏幕,以達(dá)到及時(shí)發(fā)現(xiàn)異常情況的目的。再如學(xué)校等公共機(jī)房,為了提高機(jī)器的有效使用率,屏幕監(jiān)視亦具有良好的效用。本文將介紹如何用VB來實(shí)現(xiàn)屏幕監(jiān)視的功能。
VB實(shí)現(xiàn)局域網(wǎng)屏幕監(jiān)視二、
VB實(shí)現(xiàn)屏幕監(jiān)視的原理
本文把被監(jiān)視的機(jī)器稱為客戶機(jī),監(jiān)視屏幕的機(jī)器稱為服務(wù)器(程序中服務(wù)器的名稱為Monitor)。首先在客戶機(jī)上把顯示器的屏幕作為一個(gè)窗口,并且把該窗口作為圖像加在VB工程中的窗體上,而后把該圖像在服務(wù)器上保存為圖像文件。在服務(wù)器上則在窗體中循環(huán)加載圖像文件,實(shí)現(xiàn)動(dòng)態(tài)的、可選擇地顯示各個(gè)圖像。
VB實(shí)現(xiàn)局域網(wǎng)屏幕監(jiān)視三、
客戶機(jī)程序的編制與設(shè)置
1、啟動(dòng)VB,創(chuàng)建缺省工程
將窗體的Visible屬性改為False,并在窗體上添加一Timer控件,名稱為Timer1,其Interval屬性設(shè)為30000(采樣間隔為30秒)。
2、API函數(shù)的聲明(可通過API Text Viewer加入)
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
3、全局變量的聲明
Dim ComputerName As String '本機(jī)名稱,用來區(qū)分不同的機(jī)器所生成的圖像。
4、再添加以下代碼
Private Sub Form_Load()
Dim sBuffer As String
Dim lSize As Long
sBuffer = Space$(255)
lSize = Len(sBuffer)
Call GetComputerName(sBuffer, lSize)
ComputerName = Trim(Left$(sBuffer, lSize))
Call iniPara 'iniPara函數(shù)定義在后
End Sub
為了防止程序被終止,添加如下語句:
Private Sub Form_Unload(Cancel As Integer)
Shell "C:\System\Client.exe" '調(diào)用本程序所生成的可執(zhí)行文件
End Sub
Private Sub Timer1_Timer()
Dim swnd, sdc, hd
swnd = GetDesktopWindow()
sdc = GetDC(swnd)
hd = BitBlt(Me.hdc, 0, 0, Me.Width, Me.Height, sdc, 0, 0, &HCC0020)
SavePicture Me.Image, "" & ComputerName & ".bmp"
hd = ReleaseDC(swnd, sdc)
Call iniPara
End Sub
當(dāng)發(fā)現(xiàn)有異常情況時(shí),往往需要縮短采樣間隔,下面iniPara函數(shù)可實(shí)現(xiàn)改變定時(shí)器的Interval屬性的功能。
Private Function iniPara() '讀取服務(wù)器上的Client.ini文件,初使化定時(shí)器的間隔。
Dim sBuffer As String
Dim lSize As Long
Dim TimerInterval As Integer '采樣間隔
Open "" For Input As #1
Line Input #1, sBuffer
lSize = InStr(1, sBuffer, "=")
Timer1.Interval = Val(Mid(sBuffer, lSize + 1))
Close (1)
End Function
編譯生成可執(zhí)行文件Client.exe,將其放在文件夾C:\Windows\System下,并把該程序設(shè)為開機(jī)即啟動(dòng)。
VB實(shí)現(xiàn)局域網(wǎng)屏幕監(jiān)視四、
服務(wù)器程序的編制與設(shè)置
啟動(dòng)VB,創(chuàng)建缺省工程,將窗體的WindowState屬性改為2-maximized,并在窗體上添加一Timer控件,名稱為Timer1,其Interval屬性設(shè)為6000(采樣間隔為6秒);在窗體上增添一Image控件,名稱為Image1,調(diào)整至合適尺寸,將其Stretch屬性改為True,添加如下代碼:
Const iNumClient = 5 '客戶機(jī)的數(shù)量
Dim sClientName(1 To iNumClient) As String '存放客戶機(jī)名稱的數(shù)組
Dim i As Integer
然后在Form_Load中把sClientName逐個(gè)賦值為客戶機(jī)的名稱,再添加如下代碼:
Private Sub Timer1_Timer()
i = i + 1
If (i > iNumClient) Then i = 1
Image1.Picture = LoadPicture("D:\ClientScreen\image" & sClientName(i) & " .bmp")
End Sub
編譯生成可執(zhí)行文件Server.exe,將其放在文件夾D:\ClientScreen下,并在該文件夾下新建一文本文件Client.ini,里面記錄著客戶機(jī)的采樣間隔,格式為“任意字符串(不能包含等號(hào))=時(shí)間(毫秒)”,比如:
ClientInterval=60000
即表示客戶機(jī)的采樣間隔為60秒。再把服務(wù)器的D盤共享為D$,訪問類型為“完全”。
下面的工作就是待各客戶機(jī)運(yùn)行一段時(shí)間后,在服務(wù)器就可以一覽眾客戶機(jī)的屏幕了。
VB實(shí)現(xiàn)局域網(wǎng)屏幕監(jiān)視五、
結(jié)束語
該程序比較簡潔,使用方便,達(dá)到了“一機(jī)多顯示器”的效果。當(dāng)然,本程序僅僅是梗概,還很不完善,功能也不多,在實(shí)際應(yīng)用中可逐步完善。
本程序是在VB6.0企業(yè)版下實(shí)現(xiàn)的。
看了“VB實(shí)現(xiàn)局域網(wǎng)屏幕監(jiān)視介紹”文章的還看了: