远程截屏,急啊~~~ ( 积分: 100 )

  • 主题发起人 主题发起人 赛特
  • 开始时间 开始时间

赛特

Unregistered / Unconfirmed
GUEST, unregistred user!
服务器:
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
jpg:TJpegImage;
Str:String;
begin
AData.Seek(0,0);
SetLength(Str,AData.Size);
AData.Read(Str[1],AData.Size);

if Pos('Send File:File Length:',Str)>0 then
begin
Delete(Str,1,Length('Send File:File Length:'));
FileSize:=StrToIntDef(Str,0);
if Stream<>nil then
begin
Stream.Free;
Stream:=nil;
end;
Stream:=TMemoryStream.Create;
Str:='Recived File Length OK!';
Statictext1.Caption:=inttostr(filesize);
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, Str[1], Length(Str));
end
else if Pos('Send File:File End!',Str)>0 then
begin
//显示图片 [red]这里有问题啊[/red]
try
jpg := TJpegImage.Create;
Stream.Position:=0;
//jpg.LoadFromStream(Stream);
Statictext2.Caption:=inttostr(Stream.Size);
Image1.Picture.Bitmap.LoadFromStream(Stream);
Statictext3.Caption:='yes';
jpg.Free;
except
end;

if Stream<>nil then
begin
Stream.Free;
Stream:=nil;
Str:='Recived File OK!';
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, Str[1], Length(Str));
end;
FileSize:=0;
end
else
begin
if Stream<>nil then
begin
Stream.Seek(0,2);
AData.Seek(0,0);
Stream.CopyFrom(AData,AData.Size);
Str:='Recived File Package OK!';
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, Str[1], Length(Str));
Application.ProcessMessages;
end;
end;
end;

客户端:
procedure TForm1.Timer1Timer(Sender: TObject);
var
MyBmp: TBitmap;
jpg:TJpegImage;

p:Array[0..1023] of byte;
Posi,Len:Integer;
ReceivedString:string;
begin
Timer1.Enabled:=false;
ScreenCap(MyBmp, true); //本地截屏,保存在MyBmp中
memStream := TMemoryStream.Create;
jpg := TJpegImage.Create;
jpg.Assign(MyBmp);
jpg.CompressionQuality := 50;
jpg.JPEGNeeded;
jpg.Compress;
jpg.SaveToStream(memStream);
jpg.Free;

IdUDPClient1.Host:='127.0.0.1';
IdUDPClient1.Port:=9001;
IdUDPClient1.Active:=True;
try
Posi:=0;
IdUDPClient1.Send('Send File:File Length:'+IntToStr(memStream.Size));
ReceivedString := IdUDPClient1.ReceiveString();
if UpperCase(ReceivedString)='RECIVED FILE LENGTH OK!' then
begin
While Posi<memStream.Size do
begin
Len:=1024;
if memStream.Size-Posi<1024 then Len:=memStream.Size-Posi;
memStream.Read(p,Len);
IdUDPClient1.SendBuffer(P,Len);
Inc(Posi,Len);
ReceivedString := IdUDPClient1.ReceiveString();
if UpperCase(ReceivedString)<>'RECIVED FILE PACKAGE OK!' then break;
Application.ProcessMessages;
end;
IdUDPClient1.Send('Send File:File End!');
end
else
ShowMessage('Send file cancel!');
finally
memStream.Free;
end;
MyBmp.Free;
end;

显示图片那里出现问题,而且Stream.size也能准确的等于客户端这边发送的长度,但就是显示图片要报错?
 
最终还是自己解决啦!
 
进来,捡分,走人...[:)]
 
捡分我也来了.
 
JPG的流还用Bitmap?? // Image1.Picture.Bitmap.LoadFromStream(Stream);
请改Image1.Picture.Load....。
而且 //jpg.LoadFromStream(Stream);
[blue] jpg := TJpegImage.Create;[/blue]
Stream.Position:=0;
[red] //jpg.LoadFromStream(Stream);[/red]
Statictext2.Caption:=inttostr(Stream.Size);
Image1.Picture.Bitmap.LoadFromStream(Stream);
Statictext3.Caption:='yes';
[blue] jpg.Free;[/blue]

都没用了还放在干么?
 
这样程序结构可不怎么样。
 
可能由于图片太大,显示端的延时太厉害了。我就把桌面分成了几块,再用几个线程同时发送。这样做延时稍微好些了,但发送端的CPU占用率才叫高哦,100%。最关键的问题是,发送端这边,不响应“鼠标双击”了,但其它操作都没感觉慢,右键再打开都能很快反应。响应“鼠标双击”的问题该如何解决哦?或者远程截屏有其它方法?
 
你參考盒子上的幾個代碼吧,你這種方法CPU不高才怪。[:)]
 
to guanyueguan:
我不知道具体是找哪方面的资料,能直接把网址发给我吗?或者直接讲该如何写(盒子打不开了)?谢谢
 
如果是win2000,一定会出现卡的现象,xp 就没有这个问题
 
CPU占用率太高,鼠标双击响应有影响,该如何解决啊????
 
帮你一把,看我的问题,答案多多:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=538683
 
to wql:
网页上有错误,打不开!
 
等了好多天了,哪位高手能不能帮忙啊,太谢谢了,联系QQ:370099725
 
幫忙倒是可以,有沒點回報啊。
 
发现这个论坛太专业了[:(][:(][:(]
 
如何解决啊??
 
现在压缩了再传,速度又要快些了,但还是有一个问题,就是当把帧数设置高时,发送端鼠标双击的响应受影响了,几乎完全不响应鼠标双击了,其它一切都感觉不出来正在发送图片.如何解决响应鼠标双击这个问题啊?
问题的本身可能还是,虽然经过压缩,但传的内容还是太大,CPU的占用也在50%左右,才导致了发送端的鼠标双击被干扰。我想要解决这个,最根本的还是要减少传输的数据量,如果哪位能慷慨讲解优化方法,比如隔行呀、只传变化部分呀之类的,万分感谢!(还请说得比较具体些,我也刚接触这个不久,呵呵[:D])
 
我有源代码,送给你。。。。。QQ:117697830联系我
 
帮你顶,接个分
 

Similar threads

I
回复
0
查看
675
import
I
I
回复
0
查看
761
import
I
I
回复
0
查看
583
import
I
I
回复
0
查看
573
import
I
后退
顶部