![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
всём доброго времени суток, задача - получить ip адрес, получаю при помощи IdIPWatch, вывожу в edit. теперь мне нужно этот текст, а конкретнее, ***.***.***.*** проанализировать и выдать тип сети, маску и прочее. при простом сравнении, получаю фразу, о том, что ***.***.***.*** не является целочисленным числом.
как получить список подключённых пк вообще не знаю, к тому же у меня в локалке никого нет, даже проверить не могу. |
|
#2
|
||||
|
||||
|
Конечно это не целочисленное число, это строка. Теперь разбивай её на триады и анализируй.
|
|
#3
|
|||
|
|||
|
как я понимаю, нужно значение из edit.text проанализировать до первой точки и всё, что было до неё записать в буфер, так? в теории, вроде, ясно, как реализуется на практике разбиение строки?
|
|
#4
|
||||
|
||||
|
Используй функции Pos и Copy.
|
|
#5
|
|||
|
|||
|
спасибо, сделал немного по-другому
Код:
s:= TStringlist.create; s1:=edt1.Text; s.Delimiter:='.'; s.DelimitedText:=s1; теперь айпи разберу, есть другая проблема - получение количества компьютеров в локальной сети, просто число и ничего больше. |
|
#6
|
||||
|
||||
|
Простой поиск, дал это:
Код:
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Выводит Список компьютеров в локальной сети
Так... писал для своих целей.
Этот код нужен часто... писать несложно ... разобраться легко
Код тестирован на 100%
Зависимости: Смотрите uses
Автор: Mirag, wwwMirage@yandex.ru, Mirag
Copyright: Mirag
Дата: 14 ноября 2002 г.
***************************************************** }
unit Net;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, Buttons, ImgList, ExtCtrls;
type
TNetForm = class(TForm)
ListView1: TListView;
ImageList1: TImageList;
Button1: TButton;
Edit1: TEdit;
Timer: TTimer;
Label1: TLabel;
Button2: TButton;
{ procedure FormShow(Sender: TObject);}
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure TimerTimer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function FillNetLevel(xxx: PNetResource; list: TListItems): Word;
function GetComputer: string;
end;
var
NetForm: TNetForm;
name_server: integer;
implementation
uses main, Info, Network_connect;
{$R *.DFM}
function TNetForm.FillNetLevel(xxx: PNetResource; List: TListItems): Word;
type
PNRArr = ^TNRArr;
TNRArr = array[0..59] of TNetResource;
var
x: PNRArr;
tnr: TNetResource;
I: integer;
EntrReq,
SizeReq,
twx: THandle;
WSName: string;
LI: TListItem;
begin
Result := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
RESOURCEUSAGE_CONTAINER, xxx, twx);
if Result = ERROR_NO_NETWORK then
Exit;
if Result = NO_ERROR then
begin
New(x);
EntrReq := 1;
SizeReq := SizeOf(TNetResource) * 59;
while (twx <> 0) and
(WNetEnumResource(twx, EntrReq, x, SizeReq) <> ERROR_NO_MORE_ITEMS) do
begin
for i := 0 to EntrReq - 1 do
begin
Move(x^[i], tnr, SizeOf(tnr));
case tnr.dwDisplayType of
RESOURCEDISPLAYTYPE_SERVER:
begin
if tnr.lpRemoteName <> '' then
WSName := tnr.lpRemoteName
else
WSName := tnr.lpComment;
LI := list.Add;
LI.Caption := copy(WSName, 3, length(WSName) - 2);
//list.Add(WSName);
end;
else
FillNetLevel(@tnr, list);
end;
end;
end;
//Dispose(x);
WNetCloseEnum(twx);
end;
end;
{procedure TNetForm.FormShow(Sender: TObject);
begin
ListView1.Items.Clear;
FillNetLevel(nil,ListView1.Items);
end;}
function TNetForm.GetComputer: string;
begin
result := '';
if (ShowModal = mrok) and (ListView1.Selected <> nil) then
result := ListView1.Selected.Caption;
end;
procedure TNetForm.BitBtn2Click(Sender: TObject);
begin
ModalResult := mrcancel;
end;
procedure TNetForm.BitBtn1Click(Sender: TObject);
begin
modalresult := mrok;
end;
procedure TNetForm.Button1Click(Sender: TObject);
var
i: integer;
j: integer;
name, k: string;
begin
try
ListView1.Items.Clear;
FillNetLevel(nil, ListView1.Items);
i := ListView1.Items.Count;
edit1.Text := IntToStr(i);
i := ListView1.Items.Count;
edit1.Text := IntToStr(i);
//i:=0;
if i = 0 then
begin
Messagebox(0, 'Не найден ни один сетевой ресурс!' + #13#10+
'Вероятно ваша сеть неисправна!' + #13#10+
'Попробуйте перезагрузить компьютер.', 'Внимание!', MB_OK);
Main_form.Edit1.Text := 'FALSE';
end;
if i > 0 then
begin
Messagebox(0, 'Найдены сетевые ресурсы!' + #13#10+'Ваша сеть исправна!',
'Внимание!', MB_OK);
Main_form.Edit1.Text := 'TRUE';
end;
button1.Enabled := false;
except
messagebox(0, 'Невозможно выполнить задачу', 'Внимание', MB_OK);
end;
end;
procedure TNetForm.Button2Click(Sender: TObject);
begin
close;
end;
procedure TNetForm.TimerTimer(Sender: TObject);
begin
if ListView1.Items.Count = 0 then
close;
end;
procedure TNetForm.FormCreate(Sender: TObject);
begin
button1.Enabled := true;
end;
end. |
|
#7
|
|||
|
|||
|
в поиске я это находил, в данный момент чайник не варит вообще, чтобы можно было разобрать код на составляющие. хотелось бы чего-нибудь простого и маленького. всё равно, спасибо за помощь, завтра с утра встану, начну копать.
|
|
#8
|
||||
|
||||
|
Вот проще:
Код:
function TNetForm.FillNetLevel(xxx: PNetResource; List: TListItems): Word;
type
PNRArr = ^TNRArr;
TNRArr = array[0..59] of TNetResource;
var
x: PNRArr;
tnr: TNetResource;
I: integer;
EntrReq,
SizeReq,
twx: THandle;
WSName: string;
LI: TListItem;
begin
Result := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
RESOURCEUSAGE_CONTAINER, xxx, twx);
if Result = ERROR_NO_NETWORK then
Exit;
if Result = NO_ERROR then
begin
New(x);
EntrReq := 1;
SizeReq := SizeOf(TNetResource) * 59;
while (twx <> 0) and
(WNetEnumResource(twx, EntrReq, x, SizeReq) <> ERROR_NO_MORE_ITEMS) do
begin
for i := 0 to EntrReq - 1 do
begin
Move(x^[i], tnr, SizeOf(tnr));
case tnr.dwDisplayType of
RESOURCEDISPLAYTYPE_SERVER:
begin
if tnr.lpRemoteName <> '' then
WSName := tnr.lpRemoteName
else
WSName := tnr.lpComment;
LI := list.Add;
LI.Caption := copy(WSName, 3, length(WSName) - 2);
//list.Add(WSName);
end;
else
FillNetLevel(@tnr, list);
end;
end;
end;
Dispose(x);
WNetCloseEnum(twx);
end;
end;
Пример вызова:
FillNetLevel(nil, ListView1.Items); Последний раз редактировалось angvelem, 10.10.2011 в 01:44. |