Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сеть (не 220v) :)), получение списка 
:(
    Опции темы
oleg1973
Дата 21.8.2003, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: нет
Всего: 34



искал везде но не нашел вот решил и народа спросить
кароче суть :
как правильно работать с WNetOpenEnum,WNetEnumResource
делаю
invoke WNetOpenEnumA,RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,0,lphEnum
получаю хедер скажем так
потом
invoke WNetEnumResourceA,[lphEnum],count=0xffffffffh,buffer,bufsize=16384
получаю списочек root
нахожу в нем контейнер RESOURCEUSAGE_CONTAINER
и после этого тормоза
тоесть не пойму нада ли закрыват хедер и делать снова WNetOpenEnum но уже с заполненой struc NETRESOURCE
или просто делать WNetEnumResource опять же с заполненой struc NETRESOURCE
чтоб получить список компьютеров в сети
в инете чтото ниче конкретного не нашел
такчто ткните носом плиз smile.gif



--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 21.8.2003, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: нет
Всего: 112



WNetOpenEnum
WNetEnumResource
WNetCloseEnum

потом берешь что-нибудь из результатов енума и
WNetOpenEnum (c одним из результатов предыдущего енума)
WNetEnumResource
WNetCloseEnum



--------------------
С уважением, г-н Посол.
PM   Вверх
p0s0l
Дата 21.8.2003, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: нет
Всего: 112



а лучше сделать рекурсивную процедурину, которая обшаривала бы всю сеть:

Код
procedure NetEnumerate(res : NETRESOURCE);
var
  buf : указатель на массив из NETRESOURCE;
begin
  if WNetOpenEnum (RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, res, EnumHandle) <> NO_ERROR then exit;
  Entries := $FFFFFFFF;
  bufSize := 16384;
  GetMem (buf, bufSize);
  WNetEnumResource(EnumHandle, Entries, buf, bufSize);
  WNetCloseEnum(EnumHandle);
  if Entries > 0 then
    for i := 0 to Entries-1 do
    begin
      if (buf[i].dwUsage and RESOURCEUSAGE_CONTAINER) <> 0 then NetEnumerate(buf[i]);
      if (buf[i] - компьютер) then добавляешь в список компов
    end;
  FreeMem (buf);
end;




--------------------
С уважением, г-н Посол.
PM   Вверх
oleg1973
Дата 21.8.2003, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: нет
Всего: 34



if (buf[i].dwUsage and RESOURCEUSAGE_CONTAINER) <> 0 then NetEnumerate(buf[i]);


NetEnumerate это из какой dll?


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 21.8.2003, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: нет
Всего: 112



Цитата
NetEnumerate это из какой dll?

smile.gif
Цитата
procedure NetEnumerate(res : NETRESOURCE);

это твоя рекурсивная процедура




--------------------
С уважением, г-н Посол.
PM   Вверх
oleg1973
Дата 22.8.2003, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: нет
Всего: 34



не работает smile.gif
делаю
WNetOpenEnumA(2,0,0,0,&lphEnum);
WNetEnumResourceA(lphEnum,&lpcCount,buffer,&bsize);
получаю в буфере структуру
вопрос ! надо ли делать WNetCloseEnum(&lphEnum) ?
идем дальше
проверяю то что в буфере
нахожу dwUsage=RESOURCEUSAGE_CONTAINER
а теперь вопрос знатокам!
дальше как?smile.gif
я так понимаю что найденый dwUsage=RESOURCEUSAGE_CONTAINER
нада передать в WNetEnumResourceA(lphEnum,&lpcCount,buffer,&bsize);
как?smile.gif


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 22.8.2003, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: нет
Всего: 112



Насчет моего примера: я тебе привел пример на глаз, не проверяя, и не знаю, в чем у тебя была проблема, но вот этот пример работает (находит все компы в сети):

Код
procedure NetEnumerate(NetRes : PNetResource);
type
 PResArray = ^TResArray;
 TResArray = array [0..$FFFF] of TNetResource;

var
 buf : PResArray;
 i, Entries, bufSize : cardinal;
 res : TNetResource;
 EnumHandle : THandle;

begin
 if NetRes <> nil then res := NetRes^
 else
 with res do
 begin
   FillChar(res, SizeOf(res), 0);
   dwScope := RESOURCE_GLOBALNET;
   dwType := RESOURCETYPE_ANY;
   dwDisplayType := RESOURCEDISPLAYTYPE_GENERIC;
   dwUsage := RESOURCEUSAGE_ALL;
   lpRemoteName := nil;
 end;

 if WNetOpenEnum (RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, @res, EnumHandle) <> NO_ERROR then exit;

 Entries := $FFFFFFFF;
 bufSize := 16384;
 GetMem (buf, bufSize);
 WNetEnumResource(EnumHandle, Entries, buf, bufSize);
 WNetCloseEnum(EnumHandle);
 if Entries > 0 then
   for i := 0 to Entries-1 do
   begin
     if (buf[i].dwUsage and RESOURCEUSAGE_CONTAINER) <> 0 then NetEnumerate(@buf^[i]);
     if (buf[i].dwDisplayType = RESOURCEDISPLAYTYPE_SERVER) then Form1.ListBox1.Items.Add(buf[i].lpRemoteName);
   end;
 FreeMem (buf);
end;


Как видишь отличий от предыдущего практически нет, только добавлен код для начального енума.
Вызывается это дело так: NetEnumerate (nil);
Извини, что на Delphi, но думаю ничего сложного тут нет...
Вместо Form1.ListBox1.Items.Add(buf[i].lpRemoteName) подставь свой код - здесь в buf[i].lpRemoteName содержиться имя компа.

Можешь также юзать совместно с NetServerGetInfo для получения еще кое-какой дополнительной инфы...

Это сообщение отредактировал(а) p0s0l - 22.8.2003, 18:16


--------------------
С уважением, г-н Посол.
PM   Вверх
SCHEPA
Дата 22.8.2003, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 7.6.2003
Где: Н.Н.

Репутация: нет
Всего: нет



Цитата
WNetOpenEnumA(2,0,0,0,&lphEnum);
WNetEnumResourceA(lphEnum,&lpcCount,buffer,&bsize);
получаю в буфере структуру
вопрос ! надо ли делать WNetCloseEnum(&lphEnum) ?

Надо.

Цитата
идем дальше
проверяю то что в буфере
нахожу dwUsage=RESOURCEUSAGE_CONTAINER
а теперь вопрос знатокам!
дальше как?smile.gif
я так понимаю что найденый dwUsage=RESOURCEUSAGE_CONTAINER
нада передать в WNetEnumResourceA(lphEnum,&lpcCount,buffer,&bsize);
как?smile.gif

Идем...
WNetEnumResourceA(lphEnum,&lpcCount,buffer,&bsize) - возвращает тебе в buffer массив структур
NETRESOURCE. Выбираешь из них нужную и снова начинается
WNetOpenEnum - получаешь хендл.
WNetEnumRecource - получаешь сетевые ресурсы.
WNetCloseEnum - финиш.
--------------------
Так что в лучших книгах всегда нет имен...
PM MAIL   Вверх
SCHEPA
Дата 22.8.2003, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 7.6.2003
Где: Н.Н.

Репутация: нет
Всего: нет



Вообще у меня есть прога на Билдере, так сказать первый опыт в этом деле. Там все работает. Если надо могу скинуть.
--------------------
Так что в лучших книгах всегда нет имен...
PM MAIL   Вверх
oleg1973
Дата 22.8.2003, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: нет
Всего: 34



все народ smile.gif
сделал всем биг сенкс за советы
мне в принципе сам алгоритм тока нужен был
на асме пишется все


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0488 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.