📄 unit2.pas
字号:
UDPReceiveFileStream:TMemoryStream;
SelectDir:String;
MonitorState:Boolean;
implementation
uses
PingThread, PingThread2, Unit3, Unit4, HSearch;
var
iFileLen:integer;
PingPort2:array[1..2048] of PingIP2;
{$R *.DFM}
procedure RegisterFileType(cMyExt, cMyFileType, cMyDescription, ExeName: string; IcoIndex: integer; DoUpdate: boolean = false);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CLASSES_ROOT;
Reg.OpenKey(cMyExt,True);
Reg.WriteString('', cMyFileType);
Reg.CloseKey;
Reg.OpenKey(cMyFileType, True);
Reg.WriteString('', cMyDescription);
Reg.CloseKey;
Reg.OpenKey(cMyFileType + '\DefaultIcon', True);
Reg.WriteString('', ExeName + ',' + IntToStr(IcoIndex));
Reg.CloseKey;
Reg.OpenKey(cMyFileType + '\Shell\Open', True);
Reg.WriteString('', '&Open');
Reg.CloseKey;
Reg.OpenKey(cMyFileType + '\Shell\Open\Command', True);
Reg.WriteString('', '"' + ExeName + '" "%1"');
Reg.CloseKey;
finally
Reg.Free;
end;
end;
procedure TForm2.FormCreate(Sender: TObject);
Var
WSAData:TWSAData;
hICMPdll:HMODULE;
wVersionRequested:Word;
SystemDir : array[0..255] of Char;
begin
AgentStream:=TmemoryStream.Create;
GFileDirStream:=TmemoryStream.Create;
XoRBmp:=TBitmap.Create;
XoRJPG:=TJPEGImage.Create;
image1.Top:=1;
Image1.Left:=1;
RecNo:=1;
Application.HintPause:=500;
Application.HintHidePause:=3000;
Application.Title:='DELPHI爱好者';
wVersionRequested:=MAKEWORD(2,0);
if WSAStartup(wVersionRequested,WSAdata)=0 then
begin
hICMPdll:=LoadLibrary('icmp.dll');
@ICMPCreateFile:=GetProcAddress(hICMPdll,'IcmpCreateFile');
@IcmpCloseHandle:=GetProcAddress(hICMPdll,'IcmpCloseHandle');
@IcmpSendEcho:=GetProcAddress(hICMPdll,'IcmpSendEcho');
hICMP:=IcmpCreateFile;
end;
PingTestStr:='%测试报文-->%';
GetSystemDirectory(@SystemDir,255);
GMStream:=TMemoryStream.Create;
GSaveStream:=TMemoryStream.Create;
UDPReceiveFileStream:=TMemoryStream.Create;
end;
procedure TForm2.CheckListBox3DblClick(Sender: TObject);
var
s:PChar;
iPos:integer;
m:array[1..255] of char;
begin
iPos:=Pos('=',ClickIP);
if iPos<>0 then
begin
strLcopy(@m,PChar(ClickIP),iPos-1);
s:=@m;
ShellExecute(Application.Handle,nil,'iexplore.exe',s,nil, SW_MAXIMIZE);
end;
if iPos=0 then
begin
s:=PChar(ClickIP);
ShellExecute(Application.Handle,nil,'iexplore.exe',s,nil, SW_MAXIMIZE);
end;
end;
procedure TForm2.Label8Click(Sender: TObject);
begin
Form2.Visible:=False;
MyPing.ShowModal;
end;
procedure TForm2.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
OutLine1.Lines.Text:=Socket.ReceiveText;
end;
procedure TForm2.Outline1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if OutLine1.Lines.Count>0 then
ComboBox1.Text:=OutLine1.Lines[OutLine1.SelectedItem-1];
end;
procedure TForm2.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
Var
AStream:TStringStream;
LLen2:Integer;
InnerStr:String;
begin
AStream:=TStringStream.Create('');
NMUDP1.ReadStream(AStream);
OutLine1.Lines.Clear;
OutLine1.Lines.LoadFromStream(AStream);
if OutLine1.Lines.Count>=2 then
begin
LLen2:=Length(OutLine1.Lines[1]);
if LLen2>0 then
begin
InnerStr:=OutLine1.Lines[1];
if InnerStr[LLen2]='.' then
OutLine1.Lines.Delete(1);
end;
LLen2:=Length(OutLine1.Lines[0]);
if LLen2>0 then
begin
InnerStr:=OutLine1.Lines[0];
if InnerStr[LLen2]='.' then
OutLine1.Lines.Delete(0);
end;
if OutLine1.Lines.Count=0 then
begin
OutLine1.Lines.Add('提示:返回上一级目录');
OutLine1.Enabled:=False;
end;
end;
end;
procedure TForm2.ClientSocket4Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.SendText(IntToStr(TCPIndex));
end;
procedure TForm2.CUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
Var
DataStream:TStringStream;
begin
DataStream:=TStringStream.Create('');
CUDP1.ReadStream(DataStream);
try
DataStream.Free;
except
end
end;
procedure TForm2.Outline2MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Var
Separator,LengthStr:String;
begin
if BitBtn3.Enabled=True then
if OutLine2.Lines.Count>0 then
Begin
if Copy(SelectDir,Length(SelectDir),1)='\' then
Separator := '' else Separator := '\';
ComboBox1.Text:=SelectDir+Separator+OutLine2.lines.Names[OutLine2.SelectedItem-1];
LengthStr:=
OutLine2.lines.Values[OutLine2.lines.Names[OutLine2.SelectedItem-1]];
LengthStr:=Copy(LengthStr,1,Length(LengthStr)-4);
Gauge1.MaxValue:=100;
Gauge1.MinValue:=0;
Label18.caption:='当前文件:'+LengthStr+'字节';
try
iFileLen:=StrToInt(LengthStr);
except
Label18.caption:='错误:长度字节!';
end;
end;
BitBtn3.Enabled:=True;
end;
procedure TForm2.CUDP2DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
Var
DataStream:TStringStream;
DataStreamF:TmemoryStream;
FileDir,FileNm,FileNme:String;
begin
GMStream.Clear;
DataStream:=TStringStream.Create('');
DataStreamF:=TMemoryStream.Create;
CUDP2.ReadStream(DataStream);
try
FileNme:=FileDir+'\'+FileNm;
if FileExists(FileNme) then DataStreamF.LoadFromFile(FileNme)
else
begin
FileNme:=FileDir+FileNm;
if FileExists(FileNme) then DataStreamF.LoadFromFile(FileNme);
end;
if DataStreamF<>nil then
Begin
CSocket1.Close;
GMStream:=DataStreamF;
CSocket1.Open;
Label12.Caption:=IntToStr(GMStream.Size);
end else Form2.Caption:='Read File fail';
except
DataStream.Free;
end
end;
procedure TForm2.SSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
{R-}
const
BufSize=8192;
Var
Buffer1:Array[1..BufSize] of char;
readLength:integer;
begin
BitBtn3.Enabled:=False;
readLength:=Socket.ReceiveBuf(Buffer1,BufSize);
if readLength<>-1 then
GSaveStream.WriteBuffer(Buffer1,readLength);
Label11.Caption:='下载文件:'+IntToStr(GSaveStream.Size)+'字节';
try
Gauge1.Progress:=((GSaveStream.Size*100) div iFileLen);
except
end;
if GSaveStream.Size>=iFileLen then
begin
BitBtn3.Enabled:=True;
Socket.Close;
Label18.Caption:='文件下载完毕!';
SaveDialog1.FileName:=ExtractFileName(ComboBox1.Text)
+ExtractFileExt(ComboBox1.Text);
if SaveDialog1.Execute then
GSaveStream.SaveToFile(SaveDialog1.FileName);
if SpeedButton75.Down then
ShellExecute(Application.Handle, 'OPEN',
PChar(SaveDialog1.FileName),'','', SW_SHOWNORMAL);
end;
{R+}
end;
procedure TForm2.CSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
Const
SendBuffsize=2048;
Var
BuffRead:Array[1..SendBuffsize] of char;
ReadSize,i,SendStat:Integer;
SendSize:LongInt;
begin
GMStream.Position:=0;i:=0;SendSize:=0;
Repeat
i:=I+1;
ReadSize:=GMStream.Read(BuffRead,SendBuffsize);
SendSize:=SendSize+ReadSize;
Repeat
SendStat:=Socket.SendBuf(BuffRead,ReadSize);
Application.ProcessMessages;
until SendStat<>-1;
Form2.Caption:='Send File OK: '+IntToStr(i)+' Times---:'
+IntToStr(SendSize)+' Byte';
Until (ReadSize<SendBuffsize) or (SendSize=GMStream.Size)
end;
var
SendState:integer;
procedure TForm2.BitBtn2Click(Sender: TObject);
begin
RecNo:=1;
FirstFrame:=True;
if SpeedButton30.Down then
SendcommandStr1:='FAST' else
SendcommandStr1:='FULL';
SendcommandStr2:=MaskEdit7.Text;
SendcommandStr:=SendCommandStr1+SendcommandStr2;
Image1.AutoSize:=True;
//SendcommandStr:='Begin Monitor!';
MonitorCSocket1.Host:=MaskEdit1.Text;
MonitorCSocket1.Port:=15888;
MonitorCSocket1.Address:=MaskEdit1.Text;
MonitorCSocket1.ClientType:=ctNonBlocking;
MonitorCSocket1.Active:=True;
BitBtn2.Enabled:=False;
end;
{$R-}
procedure TForm2.MonitorCSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
{$R-}
const
BufSize=10240;
Var
Buffer1:Array[1..BufSize] of char;
readLength,sd:integer;
begin
if RecNo=1 then
begin
ReceivSize:=0;
GSaveStream.Clear;
end;
readLength:=Socket.ReceiveBuf(Buffer1,BufSize);
if readLength<>-1 then
begin
ReceivSize:=ReceivSize+readLength;
GSaveStream.WriteBuffer(Buffer1,readLength);
GSaveStream.Position:=GSaveStream.Size;
RecNo:=2;
end;
if GSaveStream.Size>=4 then
begin
GSaveStream.Position:=0;
GSaveStream.Read(NewRAB,4);
NewRLen:=Longint(NewRAB);
GSaveStream.Position:=GSaveStream.Size;
end;
BitBtn2.Enabled:=False;
MaskEdit7.Enabled:=BitBtn2.Enabled;
MaskEdit1.Enabled:=BitBtn2.Enabled;
Label8.Caption:='已传输:'+IntToStr(GSaveStream.Size)+'字节';
Gauge4.MinValue:=0;
Gauge4.MaxValue:=100;
if NewRLen<>0 then
Gauge4.Progress:=(GsaveStream.size*100) div NewRLen
else Label8.Caption:='!无效字节长度!';
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if (GSaveStream.Size>=NewRLen) then
begin
Gauge4.Progress:=100;
FileID:=FileID+1;
if (GSaveStream.Size<>NewRLen) then
Begin
Label8.Caption:='数据长度不匹配!';
Gauge4.Progress:=0;
GSaveStream.Clear;
RecNo:=1;
if SpeedButton30.Down then
SendcommandStr1:='FAST' else
SendcommandStr1:='FULL';
SendcommandStr2:=MaskEdit7.Text;
SendcommandStr:=SendCommandStr1+SendcommandStr2;
repeat
SD:=Socket.SendText(SendcommandStr);
Application.ProcessMessages;
until SD=0;
ReceivSize:=0;
exit;
end;
//===============================================================
if (SpeedButton5.Down=True) then
begin
Socket.SendText('Stop it!');
Socket.Close;
end else
Begin
SendcommandStr1:='GOON';
SendcommandStr2:=MaskEdit7.Text;
SendcommandStr:=SendCommandStr1+SendcommandStr2;
repeat
SD:=Socket.SendText(SendcommandStr);
Application.ProcessMessages;
until SD<>0;
end;
//===============================================================
RecNo:=1;
Label8.Caption:='显示数据图像... .';
Gauge4.Progress:=100;
GSaveStream.Position:=4;
Try
XoRJPG.LoadFromStream(GSaveStream);
except
socket.Close;
RecNo:=1;
exit;
end;
try
XoRRect.Top:=0;
XoRRect.Left:=0;
XoRRect.Right:=XoRJPG.Width;
XoRRect.Bottom:=XoRJPG.Height;
XoRBmp.Width:=XoRJPG.Width;
XoRBmp.Height:=XoRJPG.Height;
XoRBmp.Canvas.Draw(0,0,XoRJPG);
Image1.Width:=XoRJPG.Width;
Image1.Height:=XoRJPG.Height;
if (SendcommandStr1='FULL') or
(SendcommandStr1='FAST') then
FirstFrame:=True;
if (FirstFrame=False) and (SpeedButton30.Down=True) then
begin
try
Image1.Picture.Bitmap.Canvas.CopyMode:=cmSrcInvert;
Image1.Picture.Bitmap.Canvas.CopyRect(XoRRect,
XoRBmp.canvas,XoRRect);
except
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -