《计算机网络编程技术》多媒体课件 P5 远程屏幕监视程序设计

上传人:E**** 文档编号:89446533 上传时间:2019-05-25 格式:PPT 页数:25 大小:355.50KB
返回 下载 相关 举报
《计算机网络编程技术》多媒体课件 P5 远程屏幕监视程序设计_第1页
第1页 / 共25页
《计算机网络编程技术》多媒体课件 P5 远程屏幕监视程序设计_第2页
第2页 / 共25页
《计算机网络编程技术》多媒体课件 P5 远程屏幕监视程序设计_第3页
第3页 / 共25页
《计算机网络编程技术》多媒体课件 P5 远程屏幕监视程序设计_第4页
第4页 / 共25页
《计算机网络编程技术》多媒体课件 P5 远程屏幕监视程序设计_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《《计算机网络编程技术》多媒体课件 P5 远程屏幕监视程序设计》由会员分享,可在线阅读,更多相关《《计算机网络编程技术》多媒体课件 P5 远程屏幕监视程序设计(25页珍藏版)》请在金锄头文库上搜索。

1、5/25/2019,1,计算机网络编程技术,第5章 远程屏幕监视程序设计,张晓明 北京石油化工学院计算机系,5/25/2019,2,引子-截屏工具软件?,本机截屏方法 ?,远程主机截屏方法 ?,截屏为四边形。能否为任意形状?,5/25/2019,3,本章的主要内容,屏幕图象的捕获原理 屏幕图象捕获的编程技术 基于远程调用信道的远程屏幕监视编程 基于TCP协议的远程屏幕监视编程,5/25/2019,4,5.1 屏幕捕获过程解析,创建一个和当前屏幕大小相同的Bitmap对象 ; 根据此位图创建一个Graphic对象; 获得当前屏幕和位图的句柄 ; 捕获当前屏幕; 把当前屏幕保存到硬盘并释放句柄 。

2、,5/25/2019,5,5.2 屏幕捕获程序设计,(1)界面设计 全屏幕捕获, 区域捕获/四边形,5/25/2019,6,(2) 关键函数及其引用方法,CreateDC() System.Runtime.InteropServices.DllImportAttribute(“gdi32.dll“) private static extern IntPtr CreateDC( string lpszDriver, / 驱动名称 string lpszDevice, / 设备名称 string lpszOutput, / 无用,可以设定位NULL IntPtr lpInitData / 任意的打

3、印机数据 );,5/25/2019,7,(2) 关键函数及其引用方法,BitBlt() System.Runtime.InteropServices.DllImportAttribute(“gdi32.dll“) private static extern bool BitBlt( IntPtr hdcDest, /目标设备的句柄 int nXDest, / 目标对象的左上角的X坐标 int nYDest, / 目标对象的左上角的Y坐标 int nWidth, / 目标对象的矩形的宽度 int nHeight, / 目标对象的矩形的长度 IntPtr hdcSrc, / 源设备的句柄 int

4、nXSrc, / 源对象的左上角的X坐标 int nYSrc, / 源对象的左上角的Y坐标 System.Int32 dwRop/ 光栅的操作值 );,5/25/2019,8,(3) 建立显示器DC,/创建显示器的DC IntPtr dcScreen=CreateDC(“DISPLAY“,null,null,(IntPtr)null); /由一个指定设备的句柄创建一个新的Graphics对象 Graphics g1=Graphics.FromHdc(dcScreen);,5/25/2019,9,(4) 全屏幕捕获,int tmpWidth,tmpHeight; tmpWidth=Screen.

5、PrimaryScreen.Bounds.Width; tmpHeight=Screen.PrimaryScreen.Bounds.Height; Image MyImage=new Bitmap(tmpWidth,tmpHeight,g1); Graphics g2=Graphics.FromImage(MyImage); /创建位图图形对象 IntPtr dc1=g1.GetHdc(); /获得窗体的上下文设备 IntPtr dc2=g2.GetHdc(); /获得位图文件的上下文设备 /写入到位图 BitBlt(dc2,0,0,tmpWidth,tmpHeight,dc1,0,0,133

6、69376); g1.ReleaseHdc(dc1); /释放窗体的上下文设备 g2.ReleaseHdc(dc2); /释放位图文件的上下文设备 /保存为jpeg文件 MyImage.Save(“Captured.jpg“,ImageFormat.Jpeg); pictureBox1.Image=MyImage;,5/25/2019,10,(5) 区域捕获,int tmpX=Convert.ToInt32(textBox1.Text); int tmpY=Convert.ToInt32(textBox2.Text); tmpWidth=Convert.ToInt32(textBox3.Tex

7、t); tmpHeight=Convert.ToInt32(textBox4.Text); int tmpRop=tmpWidth*tmpHeight; Image MyImage=new Bitmap(tmpWidth,tmpHeight,g1); Graphics g2=Graphics.FromImage(MyImage); /创建位图图形对象 IntPtr dc1=g1.GetHdc();/获得窗体的上下文设备 IntPtr dc2=g2.GetHdc();/获得位图文件的上下文设备 /写入到位图 BitBlt(dc2,0,0,tmpWidth,tmpHeight,dc1,tmpX,t

8、mpY,13369376); g1.ReleaseHdc(dc1); /释放窗体的上下文设备 g2.ReleaseHdc(dc2); /释放位图文件的上下文设备 /保存为jpeg文件 MyImage.Save(“Captured.jpg“,ImageFormat.Jpeg); pictureBox1.Image=MyImage;,5/25/2019,11,(6) 捕获程序演示,全屏幕捕获,区域屏幕捕获,5/25/2019,12,5.3 基于远程调用信道的远程屏幕监视程序设计,信道在应用程序之间跨远程处理边界(例如,应用程序域、进程和计算机)传输消息,这些跨越包括入站和出站。当前信道在终结点上侦

9、听入站消息,并将出站消息发送到终结点。 引用的命名空间为System.Runtime.Remoting(在 system.runtime.remoting.dll 中)。,5/25/2019,13,(1) 远程调用信道类,5/25/2019,14,(2) TcpServerChannel 类,5/25/2019,15,(3) TcpServerChannel 使用示例,using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting

10、.Channels.Tcp; using System.Security.Permissions;,5/25/2019,16,public class Server SecurityPermission(SecurityAction.LinkDemand) public static void Main() /建立服务器信道 TcpServerChannel serverChannel=new TcpServerChannel(9090); ChannelServices.RegisterChannel(serverChannel); /公开一个远程调用对象 RemotingConfigura

11、tion.RegisterWellKnownServiceType( typeof(Remotable),“Remotable.rem“,WellKnownObjectMode.Singleton); /显示信道的名称与优先级 Console.WriteLine(“Channel Name: 0“, serverChannel.ChannelName); Console.WriteLine(“Channel Priority: 0“,serverChannel.ChannelPriority); /显示信道的URI ChannelDataStore data=(ChannelDataStore

12、) serverChannel.ChannelData; foreach(string uri in data.ChannelUris) Console.WriteLine(uri); /等待调用 Console.WriteLine(“Listening.“); Console.ReadLine(); ,5/25/2019,17,(4) TcpChannel类,5/25/2019,18,(5) TcpClientChannel类,5/25/2019,19,命名空间描述,using System.IO; using System.Runtime.Remoting; using System.Ru

13、ntime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp;,5/25/2019,20,受控端设计,class MonitorServer static void Main(string args) TcpServerChannel channel=new TcpServerChannel(9000); ChannelServices.RegisterChannel(channel,false); RemotingConfiguration.RegisterWellKnownServiceType(typeof(Mon

14、itor), “MonitorServerUrl“,WellKnownObjectMode.SingleCall); Console.ReadLine(); ,基于TcpServerChannel类设计注册周知的服务名MonitorServerUrl,以便监控端发出控制要求。,5/25/2019,21,向远程开放的名为MonitorServerUrl的服务信道发出请求。如果成功,则获取其屏幕图像并显示。,5/25/2019,22,(6) 编程示例,向远程开放的名为MonitorServerUrl的服务信道发出请求。如果成功,则获取其屏幕图像并显示。,远程监视界面,5/25/2019,23,5.

15、4 基于TCP协议的远程屏幕监视程序设计,实例描述: 在双方连接建立完成后,由客户端每隔1秒自动捕获屏幕图像,并发送给控制端;控制端接收到全部数据后,立即显示到界面上。 控制端:P120 客户端 :P121-123,5/25/2019,24,本章小结,用途:广泛,实用; 难点:实时性,多路传输; 实现方法: 基于TCP协议和套接字技术; 基于UDP协议和套接字技术; 基于远程服务信道技术,是在.NET中新推出的方法。,5/25/2019,25,实验项目,1屏幕捕获过程中,如何解决屏幕闪烁的问题?请通过网络调研,分析有哪些高效率的屏幕捕获方法和网络传输技术? 2屏幕实时传输的优化问题:若将整个屏幕一次性发送的话,会因数据量太多而出现丢包现象,所以必须要进行拆包发送。一种方法是每次取屏幕上一小块的内容进行发送,一整屏需要截取多次进行部分传输。同时,在传输前先检测屏幕显示的内容有无变化,若无变化就不传输,从而减少网络通信量,提高监控效率。这些解决思路在多屏幕实时监测的应用中效果显著。 请按照这种思路,给出设计流程图,并基于TCP或UDP协议加以编程实现。 3按照UDP协议实现远程屏幕捕获功能,要求设计流程图,并参照5.4节编程实现。 4请完善本章程序,增加鼠标图像的远程捕获功能,并使之完全与屏幕图像的捕获同步。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号