Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.10.2011, 00:35
inspector inspector вне форума
Прохожий
 
Регистрация: 25.12.2009
Сообщения: 13
Репутация: 10
По умолчанию получение ip-адреса, списка компьютеров в сети

всём доброго времени суток, задача - получить ip адрес, получаю при помощи IdIPWatch, вывожу в edit. теперь мне нужно этот текст, а конкретнее, ***.***.***.*** проанализировать и выдать тип сети, маску и прочее. при простом сравнении, получаю фразу, о том, что ***.***.***.*** не является целочисленным числом.

как получить список подключённых пк вообще не знаю, к тому же у меня в локалке никого нет, даже проверить не могу.
Ответить с цитированием
  #2  
Старый 10.10.2011, 00:49
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Конечно это не целочисленное число, это строка. Теперь разбивай её на триады и анализируй.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 10.10.2011, 00:51
inspector inspector вне форума
Прохожий
 
Регистрация: 25.12.2009
Сообщения: 13
Репутация: 10
По умолчанию

как я понимаю, нужно значение из edit.text проанализировать до первой точки и всё, что было до неё записать в буфер, так? в теории, вроде, ясно, как реализуется на практике разбиение строки?
Ответить с цитированием
  #4  
Старый 10.10.2011, 01:05
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Используй функции Pos и Copy.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 10.10.2011, 01:10
inspector inspector вне форума
Прохожий
 
Регистрация: 25.12.2009
Сообщения: 13
Репутация: 10
По умолчанию

спасибо, сделал немного по-другому
Код:
s:= TStringlist.create;
s1:=edt1.Text;
s.Delimiter:='.';
s.DelimitedText:=s1;

теперь айпи разберу, есть другая проблема - получение количества компьютеров в локальной сети, просто число и ничего больше.
Ответить с цитированием
  #6  
Старый 10.10.2011, 01:29
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Простой поиск, дал это:
Код:
{ **** 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.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 10.10.2011, 01:36
inspector inspector вне форума
Прохожий
 
Регистрация: 25.12.2009
Сообщения: 13
Репутация: 10
По умолчанию

в поиске я это находил, в данный момент чайник не варит вообще, чтобы можно было разобрать код на составляющие. хотелось бы чего-нибудь простого и маленького. всё равно, спасибо за помощь, завтра с утра встану, начну копать.
Ответить с цитированием
  #8  
Старый 10.10.2011, 01:42
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Вот проще:
Код:
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);    
всё это из базы знаний DelphiWorld.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 10.10.2011 в 01:44.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:16.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025