远程截取屏幕不能多次发送消息 ( 积分: 50 )

  • 主题发起人 主题发起人 兔子帅死了
  • 开始时间 开始时间

兔子帅死了

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure SaveScrToStream(); //屏幕截取函数
var winHWND :integer;
winDC:integer;
rect:TRect;
fBitmap:TBitmap;
begin
winHWND := GetDesktopWindow();
winDC := GetDC(winHWND);
fBitmap := TBitmap.create;
fBitmap.width := screen.Width;
fBitmap.height := screen.Height;

BitBlt(fBitmap.canvas.handle, 0, 0, fBitmap.width, fBitmap.height, winDC, 0, 0, SRCCOPY);
fBitmap.SaveToFile('c:/aa.bmp');
fBitmap.PixelFormat :=pf8bit;
fBitmap.Free;
end;

//连接要做的事
procedure TForm1.CS_Connect(Sender: TObject; Socket: TCustomWinSocket);
begin

m.Position := 0;

socket.SendStream(m);

cs.OnDisconnect:=CS_DisConnect;
end;
//关闭
procedure TForm1.CS_DisConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
(Sender as TClientSocket).socket.close;
end;
//点击按钮发送消息
procedure TForm1.Button1Click(Sender: TObject);

begin
cs:= TClientSocket.Create(nil);
cs.Host:='192.168.0.21';
cs.Port:= 1234;


SaveScrToStream();

m.Free;

m := tfilestream.Create('C:/aa.bmp',fmOpenRead );

cs.OnConnect:= CS_Connect;

cs.Open;
end;

第一次在服务器端已经完整传过去了,第二次的时候出现External exception C0000008的错误
 
米人知道吗~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
cs是啥?局部变量吗?似乎创建了之后没有释放吧?
 
兔子帅死了
楼主的兔子可是萨维傲拉??
 
cs是动态创建的吧???为什么不直接用控件??而且创建了没有销毁呀
 
CS是全局变量,clientsocket。是动态创建的~~~~~~关闭应用程序之前才需要销毁吧~~

偶这个想连续发数据流~~

不需要每次都销毁吧~~~~~

那个那个不懂3楼的意思~~~~~~~~~
 
高手加QQ。。68758407
 
我给你段代码 是用INDY来实现的
发送端:
var
Temp:TMemoryStream;
begin
Temp:=TMemoryStream.Create;
Image1.Picture.Graphic.saveToStream(Temp);
IdTCPClient1.connect();
IdTCPClient1.WriteStream(Temp);
IdTCPClient1.disConnect();
Temp.free;
end;
接受端:
TIdTCPServer的OnExecute方法中:
var
Temp:TMemoryStream;
begin
Temp:=TMemoryStream.Create;
AThread.Connection.ReadStream(Temp,-1,True);
Temp.SaveToFile('C:/aaa.bmp');
Temp.Free;
end;
 
多人接受答案了。
 
后退
顶部