c#实现远程截取屏幕:发送端和接收端C/S----C/S

这是一个C#实现的远程屏幕截取应用程序,分为发送端和接收端。发送端通过捕获屏幕并保存为图像,然后利用Socket发送到接收端。接收端监听特定端口,接收到数据后将图像数据还原并保存为文件。
摘要由CSDN通过智能技术生成

 顺序:先点监听,再点连接,再点发送,再点接收

 

 

发送端

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Drawing.Imaging;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace Example023_屏幕捕获程序
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
      
        ///   <summary>  
        ///   应用程序的主入口点。  
        ///   </summary>  
      
        [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   //   光栅的操作值  
        );

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

        System.Net.Sockets.Socket sendsocket = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
        //实例化socket
        System.Net.IPEndPoint ipendpiont = new System.Net.IPEndPoint(System.Net.IPAddress.Parse("127.0.0.1"),8888);  //服务器的IP和端口//因为客户端只是用来向特定的服务器发送信息,所以不需要绑定本机的IP和端口。不需要监听。

    //连接
        private void button2_Click(object sender, EventArgs e)
        {

           // sendsocket.Connect(ipendpiont);
            try
            {
               sendsocket.Connect(ipendpiont);
               MessageBox.Show("连接成功!");
       
            }
            catch (Exception se)
            {
                MessageBox.Show("连接错误" + se.Message, "提示信息", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);
                return;
            } 
        }

 

//发送

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                this.Hide();
                IntPtr dc1 = CreateDC("DISPLAY", null, null, (IntPtr)null);
                //创建显示器的DC  
                Graphics g1 = Graphics.FromHdc(dc1);
                //由一个指定设备的句柄创建一个新的Graphics对象
                Bitmap 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);
                //释放位图句柄  
                MyImage.Save("d://新建文件夹//MyJpeg.jpg", ImageFormat.Jpeg);  //当然你也可以根据自己的需要,把屏幕以其他图片的格式来保存,如果你想把图片保存为位图文件,可以把"ImageFormat.Jpeg"改换成"ImageFormat.Bmp";想把图片保存为Gif文件,就把"ImageFormat.Jpeg"改换成"ImageFormat.Gif"。你可以保存的文件类型大概有十多种,这里就不一一介绍了,当然你也要相应改变保存文

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值