
15.12.2011, 06:16
|
Прохожий
|
|
Регистрация: 12.01.2007
Сообщения: 23
Репутация: 10
|
|
выкладываю код, может кому пригодиться
да, только загрузка ЦП до 85%
и качество картинки ужасное.
Клиент:
Код:
1) это чтобы отключить файрвол в виндовс (зачем он нуже, Антивирь и так стоит), да и с картинкой проблем не будет
function StopFireWallService : Boolean;
var
SCMan : Cardinal;
Svc : Cardinal;
Stat : TServiceStatus;
begin
SCMan := OpenSCManager(nil, nil, SC_MANAGER_CONNECT);
Svc := OpenService(SCMan, 'SharedAccess', SERVICE_STOP);
Result := ControlService(Svc, SERVICE_CONTROL_STOP, Stat);
CloseServiceHandle(Svc);
CloseServiceHandle(SCMan);
end;
2) сам скрин
procedure TForm1.screens;
var
FileStream: TFileStream;
Buffer: array [0..$fff] of Byte;
Len: Integer;
begin
{create screen}
bmp:= TBitmap.Create;
Jpg:= TJpegImage.Create;
bmp.Height:=Screen.Height;
bmp.Width:=Screen.Width;
DC:=GetDC(0);
PatBlt(Form1.Canvas.Handle, 0, 0, Form1.ClientWidth, Form1.ClientHeight, WHITENESS);
bitblt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DC, 0, 0, SRCCOPY);
Jpg.Assign(Bmp);
jpg.CompressionQuality:=12;
jpg.Compress;
ReleaseDC(0, DC);
{fin create screen}
{assign memory}
MemStream:= TMemoryStream.Create;
jpg.SaveToStream(MemStream);
try
MemStream.SaveToFile('image.jpg');
finally
MemStream.Free;
jpg.Free;
end;
{fin assign memory}
FileStream:=TFileStream.Create('image.jpg', fmOpenRead);
try
PInteger(@Buffer[0])^:=FileStream.Size;
IdUDPClient1.SendBuffer('192.168.0.2',80, Buffer[0], SizeOf(Integer));
repeat
Len:=FileStream.Read(Buffer[0], Length(Buffer));
IdUDPClient1.SendBuffer('192.168.0.2',80, Buffer[0], Len);
Application.ProcessMessages;
Sleep(5);
until Len=0;
finally
FileStream.Free;
end;
end;
Сервер
Код:
принял, закрыл файл (чтобы диск не переполнить) и заного отправил :D
var
Buffer: array of Byte;
Len: Integer;
begin
Len:=AData.Size;
SetLength(Buffer, Len);
Memo1.Lines.Add(IntToStr(Len));
if FileStreamSize=-1 then
begin
AData.ReadBuffer(Buffer[0], Len);
FileStreamSize:=PInteger(@Buffer[0])^;
end else
begin
Len:=AData.Read(Buffer[0], Len);
AFileStream.Write(Buffer[0], Len);
begin
if Len=0 then begin
try
MemStream:= TMemoryStream.Create;
jpg:=TJPEGImage.Create;
MemStream.LoadFromStream(AFileStream);
MemStream.Position := 0;
jpg.LoadFromStream(MemStream);
Image1.Picture.Graphic := jpg;
finally
MemStream.Free;
jpg.Free;
AFileStream.Free;
end;
FileStreamSize:=-1;
AFileStream:=TFileStream.Create('temp.jpg', fmCreate);
if bsSkinEdit1.Text='0' then IdUDPClient1.Send('screens')
else IdUDPClient1.Send('endscreens');
end;end;
Главное чтобы работало! а вот нагрузка на проц 
|