Bueno, aquí un ejemplo de como hacerlo. Lo hice ahora mismo, modificando el código de
Pico, así que puede que tengas que repasar algo, pero como ejemplo nos sirve.
La parte que nos interesa es la siguiente:
Código Delphi
[-]
procedure TConnection.SendShot;
var
SrcWindow: THandle;
SrcDC: HDC;
Bitmap: TBitmap;
Jpg: TJPEGImage;
Stream: TMemoryStream;
Width, Height: Integer;
begin
SrcWindow:= GetDesktopWindow;
if SrcWindow <> 0 then
begin
SrcDC:= GetDC(SrcWindow);
if SrcDC <> 0 then
begin
Bitmap:= TBitmap.Create;
Jpg:= TJPEGImage.Create;
try
Width:= GetSystemMetrics(SM_CXSCREEN);
Height:= GetSystemMetrics(SM_CYSCREEN);
if AnsiSameText(Value('Thumb'),'Si') then
begin
Bitmap.Width:= Width div 4;
Bitmap.Height:= Height div 4;
end else
begin
Bitmap.Width:= Width;
Bitmap.Height:= Height;
end;
StretchBlt(Bitmap.Canvas.Handle,0,0,Bitmap.Width,Bitmap.Height,
SrcDC,0,0,Width,Height,SRCCOPY);
Jpg.CompressionQuality:= 60;
Jpg.Assign(Bitmap);
Jpg.Compress;
Stream:= TMemoryStream.Create;
try
Jpg.SaveToStream(Stream);
FResponse.ContentType := 'image/jpeg';
FResponse.ContentLength := IntToStr(Stream.Size);
if WriteHeaders(200) then
if not AnsiSameText(FCommand, 'HEAD') then
send(FSocket, Stream.Memory^, Stream.Size, 0);
finally
Stream.Free;
end;
finally
Bitmap.Free;
Jpg.Free;
ReleaseDC(SrcWindow,SrcDC);
end;
end;
end;
end;
Al ejecutar el programa, este se mantiene oculto, así que para cerrarlo tendrás que usar el administrador de tareas o el reset de delphi. El caso es que mientras este en ejecución actúa como un mini servidor web (revisa el hilo original para saber mas), y ante unas determinadas peticiones devuelve una captura de la pantalla.
Código:
// Esta devuelve una imagen con la captura de la pantallaa
http://127.0.0.1:1978/?cmd=Shot
// Esta otra devuelve lo mismo pero en tamaño reducido
http://127.0.0.1:1978/?cmd=Shot&Thumb=Si
(La dirección 127.0.0.1 es la ip del ordenador)
Ahora solo falta armar una pagina html, con una tabla en la que estén colocadas todas las imágenes correspondientes a cada equipo. Ajustando luego el tiempo de refresco, o usando el botón de actualizar ya tendríamos un sistema de vigilancia. El código de la pagina se lo dejo a alguien que sepa mas que yo de html ...
PD: Aunque lo anterior funciona, mejor utiliza las Indy para implementar el servidor web, el resto del código no sera muy difícil de ajustar para trabajar con las Indy.