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

📄 tsearchthreadunit.pas

📁 DELPHI 下远程控制源码
💻 PAS
字号:
unit TSearchThreadUnit;

interface

uses
  Classes,IdTCPServer,SysUtils,IdGlobal,ComCtrls;

type
  TSearchThread = class(TThread)
  private
    { Private declarations }
    TheFileType  :String;
    TheFileSize  :integer;
    TheFilePath  :string;
    TheUser      :String;
    SysThread    :TIdPeerThread;
  protected
    procedure SearchFile(ThePath:String);
    procedure Execute; override;
    procedure RegisteLog;
  public
    constructor Create(AThread:TIdPeerThread;ThisFileType:String;
			       ThisFileSize:integer;ThisFilePath:string;
			       ThisUser:String);
    destructor  Destroy; override;
  end;

implementation
uses unit2;

procedure TSearchThread.RegisteLog;
var
  TheListItem:TListItem;
begin
  if Form2.LogCheckBox.Checked=false then exit;
  TheListItem:=Form2.ListView5.Items.Insert(0);
  TheListItem.Caption:=SysThread.Connection.Socket.Binding.PeerIP;
  TheListItem.StateIndex:=9;
  TheListItem.SubItems.Add(TheUser);
  TheListItem.SubItems.Add('文件搜索');
  TheListItem.SubItems.Add('搜索路径:'+TheFilePath+',类型:'+TheFileType);
  TheListItem.SubItems.Add(DateTimeToStr(now));
end;
constructor TSearchThread.Create(AThread:TIdPeerThread;ThisFileType:String;
			       ThisFileSize:integer;ThisFilePath:string;
			       ThisUser:String);
begin  
  SysThread  :=AThread;
  TheFileType:=ThisFileType;
  TheFileSize:=ThisFileSize;
  TheFilePath:=ThisFilePath;
  TheUser    :=ThisUser;
  FreeOnTerminate :=True;
  inherited Create(False); 
end;
procedure TSearchThread.SearchFile(ThePath:string);
Var
    sr: TSearchRec;
begin
    if FindFirst(ThePath+'*.*',faAnyFile, sr) = 0 then
    begin
      repeat
       //============================================1
	if (Sr.Attr<16) then 	
	begin 
	  if TheFileType='*.*' then
	    if sr.Size>=TheFileSize then
	      begin
		try
		 SysThread.Connection.Write(ThePath+sr.Name+EOL);
		 SysThread.Connection.Write(IntToStr(sr.Size)+EOL);
		 SysThread.Connection.Write(DateTimeToStr(
					 FileDateToDateTime((sr.Time)))+EOL);
		except
		  FindClose(sr);
		  exit;
		end;
	      end;
	  if AnsiUpperCase(TheFileType)=
			   AnsiUpperCase('*'+ExtractFileExt(sr.Name)) then
	    if sr.Size>=TheFileSize then
	    begin
	     try
	      SysThread.Connection.Write(ThePath+sr.Name+EOL);
	      SysThread.Connection.Write(IntToStr(sr.Size)+EOL);
	      SysThread.Connection.Write(DateTimeToStr(
					 FileDateToDateTime((sr.Time)))+EOL);
	     except
		  FindClose(sr);
		  exit;
	     end;
	    end;
	end;
       //=============================================2
	if (Sr.Attr>=32) then
	  if (Sr.Attr<48) then
	 begin
	   if TheFileType='*.*' then
	     if sr.Size>=TheFileSize then
	     begin
	      try
	       SysThread.Connection.Write(ThePath+sr.Name+EOL);
	       SysThread.Connection.Write(IntToStr(sr.Size)+EOL);
	       SysThread.Connection.Write(DateTimeToStr(
				    FileDateToDateTime((sr.Time)))+EOL);
	      except
		  FindClose(sr);
		  exit;
	      end;
	     end;
	  if AnsiUpperCase(TheFileType)=
			   AnsiUpperCase('*'+ExtractFileExt(sr.Name)) then
	   if sr.Size>=TheFileSize then
	   begin
	    try
	     SysThread.Connection.Write(ThePath+sr.Name+EOL);
	     SysThread.Connection.Write(IntToStr(sr.Size)+EOL);
	     SysThread.Connection.Write(DateTimeToStr(
				   FileDateToDateTime((sr.Time)))+EOL);
	    except
		  FindClose(sr);
		  exit;
	    end;
	   end;
	end;
	//============================================3
	if (Sr.Attr<32) and (Sr.Attr>=16) then
	begin
	   if (Sr.Name<>'.') then 
	    if (Sr.Name<>'..') then 	    
	     SearchFile(ThePath+Sr.Name+'\');
	end;
	if (Sr.Attr>=48) then
	begin 
	   if (Sr.Name<>'.') then 
	    if (Sr.Name<>'..') then 		    
	     SearchFile(ThePath+Sr.Name+'\');
	end; 	
      until FindNext(sr) <> 0;       
    end; 
    FindClose(sr);       
end;
procedure TSearchThread.Execute;
begin
    Synchronize(RegisteLog);
    if DirectoryExists(TheFilePath)=false then
    begin
      try
	SysThread.Connection.Write('搜索完毕'+EOL);
      except
	Self.Terminate;
	SysThread.Free;
	exit;
      end;
       SysThread.Connection.Disconnect;
       SysThread.Free;
       Self.Terminate;
       exit;
    end;
  try
    SearchFile(TheFilePath);
  except
    Self.Terminate;
    SysThread.Free;
    exit;
  end;
    try
      SysThread.Connection.Write('搜索完毕'+EOL);
    except
      Self.Terminate;
      SysThread.Free;
      exit;
    end;
    SysThread.Connection.Disconnect;
    SysThread.Free;
    Self.Terminate;
end;
destructor TSearchThread.Destroy;
begin
  inherited destroy;
end;
end.

⌨️ 快捷键说明

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