Показать сообщение отдельно
  #11  
Старый 15.12.2011, 06:16
leonw leonw вне форума
Прохожий
 
Регистрация: 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;
Главное чтобы работало! а вот нагрузка на проц
Ответить с цитированием