?? rdclientmain.pas
字號:
unit rdClientMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdTCPServer, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, StdCtrls, ExtCtrls,jpeg, ComCtrls, ToolWin;
type
TForm1 = class(TForm)
IdTCPClient1: TIdTCPClient;
IdTCPServer1: TIdTCPServer;
Memo1: TMemo;
ScrollBox1: TScrollBox;
Image1: TImage;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
Timer1: TTimer;
procedure ToolButton1Click(Sender: TObject);
procedure IdTCPClient1Disconnected(Sender: TObject);
procedure IdTCPClient1Connected(Sender: TObject);
procedure ToolButton3Click(Sender: TObject);
procedure Memo1Change(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure IdTCPServer1Execute(AThread: TIdPeerThread);
procedure IdTCPServer1Disconnect(AThread: TIdPeerThread);
procedure IdTCPServer1Connect(AThread: TIdPeerThread);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
bmpScreen: TBitmap;
jpg: TJPEGImage;
public
{ Public declarations }
function GetScreenBmp:Boolean;
function SendSelfDeskTop:Boolean;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
begin
with AThread.Connection.Socket.Binding do
begin
Memo1.Lines.Add(Format('%s: %d 已經登陸!',[PeerIP,PeerPort]))
end;
end;
procedure TForm1.IdTCPServer1Disconnect(AThread: TIdPeerThread);
begin
with AThread.Connection.Socket.Binding do
begin
Memo1.Lines.Add(Format('%s: %d 退出!',[PeerIP,PeerPort]))
end;
end;
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
ms: TMemoryStream;
buf: array[0..1023] of Char;
begin
ms := TMemoryStream.Create;
AThread.Connection.ReadStream(ms,-1,true);
ms.Position := 0;
ms.ReadBuffer(buf,ms.Size);
Memo1.Lines.Add(buf);
ms.Free;
end;
function TForm1.GetScreenBmp: Boolean;
var
dc: HDC;
begin
Result := True;
try
dc := GetDC(0);
BitBlt( bmpScreen.Canvas.Handle, 0, 0, Screen.Width,screen.Height, dc,
0, 0, SRCCOPY );
// bmpScreen.SaveToFile('D:\Project\DTmp\Socket\RemoteDesktop\a.bmp');
// OutputDebugString(PChar(FormatDateTime('yyyy-mm-dd hh:mm:ss zzz',now)));
jpg.Assign(bmpScreen);
// jpg.SaveToFile('D:\Project\DTmp\Socket\RemoteDesktop\a.jpg');
// OutputDebugString(PChar(FormatDateTime('yyyy-mm-dd hh:mm:ss zzz',now)));
ReleaseDC(0,dc);
Image1.Picture.Assign(jpg);
except
Result := False;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
bmpScreen := TBitmap.Create;
bmpScreen.Width := Screen.Width;
bmpScreen.Height:= Screen.Height;
Image1.Width := Screen.Width;
Image1.Height := Screen.Height;
jpg := TJPEGImage.Create;
if ParamCount>0 then
begin
IdTCPClient1.Host := ParamStr(1);
IdTCPClient1.Port := StrToInt(paramstr(2));
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
bmpScreen.Free;
jpg.Free;
end;
procedure TForm1.Memo1Change(Sender: TObject);
begin
// GetScreenBmp;
end;
procedure TForm1.ToolButton3Click(Sender: TObject);
begin
if not Timer1.Enabled then
begin
Timer1.Enabled := True;
ToolButton3.Caption := '停止共享'
end else begin
Timer1.Enabled := False;
ToolButton3.Caption := '發送共享';
end;
end;
procedure TForm1.IdTCPClient1Connected(Sender: TObject);
begin
// Memo1.Lines.Add('連接...')
end;
procedure TForm1.IdTCPClient1Disconnected(Sender: TObject);
begin
// Memo1.Lines.Add('斷開連接...')
end;
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
try
IdTCPClient1.Connect;
except
on e: Exception do
memo1.Lines.Add(e.Message);
end;
end;
function TForm1.SendSelfDeskTop: Boolean;
var
msJpg: TMemoryStream;
iPos,ReadCount: Integer;
buf: array [0..1023]of Byte;
begin
try
Result := True;
if not IdTCPClient1.Connected then
IdTCPClient1.Connect();
if IdTCPClient1.Connected then
begin
// Memo1.Lines.Add('發送請求命令: Request_Send');
// IdTCPClient1.SendCmd('Request_Send');
// if IdTCPClient1.ReadLn()='Response_Send'then
// Memo1.Lines.Add('命令發送成功!');
msjpg := TMemoryStream.Create;
if GetScreenBmp then
begin
jpg.SaveToStream(msJpg);
iPos := 0;
msJpg.Position := 0;
while(iPos<msJpg.Size) do
begin
// IdTCPClient1.WriteStream(msJpg);
if msjpg.Size - msjpg.Position >= SizeOf(Buf) then
ReadCount := sizeOf(Buf)
else
ReadCount := msjpg.Size - msjpg.Position;
msjpg.ReadBuffer(Buf, ReadCount);
IdTCPClient1.WriteBuffer(Buf, ReadCount);
iPos := msjpg.Position;
Application.ProcessMessages;
end;
IdTCPClient1.Disconnect;
msJpg.Free;
end;
end;
except
on e:Exception do
begin
Result := False;
ShowMessage(e.Message);
Timer1.Enabled := False;
ToolButton3.Caption := '發送共享';
end;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
SendSelfDeskTop;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -