选择显示字体大小

vb实现远程共享显示及声音

  在局域网内共享调制解调器以及共享打印机都是我们非常熟悉的,而对于显示器和声卡的共享一般比较陌生。

  当你在进行教学、演示或展示时,也许你希望主控电脑上的画面同时也出现在其它电脑上;当你在跟踪调试程序时,你也许梦想过两台显示器能够同步,以便观看源代码时不破坏运行程序画面;还有,出于管理的目的,或许你需要远程监控其它电脑的运行状况,等等。上述所有情况都是远程共享显示的例子。

  共享声卡的需求也不少:首先这可以降低硬件投资,让没有装或者没法装声卡的电脑(如某些笔记本电脑)也有了“喉舌”;其次,即使每台机器都有声卡也不无用武之地:至少你的 mp3背景音乐与你的英语有声软件不再经常发生冲突了;还有,共享声卡使得“远程有声通知”成为可能,其作用类似于立即型声音邮件,在日常工作中有广泛的应用。

  共享显示器或声卡的硬件(一般在扩展槽内插一块卡)在市场上不难找到。但扩充本文的示例程序即可以用软件轻松实现这些功能。

一、共享显示

  我们通过一个完整的示例程序(vb 6.0)来说明。在例子中,被共享端(即服务器端)的任务是:自动捕获本机的当前显示画面,并将之传给共享端(即客户端)。

  1. 服务器端程序(frmserver.frm)
  这里有三点需要重点说明:一是自动捕获画面问题。为了模拟“捕获屏幕键”被按下的动作,程序里使用了 api调用 keybd_event。虽然vb的sendkeys语句也有类似功能,但它不如 keybd_event稳定和可靠。二是画面粘贴和压缩存储问题。为了能把已经被捕获到系统剪贴板中的图像粘贴下来并存储到文件,程序里使用了 imgedit控件。该控件强大的功能远非picturebox控件或 image控件可比。imgedit 不仅支持多种压缩图像格式(如 jpg、tiff等),而且它对画面进行操纵和编辑的功能也非常强大(如图像旋转、缩放、嵌入等)。imgedit 还能对剪贴板进行copy、cut、paste等操作。使用 ctrl+t 或菜单(工程->部件)来添加 windows标准的 imgedit控件(参见图一)。三是文件传输问题。用 imgedit存储的压缩文件一般只有 40 kb左右,使用 winsock控件可以一次传输出去。但由于接收方的 winsock控件一般是4k至8k调用一次 dataarrival子程,故程序使用主动分块进行传输,接收方确认后再发下一块。


  服务器端源程序如下:

'frmserver.frm
option explicit
const filename = "c:\sys1.tmp", blocksize = 3072 ' 传送包大小
private declare sub keybd_event lib "user32" _
(byval bvk as byte, byval bscan as byte, _
byval dwflags as long, byval dwextrainfo as long)

private sub form_load()
tcpserver.localport = 1001 ' 设置监听端口号
tcpserver.listen ' 开始监听
end sub

private sub tcpserver_connectionrequest(byval requestid as long)
if tcpserver.state <> sckclosed then tcpserver.close
tcpserver.accept requestid
tcpserver.senddata "sh" ' 成功连接后,发送“握手”信息
end sub

private sub tcpserver_dataarrival(byval bytestotal as long)
static fileid as integer, cur_pos as long, filelen as long
dim strdata as string, j
dim buf() as byte ' 定义一个可变大小的数组,用于传送二进制图像包
tcpserver.getdata strdata
select case strdata
case "close" ' 接到“disconnect”命令后,关闭当前连接,并继续监听
tcpserver.close
imgedit1.cleardisplay
tcpserver.localport = 1001
tcpserver.listen
case "save picture"
call keybd_event(vbkeysnapshot, 1, 0, 0) ' 模拟按键操作
j = doevents()
if dir&#36;(filename) <> "" then kill filename
if imgedit1.isclipboarddataavailable then ' 当剪贴板上有数据时
imgedit1.cleardisplay
imgedit1.displayblankimage screen.width / _
screen.twipsperpixelx, screen.height / _
screen.twipsperpixely, , , 6
imgedit1.clipboardpaste ' 从剪贴板粘贴图像
imgedit1.burninannotations 0, 2
imgedit1.saveas filename, 1, 6, 6, 256 ' 另存图像。参数说明如下:
' “filename”:文件名
' 参数“1”:tiff 型文件;
' 第一个“6”:rgb24类型;
' 第二个“6”:jpeg压缩类型
' 参数“256”:最大压缩比

clipboard.clear
tcpserver.senddata "ps" ' 发送“图像文件就绪”信息
end if
case "get picture"
if dir&#36;(filename) <> "" then
fileid = freefile
open filename for binary as #fileid ' 打开文件并发送第一块数据
filelen = lof(fileid)
redim buf(1 to blocksize) as byte
get #fileid, , buf
tcpserver.senddata buf
cur_pos = blocksize
end if
case "next block"
if cur_pos = filelen then
tcpserver.senddata "ef" ' 文件传送完毕后,发送“完成”信息
close fileid
exit sub
end if
j = cur_pos + blocksize
if j > filelen then
j = filelen - cur_pos
else
j = blocksize
end if
redim buf(1 to j) as byte ' 动态确定数组大小
get #fileid, , buf
tcpserver.senddata buf ' 发送后续包
cur_pos = cur_pos + j
end select
end sub




 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons