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

📄 vserver2.~pas

📁 远程桌面
💻 ~PAS
字号:
unit vserver2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, WinSkinData, ExtCtrls, ComCtrls, StdCtrls, IdBaseComponent,
  IdComponent, IdUDPBase, IdUDPServer, IdSocketHandle, Menus, NMUDP;

type
  TForm2 = class(TForm)
    SkinData1: TSkinData;
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Splitter1: TSplitter;
    Splitter2: TSplitter;
    ListBox1: TListBox;
    StatusBar1: TStatusBar;
    IdUDPServer1: TIdUDPServer;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    A1: TMenuItem;
    NMUDP1: TNMUDP;
    N3: TMenuItem;
    ListBox2: TListBox;
    PopupMenu1: TPopupMenu;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    procedure N2Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer;
      FromIP: string; Port: Integer);
    procedure ListBox1Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

uses Math, vServer;
var
  RemotName, RemotUser, RemotIP: string; //远程机器名,用户名和IP地址
{$R *.dfm}

//分解远程机器名,用户名和IP地址
procedure Remot(s: Integer);
var
  ss: string;
begin
  ss := Form2.ListBox1.Items[s];
  RemotName := copy(ss, 1, pos(':', ss) - 1);
  ss := copy(ss, pos(':', ss) + 1, length(ss));
  RemotUser := copy(ss, 1, pos(':', ss) - 1);
  ss := copy(ss, pos(':', ss) + 1, length(ss));
  RemotIP := ss;
end;

procedure TForm2.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
  sss: string;
  ex: boolean;
  len, i: Integer;
begin
  ex := False;
  SetLength(sss, AData.Size);
  AData.Read(sss[1], AData.Size);
  len := length(sss);
  if copy(sss, 1, 3) = 'add' then //客户端上线
  begin
    sss := copy(sss, 4, len - 3);
    if ListBox1.Items.Count <> 0 then
    begin
      i := 0;
      while (i < ListBox1.Items.Count) do
      begin
        if sss = ListBox1.Items[i] then
        begin
          ex := True;
          break;
        end;
        i := i + 1;
      end;
      if ex = False then
        ListBox1.Items.Add(sss);
    end;
    if ListBox1.Items.Count = 0 then
      ListBox1.Items.Add(sss);
  end;
end;

//打开抓屏窗口
procedure TForm2.N2Click(Sender: TObject);
begin
  if ListBox1.ItemIndex >= 0 then
  begin
    Remot(ListBox1.ItemIndex);
    Form1.Edit2.Text := RemotIP;
  end;
  Form1.ShowModal;
end;

//向客户发出枚举窗口的指令
procedure TForm2.N3Click(Sender: TObject);
var
  ReqCode: array[0..199] of char;
  ReqCodeStr: string;
begin
  ListBox2.Clear;
  ReqCodeStr := 'Enum';
  StrpCopy(ReqCode, ReqCodeStr);
  Remot(ListBox1.ItemIndex);
  NMUDP1.RemoteHost := RemotIP;
  NMUDP1.SendBuffer(ReqCode, 200);
end;

procedure TForm2.NMUDP1DataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: string; Port: Integer);
var
  ReqCode: array[0..199] of char;
  ReqCodeStr: string;
  En: string;
begin
  NMUDP1.ReadBuffer(ReqCode, NumberBytes);
  ReqCodeStr := ReqCode[0] + ReqCode[1] + ReqCode[2] + ReqCode[3];
  if ReqCodeStr = 'Enum' then //接收客户端发来的枚举窗口列表
  begin
    En := StrPas(ReqCode);
    ListBox2.Items.Add(copy(En, 5, length(En)));
    ReqCodeStr := 'Enum';
    StrpCopy(ReqCode, ReqCodeStr);
    NMUDP1.SendBuffer(ReqCode, 200);
  end;
  if ReqCodeStr = 'Eend' then
    StatusBar1.SimpleText := '枚举完成' + FromIP + '共'
      + IntToStr(ListBox2.Items.Count) + '条';

  if ReqCodeStr = 'Proc' then //接收客户端发来的系统进程列表
  begin
    En := StrPas(ReqCode);
    ListBox2.Items.Add(copy(En, 5, length(En)));
    ReqCodeStr := 'Proc';
    StrpCopy(ReqCode, ReqCodeStr);
    NMUDP1.SendBuffer(ReqCode, 200);
  end;
  if ReqCodeStr = 'Pend' then
    StatusBar1.SimpleText := '取系统进程完成' + FromIP + '共'
      + IntToStr(ListBox2.Items.Count) + '条';
end;

procedure TForm2.ListBox1Click(Sender: TObject);
begin
  N3.Click;
end;

{关闭指定句柄窗口}
procedure TForm2.N4Click(Sender: TObject);
var
  ReqCode: array[0..199] of char;
  ReqCodeStr: string;
begin
  Remot(ListBox1.ItemIndex);
  NMUDP1.RemoteHost := RemotIP;
  ReqCodeStr := ListBox2.Items[ListBox2.ItemIndex];
  ReqCodeStr := 'Clos' + copy(ReqCodeStr, 1, pos('=', ReqCodeStr) - 1);
  StrpCopy(ReqCode, ReqCodeStr);
  NMUDP1.SendBuffer(ReqCode, 200);
end;

procedure TForm2.N6Click(Sender: TObject);
begin
  ListBox1.Clear;
end;

procedure TForm2.N7Click(Sender: TObject);
begin
  ListBox1.Items.Add(InputBox('请输入客户端信息:',
    'Prompt', 'Default string'));

end;

procedure TForm2.N5Click(Sender: TObject);
var
  ReqCode: array[0..199] of char;
  ReqCodeStr: string;
begin
  ListBox2.Clear;
  ReqCodeStr := 'Proc';
  StrpCopy(ReqCode, ReqCodeStr);
  Remot(ListBox1.ItemIndex);
  NMUDP1.RemoteHost := RemotIP;
  NMUDP1.SendBuffer(ReqCode, 200);
end;

end.

⌨️ 快捷键说明

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