Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.18;
Скачать: CL | DM;

Вниз

Определениие списка компьютеров в сети.   Найти похожие ветки 

 
ctapik-net ©   (2002-02-14 15:58) [0]

Использую следующую процедуру для определения компов в сети


procedure TGetComputers.EnumSubResources(Items: TTreeNodes; Node: TTreeNode;lpNetResource: PNetResource);
const
MAX_RES = 16;
type
PResources = ^TResources;
TResources = array[0..MAX_RES-1] of TNetResource;
var
hEnum: THandle;
Count: Cardinal;
Res: Integer;
Resources: PResources;
BufferSize: Cardinal;
I: Integer;
NewNode: TTreeNode;
NewNodeName: String;
begin
// Открываем доступ к перечню сетевых ресурсов
Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, lpNetResource, hEnum);
if NO_ERROR <> Res then
Exit;
// Массив, в который читаются сетевые ресурсы
BufferSize := SizeOf(TResources);
GetMem(Resources, BufferSize);
while Not Terminated do
begin
// Загружаем перечень ресурсов в массив
// Если возникла ошибка, значит, ресурсов больше нет --- покидаем цикл
Count := MAX_RES;
Res := WNetEnumResource(hEnum, Count, Resources, BufferSize);
if (Res <> NO_ERROR) and (Res <> ERROR_MORE_DATA) then
Break;
// В противном случае копируем сетевые ресурсы в дерево
for I := 0 to Count - 1 do
begin
// Добавляем дочерний узел
If Terminated Then Break ;
if Assigned(Resources^[I].lpRemoteName) then
NewNodeName := String(Resources^[I].lpRemoteName)
else
NewNodeName := String(Resources^[I].lpComment);
NewNode := Items.AddChild(Node, NewNodeName);
// Вызываем процедуру рекурсивно для заполнения этого узла,
// если узел содержит подузлы
if (Resources^[I].dwUsage and RESOURCEUSAGE_CONTAINER) <> 0 then
EnumSubResources(Items, NewNode, @(Resources^[I]));
end;
end;
FreeMem(Resources);
// Закрываем доступ
WNetCloseEnum(hEnum);
end ;


Она почему-то находит не все компы? Помогите понять где собака зарыта! Заранее благодарен.


 
AlexRush ©   (2002-02-14 18:45) [1]

Я не зняю, как там с a-la VCL, я для энумерации компов в сети пользую следующую APIшку: (NT only)

NET_API_STATUS NetServerEnum(
LPTSTR servername,
DWORD level,
LPBYTE *bufptr,
DWORD prefmaxlen,
LPDWORD entriesread,
LPDWORD totalentries,
DWORD servertype,
LPTSTR domain,
LPDWORD resume_handle
);
Она универсальна и позволяет находить в сети много чего "интересного" :)

Функция не описана в VCL, придется описать самому. Наибольшая неприятность при использовании - работа с UNICODE строками.


 
ctapik-net ©   (2002-02-15 18:07) [2]

2 AlexRush не по описанию она позволяет найти только в иекущем домене а мне нужен список компов всей сети включая домены и рабочие группы.



Страницы: 1 вся ветка

Текущий архив: 2002.04.18;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.015 c
14-57850
drpass
2002-03-08 16:37
2002.04.18
Вся наша жизнь - дерьмо


1-57765
VJar
2002-04-05 18:50
2002.04.18
Исходник копирования


3-57656
fishka
2002-03-28 14:24
2002.04.18
InterBase. Обновить таблицу значениями из другой таблицы другой


1-57823
Ученики СШ51
2002-04-06 09:41
2002.04.18
Убрать из...


14-57845
Tpv
2002-03-06 23:12
2002.04.18
Зависание программы.