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

📄 searchhostthreadunit.pas

📁 最好的局域网搜索软件
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit SearchHostThreadUnit;

interface

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

type
TSearchHostThread=class(TThread)
private
  MyDir, FileName, FullFileName: string;
  FindfNode: TtreeNode;
  ftype: FileType;
  EverFound,NeedLogin,NoShareDir,NoShareFile,isWinNT,NeedPassWord,bPrinter: boolean;
  FileList: TStringList;
  NoPassWordChicken: boolean;
  SizeList: TStringList;
  FileSize: DWORD;
public
  MyTree: TTreeView;
  MyNode: TtreeNode;
  MyGroup,MyHost: string;
  User, PassWord: string;
  //hFlag: THandle;
protected
  procedure Execute; override;
  procedure findf(dir:string);
  procedure AddDirNode;
  Procedure AddDir;
  Procedure AddFile;
  procedure CompareFile;
  procedure NotFound;
  procedure BeFound;
  procedure AddToHistory;  //###
  procedure GetUserPassWord;
end;

implementation
uses Config;

procedure TSearchHostThread.GetUserPassWord;
begin
  with ConfigForm do
  begin
    GiveUserPassWord(MyHost, User, PassWord);
  end;
end;

procedure TSearchHostThread.AddToHistory;
const
  ShareHostSet = [8, 29, 27];
var
  TemHisNode, HisGroupNode: TTreeNode;
  i: integer;
  MyItemPtr     : PMyTreeItem;
begin
  with MainForm do
  begin
    if (cbSaveOpt.Checked)and(not(MyNode.ImageIndex in ShareHostSet)) then exit;
    if MyTree = HistoryTree then exit;
    //###############add to history tree##############
    HisGroupNode := nil;
    for i := 0 to HistoryTree.Items[0].Count - 1 do
    if UpperCase(trim(HistoryTree.Items[0].Item[i].Text)) = UpperCase(trim(MyGroup)) then
    begin
      HisGroupNode := HistoryTree.Items[0].Item[i];
    end;

    if HisGroupNode = nil then
    begin
      HisGroupNode := HistoryTree.Items.AddChild(HistoryTree.Items[0], MyGroup);
      HisGroupNode.ImageIndex := 9;
      HisGroupNode.SelectedIndex := 9;
      HistoryTree.Items[0].Expand(false);
    end;

    for i := 0 to HisGroupNode.Count - 1 do
    if UpperCase(HisGroupNode.Item[i].Text) = UpperCase(MyHost) then exit; //already exist
    New(MyItemPtr);
    MyItemPtr^.DirName :=MyHost;
    MyItemPtr^.Group :=MyGroup;
    TemHisNode := HistoryTree.Items.AddChild(HisGroupNode, MyHost);
    TemHisNode.Data := MyItemPtr;
    TemHisNode.ImageIndex := 7;
    TemHisNode.SelectedIndex :=12;
    HisGroupNode.Expand(false);

    //################################################
  end;
end;

procedure TSearchHostThread.AddFile;
begin
  with MainForm do
  begin
    AllListbox.items.insert(0, FullFileName);
  end;
end;

procedure TSearchHostThread.AddDir;  //in Right ListView
var
  ListItem      : TListitem;
  ListItemPtr   : PListItem;
begin
  with MainForm do
  begin

    if bAutoSearch then
    begin

      with ShareListView do
      begin
        ListItem:=Items.Insert(0);
        if bPrinter then ListItem.ImageIndex := 77
        else if EverFound then listitem.ImageIndex := 0
        else if NeedPassWord then ListItem.ImageIndex := 20
        else if NoShareFile then
        begin
          ListItem.ImageIndex := 30;
          ListItem.StateIndex  :=30;
        end
        else ListItem.ImageIndex:=19;

        ListItem.Caption := ExtractFileName(mydir);
        ListItem.SubItems.Add(mydir);
        ListItem.SubItems.Add(mygroup);

        //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

        new(ListItemPtr);
        ListItemPtr.index := StrListAll.Count;
        StrListAll.AddStrings(FileList);
        SizeListAll.AddStrings(SizeList);
        ListItemPtr.count := FileList.Count;
        ListItem.data := ListItemPtr;

        //==============================
        ListItemPtr.PrevDirItem := nil;
        ListItemPtr.NextDirItem := nil;
        ListItemPtr.UpDirItem := nil;
        //==============================

        //##################in the tree############3
        pMyTreeItem(findfnode.data)^.MyRightListItem := ListItem;

        CheckFile(MyDir, MyDir, MyGroup, 0, FileSize);
      end;

    end;
  end;
end;

procedure TSearchHostThread.AddDirNode;  //in left lan tree;
var
  item: TTreeNode;
  MyItemPtr     : PMyTreeItem;
begin
 with MainForm do
 begin
    // Add node to the tree
    New(MyItemPtr);
    MyItemPtr^.dirName := MyDir;
    MyItemPtr^.group := pMyTreeItem(MyNode.data)^.group;   //mynode is host
    item:=MyTree.Items.AddChild(MyNode,ExtractFileName(MyDir)); // item is share dir
    item.Data := MyItemPtr;
    if bPrinter then
    begin
      item.ImageIndex := 77;
      item.SelectedIndex := 77;
    end;
    FindfNode:= item;

    MyNode.ImageIndex :=8;
    MyNode.SelectedIndex :=8;
 end;
end;

procedure TSearchHostThread.CompareFile;
begin
 with MainForm do
 begin
      if ftype= IsFile then CheckFile(FileName, MyDir, MyGroup, 1, FileSize)
      else CheckFile(FileName, MyDir, MyGroup, 0, FileSize);
 end;
end;

procedure TSearchHostThread.Findf(dir:string);
var
  Found         : integer;
  SearchRec     : TSearchRec;
  result        : dWord;
  NR            : TNetResource;
  CanOpenDir    : boolean;
  TemNode       : TTreeNode;

  MyItemPtr     : PMyTreeItem;
begin
  with MainForm do
  begin
    EverFound:=false;
    NoShareFile:=false;
    CanOpenDir:=false;

    FindfNode.ImageIndex := 6;
    FindfNode.SelectedIndex := 6;

    Found := FindFirst(dir+'\*.*', faAnyFile, SearchRec);
    while Found = 0 do
    begin
      CanOpenDir:=true;
      if(SearchRec.Name<>'.')and(SearchRec.Name<>'..') then
      begin //add files or folders
        EverFound := true;
        FileName := SearchRec.Name;
        FileSize := SearchRec.Size;
        if ((SearchRec.Attr and faDirectory)<>0) then ftype:=IsDir else ftype:=IsFile;
        //temdir:=dir;

        //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
        if ftype = IsDir then FullFileName := dir+'\'+filename+'\'
        else FullFileName := dir+'\'+filename;
        Synchronize(AddFile);
        FileList.Add(FullFileName);
        SizeList.Add(inttostr(FileSize));
        //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

        if ftype=IsDir then
        begin
          New(MyItemPtr);
          MyItemPtr^.DirName := FullFileName;
          MyItemPtr^.Group := MyGroup;
          TemNode := Mytree.Items.AddChild(findfnode,FileName);
          TemNode.Data := MyItemPtr;
          TemNode.ImageIndex := 0;

          if recursive then findf(dir+'\'+SearchRec.Name);   //递归搜索
        end;
        Synchronize(CompareFile);
      end;
      Found := FindNext(SearchRec);
      if stop then exit;
      if terminated then exit;
    end;
    FindClose(SearchRec);

    if EverFound then
    begin
      FindfNode.ImageIndex := 10;
      FindfNode.SelectedIndex := 10;
      pMyTreeItem(findfnode.data)^.tabindex := 0;  //#########
    end
    else  //not EverFound
    begin
      if CanOpenDir then
      begin
        FindfNode.ImageIndex := 30;  //can open, but no file
        NoShareFile:=true;
      end
      else
      begin  //test password
        with NR do
        begin
            dwType := RESOURCETYPE_ANY;
            lpLocalName := pchar('z:');
            lpRemoteName := pchar(mydir);
            lpProvider := '';
        end;
        result:= WNetAddConnection2(NR, pchar(''), pchar('guest'),CONNECT_UPDATE_PROFILE);
        case result of
        ERROR_INVALID_PASSWORD:
        begin
            FindfNode.ImageIndex := 20;
            FindfNode.SelectedIndex :=20;
            FindfNode.StateIndex := 20;
            NeedPassWord:=true;
        end;
        else FindfNode.ImageIndex := 19;
        end; // end of case
        WNetCancelConnection2('z:', CONNECT_UPDATE_PROFILE, FALSE);
      end;  //end of test password
    end;
  end;

end;

procedure TSearchHostThread.NotFound;
begin

  with MainForm do
  begin
    //ListBox1.Items.Add(MyHost+inttostr(handle)); ///
    if not NeedLogin then
    begin
      if NoShareDir then
      begin
        MyNode.ImageIndex :=27;
        MyNode.SelectedIndex :=27;
      end
      else

⌨️ 快捷键说明

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