Объединенный Открытый Проект - Сайт для Настоящих Компьютерщиков

Объединенный Открытый Проект

Сайт для Настоящих Компьютерщиков

; Логин:
  Пароль:
Обычный
Безопасный
Запомнить пользователя



Зарегистрироваться
Забыли пароль?
 
 
 
Объединенный Открытый Проект »   Программирование »   Pascal/Delphi »   Информация о сетевых интерфейсах.
RSS

Информация о сетевых интерфейсах.

Текущий рейтинг темы: Нет

<<Назад  Вперед>>Модераторы: Winnowing_Raven, wsxПечать
 
wsx
Модератор раздела
Юниксойд, сетевик
wsx
Откуда: Казань
Всего сообщений: 1074
Рейтинг пользователя: 28

Репутация пользователя: 1




Дата регистрации на форуме:
14 янв. 2005
Вопрос больше по WinAPI.
Как можно получить информацию о Сетевом интерфейсе.
Конкретнее название подключения и его настройки.


Можно смотреть в реестре, но это будет через "жо", да и юзеры говорят, что глюки бывают.
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 2994
Рейтинг пользователя: 79





Дата регистрации на форуме:
29 сен. 2001
Основная функция - GetNetworkParams, но есть еще куча. В MSDN они описаны в разделе IP Helper Functions, причем их там довольно много.

---
Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
Nerd
Новичок

Nerd
Откуда: Cherepovets
Всего сообщений: 3
Рейтинг пользователя: 2





Дата регистрации на форуме:
20 мар. 2006
Сканированием естественно


unit Unit1;



interface



uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ComCtrls, Winsock, ImgList, ShellAPI;



const

  STR_START    =  'Начать сканирование';

  STR_STOP     =  'Остановить сканирование';

  STR_STARTED  =  '   Идет сканирование ...';

  STR_STOPPED  =  '   Сканирование завершено ...';

  STR_END      =  '   Завершение потока ...';

  STR_FIELD    =  '   Поле не выбрано ...';



type

  TDemoThread = class(TThread)

  private

    TreeNetWrk: TTreeNode;

    TreeDomain: TTreeNode;

    TreeServer: TTreeNode;

    TreeShares: TTreeNode;

    Param_dwType: Byte;

    Param_dwDisplayType: Byte;

    Param_lpRemoteName: String;

    Param_lpIP: String;

  protected

    procedure Execute; override;

    procedure Scan(Res: TNetResource; Root: boolean);

    procedure AddElement;

    procedure Stop;

  end;



  TForm1 = class(TForm)

    Button1: TButton;

    TreeView1: TTreeView;

    StatusBar1: TStatusBar;

    ImageList1: TImageList;

    procedure Button1Click(Sender: TObject);

    procedure TreeView1Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure TreeView1DblClick(Sender: TObject);

  private

    Thread: TDemoThread;

  end;



var

  Form1: TForm1;



implementation



{$R *.dfm}



function GetIPAddress(NetworkName: String): String;

var

Error: DWORD;

HostEntry: PHostEnt;

Data: WSAData;

Address: In_Addr;

begin

  Delete(NetworkName, 1, 2);

  Error:=WSAStartup(MakeWord(1, 1), Data);

  if Error = 0 then

  begin

    HostEntry:=gethostbyname(PChar(NetworkName));

    Error:=GetLastError;

    if Error = 0 then

    begin

      Address:=PInAddr(HostEntry^.h_addr_list^)^;

      Result:=inet_ntoa(Address);

    end

    else

     Result:='Unknown';

  end

  else

    Result:='Error';

  WSACleanup;

end;



{ TDemoThread }



procedure TDemoThread.Execute;

var

  R:TNetResource;

begin

  inherited;

  Priority := tpIdle;

  FreeOnTerminate := True;

  Resume;

  Scan(R, True);

  TreeDomain := nil;

  TreeServer := nil;

  Synchronize(Stop);

end;



procedure TDemoThread.Scan(Res: TNetResource; Root: boolean);

var

hEnum: Cardinal;

nrResource: array[0..512] of TNetResource;

dwSize: DWORD;

numEntries: DWORD;

I: DWORD;

dwResult: DWORD;

begin

  if Root then

    dwResult := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,

      0, nil, hEnum)

  else

    dwResult := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,

      0, @Res, hEnum);

  if dwResult = NO_ERROR then

  begin

    dwSize := SizeOf(nrResource);

    numEntries := DWORD(-1);                                   // ERROR_NO_MORE_ITEMS

    if WNetEnumResource(hEnum, numEntries, @nrResource, dwSize) = NO_ERROR then

    begin

      for i := 0 to numEntries - 1 do

      begin

        if Terminated then Break;

        with nrResource[i] do

        begin

          Param_dwType := dwType;

          Param_dwDisplayType := dwDisplayType;

          Param_lpRemoteName := lpRemoteName;

          if Param_dwDisplayType = RESOURCEDISPLAYTYPE_SERVER then

            Param_lpIP := GetIPAddress(Param_lpRemoteName);

        end;

        if Assigned(nrResource[i].lpRemoteName) then

          Synchronize(AddElement);

        Scan(nrResource[i], false);

      end;

    WNetCloseEnum(hEnum);

    end;

  end;

end;



procedure TDemoThread.AddElement;

begin

  Application.ProcessMessages;

  case Param_dwDisplayType of

    RESOURCEDISPLAYTYPE_NETWORK:

    begin

      TreeNetWrk := Form1.TreeView1.Items.Add(nil, Param_lpRemoteName);

      TreeNetWrk.StateIndex := 1;

    end;

    RESOURCEDISPLAYTYPE_DOMAIN:

    begin

      TreeDomain := Form1.TreeView1.Items.AddChild(TreeNetWrk, Param_lpRemoteName);

      TreeDomain.StateIndex := 2;

    end;

    RESOURCEDISPLAYTYPE_SERVER:

    begin

      TreeServer := Form1.TreeView1.Items.AddChild(TreeDomain, Param_lpRemoteName + ' IP: ' + Param_lpIP);

      TreeServer.StateIndex := 3;

    end;

    RESOURCEDISPLAYTYPE_SHARE:

    begin

      TreeShares := Form1.TreeView1.Items.AddChild(TreeServer, Param_lpRemoteName);

      TreeShares.StateIndex := 3 + Param_dwType;

    end;

  end;

end;



procedure TDemoThread.Stop;

begin

  Form1.StatusBar1.Panels[1].Text := STR_STOPPED;

  Form1.Button1.Caption := STR_START;

  Form1.Button1.Enabled := True;

  Form1.Tag := 0;

end;



{ TForm1 }



procedure TForm1.FormCreate(Sender: TObject);

begin

  Tag := 0;

end;



procedure TForm1.Button1Click(Sender: TObject);

begin

  Tag := Tag + 1;

  if (Tag mod 2) = 1 then

  begin

    TreeView1.Items.Clear;

    StatusBar1.Panels[1].Text := STR_STARTED;

    Button1.Caption := STR_STOP;

    Thread := TDemoThread.Create(False);

  end

  else

  begin

    StatusBar1.Panels[1].Text := STR_END;

    Button1.Enabled := False;

    Thread.Terminate;

  end;

end;



procedure TForm1.TreeView1Click(Sender: TObject);

begin

  if Assigned(TreeView1.Selected) then

    StatusBar1.Panels[0].Text := '   ' + TreeView1.Selected.Text

  else

    StatusBar1.Panels[0].Text := STR_FIELD;

end;



procedure TForm1.TreeView1DblClick(Sender: TObject);

var

  Str: String;

begin

  if Assigned(TreeView1.Selected) then

  begin

    Str := TreeView1.Selected.Text;

    if Copy(Str, 1, 2) <> '\\' then Exit;

    if Pos(' IP:', Str) <> 0 then

      ShellExecute(Handle, 'explore', PChar(Copy(Str, 1, Pos(' IP:', Str))), nil, nil, SW_SHOW)

    else

      ShellExecute(Handle, 'explore', PChar(Str), nil, nil, SW_SHOW);

  end;

end;



end.



---
// наСИльник и дельфинист
wsx
Модератор раздела
Юниксойд, сетевик
wsx
Откуда: Казань
Всего сообщений: 1074
Рейтинг пользователя: 28

Репутация пользователя: 1




Дата регистрации на форуме:
14 янв. 2005
Nerd, Хм.. Сейчас в ВинАпи доке уточню, но помоему здесь немного не та инфа выходит. Мне нужно именно название сетевых подключений. Хотя я и обошёл это давным давно, всё равно спасибо. Возможно некоторые фичи перепишу.
<<Назад  Вперед>>Модераторы: Winnowing_Raven, wsxПечать
Объединенный Открытый Проект »   Программирование »   Pascal/Delphi »   Информация о сетевых интерфейсах.
RSS
Быстрый переход в раздел:


Время выполнения скрипта: 0.0327. Количество выполненных запросов: 18, время выполнения запросов 0.0213