社区
Delphi
帖子详情
远程监控
happy_mount
2000-04-28 09:49:00
我想用delphi来实现一个工控方面的远程监控程序。
可否提供一些思想。最好带例子。
...全文
359
6
打赏
收藏
远程监控
我想用delphi来实现一个工控方面的远程监控程序。 可否提供一些思想。最好带例子。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
happy_mount
2000-05-31
打赏
举报
回复
有三个问题:
1。下面是我的抓取屏幕的一段程序,但有时会出现抓的屏幕黑一块,
然后再抓一次,就出现位图的格式不对。
应该如何解决?
我想在Image2.Picture.Bitmap.LoadFromStream(RsltStream);
之前判断一下流rsltstream中是否为位图格式,若为,则image装
入,不是,就扔掉,再抓一次,应该怎么做?
screenlen:=socket.ReceiveLength;
clientsocket.Socket.ReceiveBuf(screendata,screenlen);
rsltstream.writeBuffer(screendata,screenlen);
if screenlen< BufSize then // 数据已读完
begin
try
begin
RsltStream.Position:=0;
Image2.Picture.Bitmap.LoadFromStream(RsltStream);
memo2.Lines.Add('hehe,接受完毕');
end;
finally
begin
TmpStream.Clear;
RsltStream.Clear;
c.Status:=0;
socket.Data:=c;
end;
end;
end
else
begin
TmpStream.Clear;
ReqCode:='start spy';
clientsocket.Socket.SendText(reqcode+edit3.Text);
memo2.Lines.Add('接受到');
end;
end;
2。我想用hook技术实时监控远方的屏幕,鼠标,键盘。
本地的hook不成问题,但怎么传到对方?
3。我想在本地获得远程的文件列表,除了用映射的方法外,
还有别的办法吗,映射的方法如何实现?
多谢大家,问题多多,还请谅解。
happy_mount
2000-05-07
打赏
举报
回复
多谢qinghao!
我要的不是ics控件。
可否能提供给我用socket发送命令,传送数据的例子?
多谢
qinghao
2000-05-07
打赏
举报
回复
你要的是ics控件吗?500多k,要发到你的邮箱里?
我先放到了ftp服务器上:<a href="ftp://ia.hust.edu.cn/incoming/ics控件/ics1.zip"ftp://ia.hust.edu.cn/incoming/ics控件/ics1.zip</a>
happy_mount
2000-05-06
打赏
举报
回复
冰河的原码哪里有?
happy_mount
2000-05-03
打赏
举报
回复
多谢qinghao!
请问有socket的例子么?
qinghao
2000-04-29
打赏
举报
回复
转自华南网木棉站
用Delphi实现远程屏幕抓取
山东巨力股份有限公司CAD中心
檀革勤
---- 在网络管理中,有时需要通过监视远程计算机屏幕来了解网上微机的使用情况。虽
然,市面上有很多软件可以实现该功能,有些甚至可以进行远程控制,但在使用上缺乏
灵活性,如无法指定远程计算机屏幕区域的大小和位置,进而无法在一屏上同时监视多
个屏幕。其实,可以用Delphi自行编制一个灵活的远程屏幕抓取工具,简述如下。
---- 一、软硬件要求。
---- Windows95/98对等网,用来监视的计算机(以下简称主控机)和被监视的计算机(
以下简称受控机)都必须装有TCP/IP 协议,并正确配置。如没有网络,也可以在一台计
算机上进行调试。
---- 二、实现方法。
---- 编制两个应用程序,一个为VClient.exe,装在受控机上,另一个为VServer.exe,
装在主控机上。VServer.exe指定要监视的受控机的IP地址和将要在受控机屏幕上抓取区
域的大小和位置,并发出屏幕抓取指令给VClient.exe,VClient.exe得到指令后,在受
控机屏幕上选取指定区域,生成数据流,将其发回主控机,并在主控机上显示出抓取区
域的BMP图象。由以上过程可以看出,该方法的关键有二:一是如何在受控机上进行屏幕
抓取,二是如何通过TCP/IP协议在两台计算机中传输数据。
---- UDP(User Datagram Protocol,意为用户报文协议)是Internet上广泛采用的通信
协议之一。与TCP协议不同,它是一种非连接的传输协议,没有确认机制,可靠性不如T
CP,但它的效率却比TCP高,用于远程屏幕监视还是比较适合的。同时,UDP控件不区分
服务器端和客户端,只区分发送端和接收端,编程上较为简单,故选用UDP协议,使用D
elphi 4.0提供的TNMUDP控件。
---- 三、创建演示程序。
---- 第一步,编制VClient.exe文件。新建Delphi工程,将默认窗体的Name属性设为“
Client”。加入TNMUDP控件,Name属性设为“CUDP”;LocalPort属性设为“1111”,让
控件CUDP监视受控机的1111端口,当有数据发送到该口时,触发控件CUDP的OnDataRece
ived事件;RemotePort属性设为“2222”,当控件CUDP发送数据时,将数据发到主控机
的2222口。
---- 在implementation后面加入变量定义
const BufSize=2048;{ 发送每一笔数据的缓冲区大小 }
var
BmpStream:TMemoryStream;
LeftSize:Longint;{ 发送每一笔数据后剩余的字节数 }
为Client的OnCreate事件添加代码:
procedure TClient.FormCreate(Sender: TObject);
begin
BmpStream:=TMemoryStream.Create;
end;
为Client的OnDestroy事件添加代码:
procedure TClient.FormDestroy(Sender: TObject);
begin
BmpStream.Free;
end;
为控件CUDP的OnDataReceived事件添加代码:
procedure TClient.CUDPDataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String);
var
CtrlCode:array[0..29] of char;
Buf:array[0..BufSize-1] of char;
TmpStr:string;
SendSize,LeftPos,TopPos,RightPos,BottomPos:integer;
begin
CUDP.ReadBuffer(CtrlCode,NumberBytes);{ 读取控制码 }
if CtrlCode[0]+CtrlCode[1]+CtrlCode[2]+CtrlCode[3]='show' then
begin { 控制码前4位为“show”表示主控机发出了抓屏指令 }
if BmpStream.Size=0 then { 没有数据可发,必须截屏生成数据 }
begin
TmpStr:=StrPas(CtrlCode);
TmpStr:=Copy(TmpStr,5,Length(TmpStr)-4);
LeftPos:=StrToInt(Copy(TmpStr,1,Pos(':',TmpStr)-1));
TmpStr:=Copy(TmpStr,Pos(':',TmpStr)+1,Length(TmpStr)
-Pos(':',TmpStr));
TopPos:=StrToInt(Copy(TmpStr,1,Pos(':',TmpStr)-1));
TmpStr:=Copy(TmpStr,Pos(':',TmpStr)+1,Length(TmpStr)-
Pos(':',TmpStr));
RightPos:=StrToInt(Copy(TmpStr,1,Pos(':',TmpStr)-1));
BottomPos:=StrToInt(Copy(TmpStr,Pos(':',TmpStr
)+1,Length(TmpStr)-Pos(':',TmpStr)));
ScreenCap(LeftPos,TopPos,RightPos,BottomPos); {
截取屏幕 }
end;
if LeftSize>BufSize then SendSize:=BufSize
else SendSize:=LeftSize;
BmpStream.ReadBuffer(Buf,SendSize);
LeftSize:=LeftSize-SendSize;
if LeftSize=0 then BmpStream.Clear;{ 清空流 }
CUDP.RemoteHost:=FromIP; { FromIP为主控机IP地址 }
CUDP.SendBuffer(Buf,SendSize); { 将数据发到主控机的2222口 }
end;
end;
其中ScreenCap是自定义函数,截取屏幕指定区域,
代码如下:
procedure TClient.ScreenCap(LeftPos,TopPos,
RightPos,BottomPos:integer);
var
RectWidth,RectHeight:integer;
SourceDC,DestDC,Bhandle:integer;
Bitmap:TBitmap;
begin
RectWidth:=RightPos-LeftPos;
RectHeight:=BottomPos-TopPos;
SourceDC:=CreateDC('DISPLAY','','',nil);
DestDC:=CreateCompatibleDC(SourceDC);
Bhandle:=CreateCompatibleBitmap(SourceDC,
RectWidth,RectHeight);
SelectObject(DestDC,Bhandle);
BitBlt(DestDC,0,0,RectWidth,RectHeight,SourceDC,
LeftPos,TopPos,SRCCOPY);
Bitmap:=TBitmap.Create;
Bitmap.Handle:=BHandle;
BitMap.SaveToStream(BmpStream);
BmpStream.Position:=0;
LeftSize:=BmpStream.Size;
Bitmap.Free;
DeleteDC(DestDC);
ReleaseDC(Bhandle,SourceDC);
end;
存为“C:\VClient\ClnUnit.pas”和“C:\VClient\VClient.dpr”,
并编译。
---- 第二步,编制VServer.exe文件。新建Delphi工程,将窗体的Name属性设为“Serv
er”。加入TNMUDP控件,Name属性设为“SUDP”;LocalPort属性设为“2222”,让控件
SUDP监视主控机的2222端口,当有数据发送到该口时,触发控件SUDP的OnDataReceived
事件;RemotePort属性设为“1111”,当控件SUDP发送数据时,将数据发到受控机的11
11口。加入控件Image1,Align属性设为“alClient”;加入控件Button1,Caption属性
设为“截屏”;加入控件Label1,Caption属性设为“左:上:右:下”;加入控件Edi
t1,Text属性设为“0:0:100:100”;加入控件Label2,Caption属性设为“受控机IP地
址”;加入控件Edit2,Text属性设为“127.0.0.1”;
在implementation后面加入变量定义
const BufSize=2048;
var
RsltStream,TmpStream:TMemoryStream;
为Server的OnCreate事件添加代码:
procedure TServer.FormCreate(Sender: TObject);
begin
RsltStream:=TMemoryStream.Create;
TmpStream:=TMemoryStream.Create;
end;
为Client的OnDestroy事件添加代码:
procedure TServer.FormDestroy(Sender: TObject);
begin
RsltStream.Free;
TmpStream.Free;
end;
为控件Button1的OnClick事件添加代码:
procedure TServer.Button1Click(Sender: TObject);
var ReqCode:array[0..29] of char;ReqCodeStr:string;
begin
ReqCodeStr:='show'+Edit1.Text;
StrpCopy(ReqCode,ReqCodeStr);
TmpStream.Clear;
RsltStream.Clear;
SUDP.RemoteHost:=Edit2.Text;
SUDP.SendBuffer(ReqCode,30);
end;
为控件SUDP的OnDataReceived事件添加代码:
procedure TServer.SUDPDataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String);
var ReqCode:array[0..29] of char;ReqCodeStr:string;
begin
ReqCodeStr:='show'+Edit1.text;
StrpCopy(ReqCode,ReqCodeStr);
SUDP.ReadStream(TmpStream);
RsltStream.CopyFrom(TmpStream,NumberBytes);
if NumberBytes< BufSize then { 数据已读完 }
begin
RsltStream.Position:=0;
Image1.Picture.Bitmap.LoadFromStream(RsltStream);
TmpStream.Clear;
RsltStream.Clear;
end
else
begin
TmpStream.Clear;
ReqCode:='show';
SUDP.RemoteHost:=Edit2.Text;
SUDP.SendBuffer(ReqCode,30);
end;
end;
存为“C:\VServer\SvrUnit.pas”和
“C:\VServer\VServer.dpr”,并编译。
---- 四、测试。
---- 1、本地机测试:在本地机同时运行Vserver.exe和VClient.exe,利用程序的默认
设置,即可实现截屏。查看“控制面板”-“网络”-“TCP/IP”-“IP地址”,将程序的
“客户IP地址”设为该地址 ,同样正常运行。
---- 2、远程测试:选一台受控机,运行VClient.exe;另选一台主控机,运行VServer
.exe,将“受控机IP地址”即Edit2的内容设为受控机的IP地址,“截屏”即可。以上简
要介绍了远程屏幕抓取的实现方法,至于在主控机上一屏同时监视多个受控机,读者可
自行完善。以上程序,在Windows98对等网、Delphi 4.0下调试通过。
--
远程
监控
(C#源代码)
远程
监控
(C#源代码)
远程
视频视频
监控
源程序(C++实现)
这个程序是用C++语言编写的
远程
监控
系统,有兴趣的朋友可以参考一下,里面重点是附加了说明和结构图,内容比较丰富
Android
远程
异常
监控
-- U-APM SDK
本课程 讲解 Umeng APM SDK 助您深入了解应用的性能和稳定性,帮助您高效提升应用质量 异常处理 Android高级开发的必备技能,Umeng APM 是开发中常用SDK,主要用于发版后异常
远程
定位;1、捕获采集类型丰富支持Java、Native、Swift、Objective-C、ANR、自定义异常的捕捉2、快速定位错误根源提供行为日志、详细日志、内存快照、设备信息、自定义字段,帮您快速发现问题原因,提升问题解决效率3、主流热门机型随时随地获取海量Android和iOS云端真机, 稳定不掉线,操作流畅无延迟,省却百万真机购入费用,保障App质量4、课程内容都是来自公司实战经验,绝非书本理论。
EV 电动汽车
远程
监控
系统
EV电动汽车
远程
监控
系统
远程
监控
系统简介
远程
监控
系统是车载记录设备(称为车载
远程
监控
终端)将车辆的定位信息、CAN总线信息和故障信息,通过GPRS/3G无线网络,发送到
远程
监控
中心的数据服务器,并最终可通过页面...
wifi摄像模组连接手机
远程
监控
的操作方法,家里
监控
怎么连接手机
远程
监控
WiFi摄像机种类有很多,比如无线WiFi模组摄像机,4G无线
远程
监控
摄像机,移动WiFi加WiFi摄像机组合配置。看到WiFi一词,那么我们想到的就是无线
远程
监控
。利用无线WiFi传输数据,在手机下载APP软件,配对之后,从而...
Delphi
5,391
社区成员
262,737
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章