📄 vserver2.~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 + -