分享
 
 
 

用VB实现局域网屏幕监视

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

文/袁磊

一、引言

局域网中,往往有定时监视同一组内机器的屏幕的需要。比如:在工业控制中,某车间有多条生产线,每条生产线有一台或几台计算机实时监控该生产线的工序参数的波动;同时,需要有一台计算机(可以称之为屏幕监视服务器)来定时循环地显示各监视器的屏幕,以达到及时发现异常情况的目的。再如学校等公共机房,为了提高机器的有效使用率,屏幕监视亦具有良好的效用。本文将介绍如何用VB来实现屏幕监视的功能。

二、VB实现屏幕监视的原理

本文把被监视的机器称为客户机,监视屏幕的机器称为服务器(程序中服务器的名称为Monitor)。首先在客户机上把显示器的屏幕作为一个窗口,并且把该窗口作为图像加在VB工程中的窗体上,而后把该图像在服务器上保存为图像文件。在服务器上则在窗体中循环加载图像文件,实现动态的、可选择地显示各个图像。

三、客户机程序的编制与设置

1、启动VB,创建缺省工程,将窗体的Visible属性改为False,并在窗体上添加一Timer控件,名称为Timer1,其Interval属性设为30000(采样间隔为30秒)。

2、API函数的声明(可通过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 ’本机名称,用来区分不同的机器所生成的图像。

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函数定义在后

End Sub

为了防止程序被终止,添加如下语句:

Private Sub Form_Unload(Cancel As Integer)

Shell "C:\Windows\System\Client.exe" ’调用本程序所生成的可执行文件

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, "\\Monitor\D$\ClientScreen\image" & ComputerName & ".bmp"

hd = ReleaseDC(swnd, sdc)

Call iniPara

End Sub

当发现有异常情况时,往往需要缩短采样间隔,下面iniPara函数可实现改变定时器的Interval属性的功能。

Private Function iniPara() ’读取服务器上的Client.ini文件,初使化定时器的间隔。

Dim sBuffer As String

Dim lSize As Long

Dim TimerInterval As Integer ’采样间隔

Open "\\Monitor\D$\ClientScreen\Client.ini" For Input As #1

Line Input #1, sBuffer

lSize = InStr(1, sBuffer, "=")

Timer1.Interval = Val(Mid(sBuffer, lSize + 1))

Close (1)

End Function

编译生成可执行文件Client.exe,将其放在文件夹C:\Windows\System下,并把该程序设为开机即启动。

四、服务器程序的编制与设置

启动VB,创建缺省工程,将窗体的WindowState属性改为2-maximized,并在窗体上添加一Timer控件,名称为Timer1,其Interval属性设为6000(采样间隔为6秒);在窗体上增添一Image控件,名称为Image1,调整至合适尺寸,将其Stretch属性改为True,添加如下代码:

Const iNumClient = 5 ’客户机的数量

Dim sClientName(1 To iNumClient) As String ’存放客户机名称的数组

Dim i As Integer

然后在Form_Load中把sClientName逐个赋值为客户机的名称,再添加如下代码:

Private Sub Timer1_Timer()

i = i + 1

If (i > iNumClient) Then i = 1

Image1.Picture = LoadPicture("D:\ClientScreen\image" & sClientName(i) & " .bmp")

End Sub

编译生成可执行文件Server.exe,将其放在文件夹D:\ClientScreen下,并在该文件夹下新建一文本文件Client.ini,里面记录着客户机的采样间隔,格式为“任意字符串(不能包含等号)=时间(毫秒)”,比如:

ClientInterval=60000

即表示客户机的采样间隔为60秒。

再把服务器的D盘共享为D$,访问类型为“完全”。

下面的工作就是待各客户机运行一段时间后,在服务器就可以一览众客户机的屏幕了。

五、结束语

该程序比较简洁,使用方便,达到了“一机多显示器”的效果。当然,本程序仅仅是梗概,还很不完善,功能也不多,在实际应用中可逐步完善。

本程序是在VB6.0企业版下实现的。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有