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

📄 tools.pas

📁 最好的局域网搜索软件
💻 PAS
📖 第 1 页 / 共 3 页
字号:
  i: integer;
  Item: TListItem;
begin

  if cbField.ItemIndex = 0 then
  for i := 0 to lvNbtDb.Items.Count - 1 do
  begin
    if (LowerCase(trim(lvNbtDb.Items[i].Caption)) = LowerCase(trim(EdtSearch.Text))) then
    begin
      Item := lvSearchResult.Items.Add;
      Item.Caption := lvNbtDb.Items[i].Caption;
      Item.SubItems.Add(lvNbtDb.Items[i].SubItems[0]);
      Item.SubItems.Add(lvNbtDb.Items[i].SubItems[1]);
      Item.SubItems.Add(lvNbtDb.Items[i].SubItems[2]);
      Item.SubItems.Add(lvNbtDb.Items[i].SubItems[3]);
    end;
    Application.ProcessMessages;
  end
  else
  for i := 0 to lvNbtDb.Items.Count - 1 do
  begin
    if (LowerCase(trim(lvNbtDb.Items[i].SubItems[cbField.ItemIndex-1]))
      = LowerCase(trim(EdtSearch.Text))) then
    begin
      Item := lvSearchResult.Items.Add;
      Item.Caption := lvNbtDb.Items[i].Caption;
      Item.SubItems.Add(lvNbtDb.Items[i].SubItems[0]);
      Item.SubItems.Add(lvNbtDb.Items[i].SubItems[1]);
      Item.SubItems.Add(lvNbtDb.Items[i].SubItems[2]);
      Item.SubItems.Add(lvNbtDb.Items[i].SubItems[3]);
    end;
    Application.ProcessMessages;
  end;
  
end;

procedure TToolsForm.btnSortClick(Sender: TObject);
begin
  lvNbtDb.SortType := stText;
end;

procedure TToolsForm.cbScanPort1Change(Sender: TObject);
begin
  cbScanPort2.Text := cbScanPort1.Text;
end;

procedure TToolsForm.lvIpAddrDblClick(Sender: TObject);
begin

  if lvIpAddr.Selected = nil then exit;
  with MainForm do
  begin
    edtIP1.Text := lvIpAddr.Selected.Caption;
    edtIP2.Text := lvIpAddr.Selected.SubItems[0];
    LeftPageCtrl.ActivePageIndex := 0;
    SearchPageCtrl.ActivePageIndex := 1;
  end;

end;

procedure TToolsForm.btnRefreshIpCfgClick(Sender: TObject);
begin
  memIpCfg.Lines.Clear;
  lvIpAddr.Items.Clear;
  EnumInterfaces;
end;

procedure TToolsForm.cbNbtDataLoadClick(Sender: TObject);
begin

  lvSearchResult.Enabled := not cbNbtDataLoad.Checked;
  lvNbtDb.Enabled := not cbNbtDataLoad.Checked;
  label18.Enabled := not cbNbtDataLoad.Checked;
  label19.Enabled := not cbNbtDataLoad.Checked;
  label20.Enabled := not cbNbtDataLoad.Checked;
  cbField.Enabled := not cbNbtDataLoad.Checked;
  edtSearch.Enabled := not cbNbtDataLoad.Checked;
  btnSearchField.Enabled := not cbNbtDataLoad.Checked;
  btnSort.Enabled := not cbNbtDataLoad.Checked;

  if (not cbNbtDataLoad.Checked)and(lvNbtDb.Items.Count = 0)
  then LoadNbtData;

end;

procedure TToolsForm.SaveList;
var
  f: TextFile;
  i: integer;
begin

  AssignFile(f, AppDir + '\tools.log');
  ReWrite(f);

  writeln(f, '[favorite_range]');
  for i:=0 to lvSaveRange.Items.Count-1 do
  begin
    // lvSaveRange
    write(f, lvSaveRange.Items[i].Caption);
    write(f, '-');
    writeln(f, lvSaveRange.Items[i].SubItems[0]);
  end;

  writeln(f, '[send_to]');
  for i:=0 to (cbToHost.Items.Count-1) do
  begin
    writeln(f, cbToHost.Items[i]);
  end;

  CloseFile(f);

end;

procedure TToolsForm.LoadList;
var
  f             : TextFile;
  s, s1, s2     : string;
  Item          : TListItem;
  i, j          : integer;
begin

  if FileExists('tools.log') then
  begin
    i := 0;
    AssignFile(f, 'tools.log');
    Reset(f);

    while not eof(f) do
    begin
      readln(f, s);
      
      s := trim(s);
      if s = '' then continue;

      if s = '[favorite_range]' then i := 0
      else if s = '[send_to]' then i := 2
      else if s = '[copy_to]' then i := 3
      else if i = 0 then
      begin
        // lvSaveRange
        j := pos('-', s);
        s1 := copy(s, 1, j-1);
        s2 := copy(s, j+1, length(s)-j);
        Item := lvSaveRange.Items.Add;
        Item.Caption := s1;
        Item.SubItems.Add(s2);
      end
      else if i = 2 then
      begin
        cbToHost.Items.Add(s);
      end;
    end;

    CloseFile(f);
  end;

end;

//----------
procedure TToolsForm.SaveIpRange;
var
  AddrFile      : TextFile;
  i             : integer;
begin

  //if (lvIpAddrRange.Items.Count=0)
  //  and(not FileExists(AppDir + '\ip_range.txt')) then exit;
    
  AssignFile(AddrFile, AppDir + '\ip_range.txt');
  ReWrite(AddrFile);

  for i:=0 to lvIpAddrRange.Items.Count-1 do
  begin
    // lvIpAddrRange
    writeln(AddrFile, lvIpAddrRange.Items[i].Caption);
    writeln(AddrFile, lvIpAddrRange.Items[i].SubItems[0]);
  end;

  CloseFile(AddrFile);

end;

procedure TToolsForm.LoadIpRange;
var
  AddrFile      : TextFile;
  //i             : integer;
  s1, s2        : string;
  Item          : TListItem;
begin

  if FileExists('ip_range.txt') then
  begin
    AssignFile(AddrFile, 'ip_range.txt');
    Reset(AddrFile);

    while not eof(AddrFile) do
    begin
      // lvIpAddrRange
      readln(AddrFile, s1);
      readln(AddrFile, s2);
      Item := lvIpAddrRange.Items.Add;
      Item.Caption := s1;
      Item.SubItems.Add(s2);
    end;

    CloseFile(AddrFile);
  end;

end;
//----------

procedure TToolsForm.AddIpAddrRange(ip1, ip2: string);
var
  i: integer;
  nIP1, nIP2, nAddr1, nAddr2: dword;
  b: boolean;
  Item: TListItem;
begin

  nIP1 := ntohl(inet_addr(pchar(IP1)));
  nIP2 := ntohl(inet_addr(pchar(IP2)));

  b := false;

  for i := 0 to (lvIpAddrRange.Items.Count-1) do
  begin
    nAddr1 := ntohl(inet_addr(pchar(lvIpAddrRange.Items[i].Caption)));
    nAddr2 := ntohl(inet_addr(pchar(lvIpAddrRange.Items[i].SubItems[0])));

    {
                 nAddr1           nAddr2
            nIP1           nIP2
    }
    if (nIP2 >= nAddr1)and(nIP1 <= nAddr1)and(nIP1 <= nAddr2) then
    begin
      lvIpAddrRange.Items[i].Caption := IP1;
      b := true;
    end;

    {
                 nAddr1          nAddr2
            nIP1                          nIP2
    }
    if (nIP1 <= nAddr1)and(nIP2 >= nAddr2) then
    begin
      lvIpAddrRange.Items[i].Caption := IP1;
      lvIpAddrRange.Items[i].SubItems[0] := IP2;
      b := true;
    end;

    {
                 nAddr1                  nAddr2
                        nIP1      nIP2
    }
    if (nIP1 >= nAddr1)and(nIP2 <= nAddr2) then
    begin
      b := true;
    end;

    {
                 nAddr1          nAddr2
                        nIP1              nIP2
    }
    if (nIP1 >= nAddr1)and((nIP1 <= nAddr2))and(nIP2 >= nAddr2) then
    begin
      lvIpAddrRange.Items[i].SubItems[0] := IP2;
      b := true;
    end;

  end;

  if (not b) then
  begin
    Item := lvIpAddrRange.Items.Add;
    Item.Caption := IP1;
    Item.SubItems.Add(IP2);
  end;

end;

procedure TToolsForm.SaveRange(ip1, ip2: string);
var
  i: integer;
  nIP1, nIP2, nAddr1, nAddr2: dword;
  b: boolean;
  Item: TListItem;
begin

  nIP1 := ntohl(inet_addr(pchar(IP1)));
  nIP2 := ntohl(inet_addr(pchar(IP2)));

  b := false;

  for i := 0 to (lvSaveRange.Items.Count-1) do
  begin
    nAddr1 := ntohl(inet_addr(pchar(lvSaveRange.Items[i].Caption)));
    nAddr2 := ntohl(inet_addr(pchar(lvSaveRange.Items[i].SubItems[0])));

    {
                 nAddr1           nAddr2
            nIP1           nIP2
    }
    if (nIP2 >= nAddr1)and(nIP1 <= nAddr1)and(nIP1 <= nAddr2) then
    begin
      lvSaveRange.Items[i].Caption := IP1;
      b := true;
    end;

    {
                 nAddr1          nAddr2
            nIP1                          nIP2
    }
    if (nIP1 <= nAddr1)and(nIP2 >= nAddr2) then
    begin
      lvSaveRange.Items[i].Caption := IP1;
      lvSaveRange.Items[i].SubItems[0] := IP2;
      b := true;
    end;

    {
                 nAddr1                  nAddr2
                        nIP1      nIP2
    }
    if (nIP1 >= nAddr1)and(nIP2 <= nAddr2) then
    begin
      b := true;

      self.show;
      MainForm.ShowToolsForm(6);
      PageSaveRange.ActivePageIndex := 1;
      lvSaveRange.Items[i].Selected := true; // Focus that item
      lvSaveRange.SetFocus;

    end;

    {
                 nAddr1          nAddr2
                        nIP1              nIP2
    }
    if (nIP1 >= nAddr1)and((nIP1 <= nAddr2))and(nIP2 >= nAddr2) then
    begin
      lvSaveRange.Items[i].SubItems[0] := IP2;
      b := true;
    end;

  end;

  if (not b) then
  begin
    Item := lvSaveRange.Items.Add;
    Item.Caption := IP1;
    Item.SubItems.Add(IP2);

    SaveList;
  end
  else
  begin
        if (not visible) then Self.Show;
        MainForm.ShowToolsForm(6);
        PageSaveRange.ActivePageIndex := 1;
  end

end;

procedure TToolsForm.lvIpAddrRangeDblClick(Sender: TObject);
begin
  if lvIpAddrRange.Selected = nil then exit;
  with MainForm do
  begin
    edtIP1.Text := lvIpAddrRange.Selected.Caption;
    edtIP2.Text := lvIpAddrRange.Selected.SubItems[0];
    LeftPageCtrl.ActivePageIndex := 0;
    SearchPageCtrl.ActivePageIndex := 1;
  end;
end;

procedure TToolsForm.btnDelIpRangeClick(Sender: TObject);
var
  i: integer;
begin
  for i:=(lvIpAddrRange.Items.Count - 1) downto 0 do
  begin
    if lvIpAddrRange.Items[i].Selected then lvIpAddrRange.Items[i].Delete;
  end
end;

procedure TToolsForm.IPAddrUpDown(edtIP1, edtIP2: TEdit; up: boolean);
var
  nIP1, nIP2, i: dword;
begin

  if not IsLegalIP(edtIP1.Text) then
  begin
    ShowMessage('IP地址非法:' + edtIP1.Text);
    exit;
  end;

  if not IsLegalIP(edtIP2.Text) then
  begin
    ShowMessage('IP地址非法:' + edtIP2.Text);
    exit;
  end;

  nIP1 := ntohl(inet_addr(pchar(edtIP1.Text)));
  nIP2 := ntohl(inet_addr(pchar(edtIP2.Text)));
  i := nIP2 - nIP1 + 1;

  if up then
  begin
    edtIP1.Text := inet_ntoa(in_addr(htonl(nIP1+i)));
    edtIP2.Text := inet_ntoa(in_addr(htonl(nIP2+i)));
  end
  else
  begin
    edtIP1.Text := inet_ntoa(in_addr(htonl(nIP1-i)));
    edtIP2.Text := inet_ntoa(in_addr(htonl(nIP2-i)));
  end

end;

procedure TToolsForm.btnNbtAddrUpClick(Sender: TObject);
begin

  IPAddrUpDown(edtNbtIP1, edtNbtIP2,  true);

end;

procedure TToolsForm.btnNbtAddrDownClick(Sender: TObject);
begin

  IPAddrUpDown(edtNbtIP1, edtNbtIP2,  false);

end;

procedure TToolsForm.btnScanAddrUpClick(Sender: TObject);
begin
  IPAddrUpDown(edtScanIP1, edtScanIP2,  true);
end;

procedure TToolsForm.btnScanAddrDownClick(Sender: TObject);
begin
  IPAddrUpDown(edtScanIP1, edtScanIP2,  false);
end;

procedure TToolsForm.btnPingAddrUpClick(Sender: TObject);
begin
  IPAddrUpDown(edtPing1, edtPing2,  true);
end;

procedure TToolsForm.btnPingAddrDownClick(Sender: TObject);
begin
  IPAddrUpDown(edtPing1, edtPing2,  false);
end;

procedure TToolsForm.btnNbtLocalLanClick(Sender: TObject);
begin
  if ToolsForm.lvIpAddr.Items.Count <> 0 then
  begin
    edtNbtIP1.Text := ToolsForm.lvIpAddr.Items[0].Caption;
    edtNbtIP2.Text := ToolsForm.lvIpAddr.Items[0].SubItems[0];
  end;
end;

procedure TToolsForm.btnScanLocalLanClick(Sender: TObject);
begin
  if ToolsForm.lvIpAddr.Items.Count <> 0 then
  begin
    edtScanIP1.Text := ToolsForm.lvIpAddr.Items[0].Caption;
    edtScanIP2.Text := ToolsForm.lvIpAddr.Items[0].SubItems[0];
  end;
end;

procedure TToolsForm.btnPingLocalLanClick(Sender: TObject);
begin
  if ToolsForm.lvIpAddr.Items.Count <> 0 then
  begin
    edtPing1.Text := ToolsForm.lvIpAddr.Items[0].Caption;
    edtPing2.Text := ToolsForm.lvIpAddr.Items[0].SubItems[0];
  end;
end;

procedure TToolsForm.lvIpAddrRangeColumnClick(Sender: TObject;
  Column: TListColumn);
begin
  lvIpAddrRange.SortType := stText;
end;

procedure TToolsForm.lvSaveRangeDblClick(Sender: TObject);
begin
  if lvSaveRange.Selected = nil then exit;
  with MainForm do
  begin
    edtIP1.Text := lvSaveRange.Selected.Caption;
    edtIP2.Text := lvSaveRange.Selected.SubItems[0];
    LeftPageCtrl.ActivePageIndex := 0;
    SearchPageCtrl.ActivePageIndex := 1;
  end;
end;

procedure TToolsForm.lvSaveRangeColumnClick(Sender: TObject;
  Column: TListColumn);
begin
  lvSaveRange.SortType := stText;
end;

procedure TToolsForm.Button1Click(Sender: TObject);
var
  i: integer;
begin
  for i:=(lvSaveRange.Items.Count - 1) downto 0 do
  begin
    if lvSaveRange.Items[i].Selected then lvSaveRange.Items[i].Delete;
  end
end;

procedure TToolsForm.rbUseListClick(Sender: TObject);
begin
  if rbUseList.Checked then
  begin
    edtPort.Enabled := true;
    btnAddPort.Enabled := true;
    clbPort.Enabled := true;

    Label10.Enabled := false;
    Label22.Enabled := false;
    Label21.Enabled := false;
    cbScanPort1.Enabled := false;
    cbScanPort2.Enabled := false;
  end
end;

procedure TToolsForm.rbUseFromToClick(Sender: TObject);
begin
  if rbUseFromTo.Checked then
  begin
    edtPort.Enabled := false;
    btnAddPort.Enabled := false;
    clbPort.Enabled := false;

    Label10.Enabled := true;
    Label22.Enabled := true;
    Label21.Enabled := true;
    cbScanPort1.Enabled := true;
    cbScanPort2.Enabled := true;
  end
end;

procedure TToolsForm.btnAddPortClick(Sender: TObject);
begin
  clbPort.Items.Add(edtPort.Text);
  clbPort.Checked[clbPort.Items.Count - 1] := true;
end;

end.

⌨️ 快捷键说明

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