Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.006 c
1-57785
Sergey_R
2002-04-05 18:36
2002.04.18
Нетрадиционный вопрос!


4-57928
Alx2
2002-02-13 11:58
2002.04.18
Hook: что неправильно?


1-57779
Musket
2002-04-05 21:16
2002.04.18
Что за странная ошибка?


1-57729
Evgenyk
2002-04-08 15:49
2002.04.18
Как убрать Rectangle в ComboBox?


1-57736
pusrg
2002-04-03 20:33
2002.04.18
Получение значения по указателю.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский