C#实现远程屏幕监控

在客户端解取到屏幕之后,可以保存为图片,但是要实现远程监控的话,要把他保存到流里发给服务端,再显示在服务端的picturebox里,,请问这中间怎么传输,!
小弟在此先谢谢各位了,!代码如下
我的Email:thify@qq.com

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Threading;
using System.Net;
using System.IO;

namespace THClient
{
    public partial class Form1 : Form
    {
        private Socket socket = null;
        private NetworkStream ns = null;
        private StreamReader sr = null;
        private StreamWriter sw = null;
        private Thread tcpThread = null;
        private TcpClient tcpclient = null;
        public Form1()
        {
            InitializeComponent();
        }

        [System.Runtime.InteropServices.DllImport("gdi32.dll")]
        private static extern IntPtr CreateDC(
              string lpszDriver, // 驱动名称
              string lpszDevice, // 设备名称
              string lpszOutput, // 无用,可以设定位"NULL"
              IntPtr lpInitData // 任意的打印机数据
            );

        [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
        private static extern bool BitBlt(
        IntPtr hdcDest, //目标设备的句柄 
        int nXDest, // 目标对象的左上角的X坐标 
        int nYDest, // 目标对象的左上角的X坐标 
        int nWidth, // 目标对象的矩形的宽度 
        int nHeight, // 目标对象的矩形的长度 
        IntPtr hdcSrc, // 源设备的句柄 
        int nXSrc, // 源对象的左上角的X坐标 
        int nYSrc, // 源对象的左上角的X坐标 
        System.Int32 dwRop // 光栅的操作值 
        );

        public void capture()
        {

            //this.Visible = false;
            IntPtr dc1 = CreateDC("DISPLAY", null, null, (IntPtr)null);
            //创建显示器的DC 
            Graphics g1 = Graphics.FromHdc(dc1);
            //由一个指定设备的句柄创建一个新的Graphics对象 
            System.Drawing.Image MyImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, g1);
            //根据屏幕大小创建一个与之相同大小的Bitmap对象 
            Graphics g2 = Graphics.FromImage(MyImage);
            //获得屏幕的句柄 
            IntPtr dc3 = g1.GetHdc();
            //获得位图的句柄 
            IntPtr dc2 = g2.GetHdc();
            //把当前屏幕捕获到位图对象中 
            BitBlt(dc2, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, dc3, 0, 0, 13369376);
            //把当前屏幕拷贝到位图中 
            g1.ReleaseHdc(dc3);
            //释放屏幕句柄 
            g2.ReleaseHdc(dc2);
            //释放位图句柄 
            //MemoryStream ms = new MemoryStream();
          //  MyImage.Save(ns,System.Drawing.Imaging.ImageFormat.Jpeg);
            //sw.Write(s);
            System.Random r = new Random();
            int s = r.Next();
            MyImage.Save("c:\\j" s "peg.jpg",              System.Drawing.Imaging.ImageFormat.Jpeg);
          //  MessageBox.Show("已经把当前屏幕保存到C:\\MyJpeg.jpg文件中!");
            //this.Visible = true;
      
           
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            tcpThread = new Thread(new ThreadStart(connect));
            tcpThread.Start();
        }

        public void connect()
        { 
             try
            {
               tcpclient = new TcpClient("127.0.0.1", 9420);
                ns = tcpclient.GetStream();
                while (true)
                { 
                   capture();
                   
                }
              
            }
            catch (Exception ex)
            {
                MessageBox.Show("不能连接主机!" ex.Message );
            }
          
            //sw = new StreamWriter(ns);
           // sr = new StreamReader(ns);
           

        }



    }
}

posted @ 2008-10-23 11:13  Landy_di  阅读(561)  评论(0编辑  收藏  举报