Ver Mensaje Individual
  #1  
Antiguo 02-10-2006
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Reputación: 22
acertij022 Va por buen camino
Administración remota!!

Hola amigos delphinos me encuentro entre la espada y la pared, les comento para entrar en tema.Estoy continuamente trabajando remotamente instalando y configurando maquinas de clientes pero me suele pasar que mis clientes o le parece muy dificil decime su IP o Passord (VNC) para ingresar remotamente o peor no saben como abrir algun puerto TCP para realizar la conexion, gracias a este dolor de cabeza estoy diseñando algo parecido a un VNC con algunas mejoras administativa, la idea que tengo es que el cliente se conecte a la mesa de ayuda por medio de un ejecutable para chatear y si fuese necesario poder ingresar a la pc para realizar la reparcion o configuracion.
Para evitar el Firewall se me ocurrio que la aplicacion funcione inversamente que el VNC o sea el cliente tiene un socket cliente y yo un server (emularia un browser o saldria por el port 21)hasta ahi cerramaba pero ahora necesitaba enviar una imagen de la pc y actualizar solo los pixeles que cambiaban utilizando el siguiente codigo:
para tomar una imagen:
Código Delphi [-]
procedure TFServer.GetDesktop(Imagen:integer);
var
        imag: TImage;
        jpg: TJpegImage;
        desktop: TCanvas;

begin
        imag:=TImage.Create(FServer);
        imag.Width:=screen.Width;
        imag.Height:=screen.Height;
        desktop:=TCanvas.Create;
        with DeskTop do
                Handle := GetWindowDC (GetDesktopWindow) ;

        with Imag.Canvas do
                CopyRect (Rect (0, 0, screen.Width, screen.Height),DeskTop,Rect (0, 0, screen.Width, screen.Height));
        jpg:=TJPegImage.Create;
        jpg.Assign(imag.Picture.Bitmap);
        imag.Free;
        jpg.CompressionQuality:=80; //Calidad del JPEG
        jpg.Compress;      //Comprimimos la imagen
        jpg.SaveToFile(IntToStr(Imagen)+'.jpg');
        jpg.Free;
        desktop.Free;
end;
Y para tomar las diferencias:
Código Delphi [-]
procedure comparar();
var
jpg: TJpegImage;
bmp1,bmp2: TImage;
int1,int2,int3:integer;
FInteger: file of integer;
begin
if (not fileexists('1.jpg'))or(not fileexists('2.jpg')) then exit;
bmp1:=TImage.Create(FServer);
jpg := TJpegImage.Create;
 try
 jpg.LoadFromFile('1.jpg');
 bmp1.Picture.Bitmap.Assign(jpg);    // Carga la imagen como BMP
 finally
 jpg.Free;
 end;

bmp2:=TImage.Create(FServer);
jpg := TJpegImage.Create;
 try
 jpg.LoadFromFile('2.jpg');
 bmp2.Picture.Bitmap.Assign(jpg);    // Carga la imagen como BMP
 finally
 jpg.Free;
 end;

AssignFile(FInteger,'3.int');
Rewrite(FInteger);
  // Recorrer la imagen
  for int1 := 0 to (bmp1.Picture.Bitmap.Height - 1) do
  begin
    for int2 := 0 to (bmp1.Picture.Bitmap.Width - 1) do
      begin
      // Diferentes
      if (bmp1.Picture.Bitmap.Canvas.Pixels[int2,int1] <>
          bmp2.Picture.Bitmap.Canvas.Pixels[int2,int1]) then
          begin
          // guardo las diferencias
          int3:=bmp2.Picture.Bitmap.Canvas.Pixels[int2,int1];
          Write(FInteger,int3);//valor del color del pixel
          Write(FInteger,int2);// posicion X
          Write(FInteger,int1);// posicion Y
          end;
      end;
  end;
CloseFile(FInteger);
bmp1.Free;
bmp2.Free;
end;

pero noto que las imagenes generadas pesan 112Kb y el archivo de diferencias pesan mas que la imagen y que el recorrido de pixel a pixel es muy lento.

A Alguien se le ocurre como optimizar el codigo o como puedo interactuar con las DLL del VNC
Desde ya muchas gracias
Responder Con Cita