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

📄 searchhosts.pas

📁 vpn网上邻居搜索器 工作组 未打开的工作组 正在搜索的工作组 已打开的工作组 无法打开的工作组 主机 未打开的主机 正在搜索的主机 打开的主机(无须登录) 打开的主机(以gues
💻 PAS
字号:
unit SearchHosts;

interface

uses Windows, Messages, SysUtils, Classes,ComCtrls,Dialogs;

type
  TSearchHostsThread=class(TThread)
  private
    StartNum, HostIndex, ImageIndex: integer;
    tnode: TTreeNode;
    HostName, MyGroup: string;
    TotalHostNum: integer;
  protected
    procedure Execute; override;
    procedure GetTreeInfo;
   //Procedure SetNode;
  public
    ParentNode: TTreeNode;
    //ParentTree: TTreeView;
  end;

  THostsThread=class(TThread)
  private
    TotalHostNum: integer;
  protected
    procedure Execute; override;
    Procedure EndSearch;
  public
    BeginNum: integer;
    ParentNode: TTreeNode;
    //ParentTree: TTreeView;
    MyToolBtn: TToolButton;
  end;

implementation              
uses main,SearchHostThreadUnit;

procedure TSearchHostsThread.GetTreeInfo;
begin
  with MainForm do
  begin
    ImageIndex := ParentNode.Item[HostIndex].ImageIndex;
    tnode := ParentNode.Item[HostIndex];
    HostName := tnode.Text;
    MyGroup := (PMyTreeItem(tnode.Data)).Group;
  end;
end;

procedure TSearchHostsThread.Execute;
var
  i             : integer;
  searchers     : array[1..100]of TSearchHostThread;
  bDo           : array[1..100]of boolean;
begin
 TotalHostNum := ParentNode.Count;
 for i:=1 to 100 do bDo[i]:=false;

 for  i:=1 to ThreadNum do
 begin
   //if stop then exit;
   if terminated then exit;
     
   if StartNum+i<TotalHostNum  then
   begin
        HostIndex:=StartNum+i;
        synchronize(GetTreeInfo);
        if (ImageIndex = 7)or(ImageIndex = 15) then
        begin

             if terminated then exit;

             //Synchronize(AddGroup);

             if terminated then exit;
             bDo[i]:=true;
             searchers[i]:=TSearchHostThread.create(true);
             //searchers[i].MyGroup := GroupName;

             searchers[i].MyTree := TTreeView(ParentNode.TreeView);
             searchers[i].MyNode := tnode;
             searchers[i].MyNode.ImageIndex := 12;
             searchers[i].MyNode.SelectedIndex := 12;
             //Synchronize(SetNode);
             searchers[i].MyHost := HostName;
             searchers[i].MyGroup := MyGroup; //'unknown';
             searchers[i].FreeOnTerminate := true;
             //searchers[i].hFlag := CreateEvent(nil,true,false,pchar(HostName));
             //ResetEvent(searchers[i].hFlag);
             searchers[i].Resume;
             //if threadMode=0 then searchers[i].WaitFor;    //单线程
        end;
   end else exit;
 end;   //end of for
   
  //if threadMode=1 then
  //begin
  
    for i:=1 to ThreadNum do
    if bDo[i] and (searchers[i]<>nil) then
    begin
      //if not searchers[i].Terminated then
      begin
        {if OS <> osWinxp then searchers[i].WaitFor else} WaitForSingleObjectEx(searchers[i].Handle,INFINITE,true);
        {if ver>4 then
        begin
          searchers[i].Terminate;
          searchers[i].free    //win98下free会出错。

        end
        else //searchers[i].Terminate;
        TerminateThread(searchers[i].handle,0);}
      end;
    end;
  //Synchronize(AddGroup); ///
  //end;

end;

procedure THostsThread.EndSearch;
begin

  with MainForm do
  begin
    //ToolBtnStop.Enabled := false;
    //ToolBtnPause.Enabled := false;
    //ToolBtnAuto.Enabled := true;
    //Timer1.Enabled := false;
    if assigned(MyToolBtn) then MyToolBtn.Enabled := true;
  end;

end;

procedure THostsThread.Execute;
var
  i                     : integer;
  Multisearcherhost     : TSearchHostsThread;
begin

  TotalHostNum := ParentNode.Count;
  i := BeginNum;
  repeat
   if stop then exit;
   if terminated then exit;
     Multisearcherhost:=TSearchHostsThread.create(true);
     Multisearcherhost.StartNum := i;
     Multisearcherhost.FreeOnTerminate := true;
     Multisearcherhost.ParentNode := ParentNode;
     Multisearcherhost.Resume;
     //Multisearcherhost.WaitFor;
     WaitForSingleObjectEx(Multisearcherhost.Handle,{INFINITE}10000,true);
     i:=i+ThreadNum;
     //SearchProgress:=i;   //timer
  until i>= TotalHostNum;
  synchronize(EndSearch);
  
end;

end.

⌨️ 快捷键说明

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