快速远程屏幕传输Indy10版

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

//主要思路是guanyueguan(BCB_DG)http://iamgyg.blog.163.com的高速屏传代码

这是其中主要的代码

unit UntMonitorThread;

interface

uses
IdTCPClient, Classes, windows,Graphics,ZLibEx,IdGlobal;


const
DEF_STEP = 19;
OFF_SET = 24;

type
PCapCmd = ^TCapCmd;
TCapCmd = packed record
    Cmd:    Byte;
    Size:   Integer;
    Width: Word;
    Height: Word;
end;

    PCtlCmd = ^TCtlCmd;
TCtlCmd = packed record
    Cmd: Byte;
    X, Y: Word;
end;

TStripMonitorThread = class(TThread)
private
    FScrStream: TMemoryStream;
    FSendStream: TMemoryStream;
    FFullBmp, FLineBmp, FRectBmp: TBitmap;
    FWidth, FHeight, FLine: Integer;
    FRect: TRect;
    FDC: HDC;
    FSocket: TIdTCPClient;
    FCmd: TCapCmd;
    FPixelFormat: TPixelFormat;
    FIncSize: Byte;
    first:boolean;
    //
    function CheckScr: Boolean;
    function GetFirst: Boolean;
    function GetNext: Boolean;
    function Compress: Boolean;
    function SendInfo: Boolean;
    function SendData: Boolean;
    procedure CopyRect(rt: TRect);
    procedure SetPixelFormat(Value: TPixelFormat);


protected
    procedure Execute; override;
public
    constructor Create;
    destructor Destroy; override;
    property Socket: TIdTCPClient read FSocket;
    property PixelFormat: TPixelFormat read FPixelFormat write SetPixelFormat;
end;

implementation

uses Unit1,DisposalCmdUnit;

constructor TstripMonitorThread.Create;
begin
inherited Create(true);

FSocket:=TIdTCPClient.Create(nil);
//Fsocket.IOHandler.RecvBufferSize:= 4096;
// Fsocket.IOHandler.SendBufferSize:= 4096;
//Fsocket.ReadTimeout:=15000;
FScrStream   := TMemoryStream.Create;
FSendStream := TMemoryStream.Create;
FFullBmp := TBitmap.Create;
FLineBmp := TBitmap.Create;
FRectBmp := TBitmap.Create;
FWidth   := 0;
FHeight := 0;
FIncSize := 4;
//case ThisPicPixFmt of //转换的像素颜色位 1 2 4 8 16 24 32
FPixelFormat := pf8bit;
   // 5: FPixelFormat := pf32bit;
// else
   // FPixelFormat := pf32bit;
// end;
FreeOnTerminate := True; //主动释放,不是自动释放
Suspended := False; //立即执行
ScreenOver:=True;
end;

destructor TStripMonitorThread.Destroy;
begin
FSocket.Free;
ScreenOver:=false;
FScrStream.Free;
FSendStream.Free;
FRectBmp.Free;
FFullBmp.Free;
FLineBmp.Free;
inherited destroy;
end;

procedure TStripMonitorThread.Execute;
var
CmdBuf: array[0..SizeOf(TCtlCmd) - 1] of Byte;
pt: TPoint;
Request:string;
buf:TidBytes;
begin
   if form1.ConRpcport(FSocket) then
   begin
     try
       FSocket.IOHandler.Write('002'+EOL);
     except
       FSocket.Free;
       Exit;
     end;
     Request:=FSocket.IOHandler.ReadLn(EOL);
   end;
   if CheckScr then First :=true;
   try
     repeat
      FSocket.IOHandler.ReadBytes(buf, SizeOf(TCtlCmd));
      BytesToRaw(buf,CmdBuf,sizeof(TCtlCmd));
      if TCtlCmd(CmdBuf).Cmd in [1..5] then
      begin
        pt := Point(TCtlCmd(CmdBuf).X, TCtlCmd(CmdBuf).Y);
        SetCursorPos(pt.X, pt.Y);
        SetCapture(WindowFromPoint(pt));
      end;
      case TCtlCmd(CmdBuf).Cmd of
        8: if First then GetFirst else GetNext;
        0: PixelFormat := TPixelFormat(TCtlCmd(CmdBuf).X);
        1: ;//mouse move
        2: mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
        3: mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
        4: mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
        5: mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
        6: keybd_event(Byte(TCtlCmd(CmdBuf).X), MapVirtualKey(Byte(TCtlCmd(CmdBuf).X), 0), 0, 0);
        7: keybd_event(Byte(TCtlCmd(CmdBuf).X), MapVirtualKey(Byte(TCtlCmd(CmdBuf).X), 0), KEYEVENTF_KEYUP, 0);
      end;
     until FSocket.Connected=False;
   except
   end;
   FSocket.Disconnect;
end;


function TStripMonitorThread.CheckScr: Boolean;
var
nWidth, nHeight: Integer;
begin
Result := False;
nWidth := GetSystemMetrics(SM_CXSCREEN);//取得屏幕长宽
nHeight := GetSystemMetrics(SM_CYSCREEN);
if (nWidth <> FWidth) or (nHeight <> FHeight) then
begin
    FWidth := nWidth;
    FHeight := nHeight;
    FFullBmp.Canvas.Lock;
    FLineBmp.Canvas.Lock;
    FRectBmp.Canvas.Lock;
    FFullBmp.Width := FWidth;
    FFullBmp.Height := FHeight;
    FLineBmp.Width := FWidth;
    FLineBmp.Height := 1;
    FFullBmp.PixelFormat := FPixelFormat;
 &nbs

Delphi局域网聊天_INDY控件的使用实例 内容索引:Delphi源码,网络相关,聊天,局域网  Delphi局域网聊天,界面看上去还不错,模仿QQ窗体的,这里主要是练习INDY这个超级的Internet控件集,因此程序编译时你必须导入它才对哦,请到网上自行下载。 立即下载

相关推荐

delphi INDY控件使用指南

不错的Indy 资料。CSDN上有人上传过了。他说的十分。我下了,看了看写的不错,还整理了下。要想学习Indy9的话可以下来看看。

LineCapShow.rar_屏幕 delphi_视频传输_远程_远程传输_远程屏幕传输

远程屏幕传输 (差异截图),一个远程视频传输的简单实现代码,用到DSPACK控件.

DELPHI 远程屏幕传输技术.分块,隔行扫描方式快速传输

DELPHI 远程屏幕传输技术.分块,隔行扫描方式快速传输 里面包括C语言和DELPHI的源码 主要是传输变化部分,那么占用带宽就相应变小了.

如何安装Indy10

    网上有很多如何安装Indy10的文章,但我觉得都有些不妥,所以把自己是如何安装indy的方法写出来,供大家能考。由于本人还是属于菜鸟阶级,有什么错误还请大家批评指正,我的信箱:purplepower99@sina.com.cn。下面就介绍我的安装方法。我用的是Delphi7,所以就以D7为例进行说明。首先要卸载Delphi7中的Indy9。 ↓1、进入D7的目录,双击Borla

Purplepower的专栏 8918

indy10安装方法

首先要卸载Delphi7中的Indy9. 卸载方法如下: 1、进入D7的目录,双击Borland Delphi7.msi。 2、在弹出的对话框中选“Modify”。 3、然后点“Next”,在接下来的对话框中,找到Indy,点“Do Not Install”。之后一路“Next”,最后完成,就卸载成功了。     安装: 1、把下列路径加入Delphi的Library Path i

6395

用UDP协议的木马编写方法(Delphi

用UDP协议的木马编写方法(Delphi)2006-12-03 16:11     木马的一个很重要的功能就是远程监视屏幕,下面的文章讲述了怎样利用UDP协议来实现,而不是我们通常用到的tcp/ip协议,很有特色,值得一学。  一、软硬件要求。  Windows95/98对等

2004

ftpforcedirectories indyftp

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34375054的博客 97

Delphi跨平台开发全解析:从VCL/FMX架构到多平台实战部署

跨平台开发是现代软件开发的核心需求,旨在通过单一代码库构建可运行于多种操作系统和设备上的应用程序,以提升开发效率并扩大产品覆盖范围。其技术原理通常依赖于抽象层和运行时环境,将通用逻辑与平台特定实现分离。在众多技术方案中,原生性能与开发效率的平衡是关键价值考量。Delphi语言通过其独特的VCL与FireMonkey双架构体系,为开发者提供了从传统Windows桌面到现代移动与服务器平台的完整跨平台解决方案。本文将深入解析FireMonkey框架如何通过自绘引擎和服务抽象层实现“一次编写,随处编译”,并结合实

weixin_34335458的博客 457

delphi开发的一个高速屏幕传输演示代(功能很强大)!!!

delphi开发的一个高速屏幕传输演示代(功能很强大)

indy10 最新官方例子

indy10 最新官方例子,绝对可用2013年2月

indy10_demosindy10_demos

indy10_demosindy10_demos

升级 RAD Studio 2009 的网络组件 Indy1010.2.3 到 10.5.5

Indy 10.5.5  适用于:  CodeGear RAD Studio 2009  Delphi for Win32  +  C++BuilderLara.style 右手拉拉の精品城堡今天得到了 Indy 10.5.5 本,从代码看,应该是 RAD Studio 下一个本的本,因为 Unicode 环境下采用的字符串编码器的设计就与 10.2.3 完全不同。

sczyq的专栏 6415

如何安装indy10

首先要卸载Delphi中的Indy9。 1、执行安装盘的Setup。 2、在弹出的对话框中选“Modify”。 3、然后点“Next”,在接下来的对话框中,找到Indy,点“Do Not Install”。之后一路“Next”,最后完成,就卸载成功了。 卸载完成后,就可以安装了。去Indy的主页下Indy10,http://www.indyproject.org/ (正式发布的很旧了

YanJinrong的专栏 1027

【免费下载】 轻松集成:Indy10 完全安装,Delphi 开发者的福音

轻松集成:Indy10 完全安装,Delphi 开发者的福音 【下载地址】Indy10完全安装附带详细教程D72010 本仓库提供了一个名为 `indy10.2.3 full 完全安装 D7~2010本` 的资源文件下载。该资源文件包含了 Indy10.2.3 在 Delphi 7 至 Delphi 2010 ...

gitblog_09808的博客 1190

【亲测免费】 Delphi Indy10 说明帮助文档:网络编程的得力助手

Delphi Indy10 说明帮助文档:网络编程的得力助手 【下载地址】DelphiIndy10说明帮助文档 Delphi Indy10 说明帮助文档 项目地址: https://gitcode.com/open-source-...

gitblog_09727的博客 580

Delphi 7-XE系列升级安装Indy10.6

由于低Indy无法满足网络技术的日益更新,如SSL/TLS请求、RawHeaders与Cookie管理等问题处理。 我本身一直在用Delphi 2007,因为D2009开始底层的编码已不同,旧项目升级XE的话工程量太大,曾升级到Indy 10.2.3解决了SSL问题,后来个别web请求无法返回隐藏数据又升级到10.5.8解决,但同时却发现IdCookieManager不够完美,在个别web的请求上出现无法识别SetCookie,所以现在升级到XE7Indy 10.6,终于完美解决了。本想升级到更高

疯流人物 2285
上一篇: 高级语言实现文件感染的方法
下一篇: 用户提信客户端
iiprogram
博客等级 码龄25年 1066粉丝 1515原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值