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);
}
}
}