📄 tools.pas
字号:
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 + -