Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2008, 16:57   #1
GAGARIN-NEW
Познаю мир
Форумчанин Подтвердите свой е-майл
 
Аватар для GAGARIN-NEW
 
Регистрация: 05.10.2007
Сообщений: 387
Вопрос

Добрый день !

Дайте пожалуйста процедуру каторая бы показывала рабочие групы и компьютеры в них ... и выводила бы всю эту прелесть в TreeView

или хотябы функцию каторая находила список всех активных групп в локалке ...

Код:
 function GetIPFromHost(const HostName: string): string;
type
  TaPInAddr = array[0..10] of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  phe: PHostEnt;
  pptr: PaPInAddr;
  i: Integer;
  GInitData: TWSAData;
begin
  WSAStartup($101, GInitData);
  Result := '';
  phe := GetHostByName(PChar(HostName));
  if phe = nil then Exit;
  pPtr := PaPInAddr(phe^.h_addr_list);
  i := 0;
  while pPtr^[i] <> nil do
  begin
    Result := inet_ntoa(pptr^[i]^);
    Inc(i);
  end;
  WSACleanup;
end;
Код:
procedure FindAllComputers(Workgroup: String);
var
  Computer: array[1..500] of string[25];
  ComputerCount: integer;
  EnumHandle: THandle;
  WorkgroupRS: TNetResource;
  Buf: array[1..500] of TNetResource;
  BufSize: cardinal;
  Entries: cardinal;
  Result: integer;
  i: integer;
begin
   ComputerCount := 0;
   Workgroup := Workgroup + #0;
   FillChar( WorkgroupRS, SizeOf( WorkgroupRS ) , 0 );
   With WorkgroupRS do
   begin
      dwScope := 2;
      dwType := 3;
      dwDisplayType := 1;
      dwUsage := 2;
      lpRemoteName := @Workgroup[1];
   end;
   WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @WorkgroupRS, EnumHandle );
   Repeat
      Entries := 1;
      BufSize := SizeOf( Buf );
      Result := WNetEnumResource( EnumHandle, Entries, @Buf, BufSize );
      If ( Result = NO_ERROR ) and ( Entries = 1 ) then
      begin
         Inc( ComputerCount );
         Computer[ComputerCount] := StrPas( Buf[1].lpRemoteName );
      end;
   Until ( Entries <> 1 ) or ( Result <> NO_ERROR );
   WNetCloseEnum( EnumHandle );
   for i := 1 to ComputerCount do
      fm1.TreeView2.Items.AddFirst(fm1.TreeView2.TopItem ,Computer[i]);
end;
Из Данных функций немного похимичил и вот что вышло


А вот как найти все рабочие группы я так и неузнвл ...
Вложения
Тип файла: rar FindShare.rar (221.4 Кб, 238 просмотров)
---

Последний раз редактировалось Stilet; 11.02.2008 в 16:58.
GAGARIN-NEW вне форума Ответить с цитированием
Старый 11.02.2008, 17:04   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Отвечает Delphi World: Как правило это можно сделать так
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
  Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    RichEdit1: TRichEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Res: TNetResource;
  s: TStrings;
implementation

{$R *.dfm}

// Ïåðåìåííàÿ List çàïîëíÿåòñÿ ñïèñêîì äîìåíîâ.
// Ôóíêöèÿ âîçâðàùàåò êîä îøèáêè îáðàùåíèÿ ê ñåòè.

function FillNetLevel(xxx: PNetResource; list: TStrings): Word;
type
  PNRArr = ^TNRArr;
  TNRArr = array[0..59] of TNetResource;
var
  x: PNRArr;
  tnr: TNetResource;
  I: integer;
  EntrReq,
    SizeReq,
    twx: THandle;
  WSName: string;
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_DOMAIN:
            begin
              if tnr.lpRemoteName <> '' then
                WSName := tnr.lpRemoteName
              else
                WSName := tnr.lpComment;
              list.Add(WSName);
            end;
        else
          FillNetLevel(@tnr, list);
        end;
      end;
    end;
    Dispose(x);
    WNetCloseEnum(twx);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    s := TStringList.Create;
    FillNetLevel(@Res, S);
    RichEdit1.Lines.Assign(s);
    S.Free
  except
    S.Free;
    ShowMessage('Íå óäàëîñü ïîëó÷èòü ñïèñîê äîìåíîâ')
  end
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.02.2008, 18:44   #3
GAGARIN-NEW
Познаю мир
Форумчанин Подтвердите свой е-майл
 
Аватар для GAGARIN-NEW
 
Регистрация: 05.10.2007
Сообщений: 387
По умолчанию

Не могли бы Вы подправить комментарии ??? Чтоб хоть немного было понятно что где делается ...

И ещё ... Можно ли отследить добавление каждого стринга в
Код:
s := TStringList.Create;   
    FillNetLevel(@Res, S);   
    RichEdit1.Lines.Assign(s);   
    S.Free
и выполнять мои действия в цикле ... тоесть

Найдена 1 раб группа
//Мои действия
Найдена 2 раб группа
//мои действия
... итд ...
Это мне нужно для того чтобы добавлять не целый набор рабочих групп как TStringList а добавлять по одной в TreeView и добавлять дочерни узлы к этой раб группе - тобиш компьютеры каторые в ней находятся ...

Надеюсь ясно выразился
ЗЫ Если я н ошибаюсь то что мне нужно находится в 69 строчке?
---

Последний раз редактировалось GAGARIN-NEW; 12.02.2008 в 19:28.
GAGARIN-NEW вне форума Ответить с цитированием
Старый 30.07.2011, 12:02   #4
0zzi_comp
Новичок
Джуниор
 
Регистрация: 30.07.2011
Сообщений: 1
Хорошо Спасибо

ОГРОМНОЕ спасибо. Очень помогло. Так держать.
0zzi_comp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поскажите как определить ip адреса компьютеров в сети и их имена?ов в SeЯgey Работа с сетью в Delphi 11 21.10.2010 20:47
Где скачать Пожар в долине. История создания персональных компьютеров(Книга) LuMax Свободное общение 0 05.04.2008 23:07
Связь 2-х и более компьютеров в сети DOLBY Работа с сетью в Delphi 3 27.12.2007 09:39
Профилирование лопастей центробежных рабочих колёс Styu Общие вопросы Delphi 3 24.07.2007 13:56