поиск всех компьютеров в сети

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Eugie, Romeo, Hawk

Ответить
vasya-serega
Сообщения: 1
Зарегистрирован: 13 фев 2006, 14:50
Откуда: Вознесенск, Украина
Контактная информация:

13 фев 2006, 15:09

помоги плиз слепому :)
подскажите плиз класс, с помощью которого можно было найти все компьютеры. Желательно C#, то и API функции подойдут тоже. А то что-то у меня проблемы в общении с MSDN :(
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

23 фев 2006, 12:45

WNetOpenEnum, WNetEnumResource. Можно, конечно это всё и через Shell сделать. Типа берём IShellFolder десктопа и топаем к сетевому окружению используя метод BindToObject, а потом внутри сетевого окружения делаем EnumObjects. Но зачем использовать кувалду для того, чтобы забить пару гвоздей в подмётки сапогов? :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
_byLY
Сообщения: 7
Зарегистрирован: 09 июн 2006, 12:00

09 июн 2006, 15:38

#ifndef UNICODE
#define UNICODE
#endif
#include <stdio.h>
#include <assert.h>
#include <windows.h>
#include <Winnetwk.h>

int wmain(int argc, wchar_t *argv[])
{
//WNetOpenEnum
DWORD nStatus,nStatus0,i;
DWORD mydwScope=RESOURCE_CONNECTED;
DWORD mydwType=RESOURCETYPE_ANY;
DWORD mydwUsage =0,mylpBuffersize=16384,mylpcCount =-1;
LPNETRESOURCE mylpNetResource=NULL,mylpBuffer=NULL,mylpBuffer0=NULL;
HANDLE mylphEnum;
//LPVOID mylpBuffer=NULL;

if (argc > 2)
{ fwprintf(stderr, L"Usage: %s [\\\\ServerName]\n", argv[0]);
exit(1); }
printf("\nInformation: \n");
nStatus=WNetOpenEnum(
RESOURCE_CONTEXT,
//RESOURCE_CONNECTED,
RESOURCETYPE_ANY,
0,
mylpNetResource,
&mylphEnum);
if ((nStatus==NO_ERROR)||(nStatus==ERROR_MORE_DATA))
{
mylpBuffer=(LPNETRESOURCE)GlobalAlloc(GPTR,mylpBuffersize);
if (mylpBuffersize!=NULL)
{
ZeroMemory(mylpBuffer,mylpBuffersize);
nStatus0=WNetEnumResource(mylphEnum,
&mylpcCount,
(LPVOID)mylpBuffer,
&mylpBuffersize);


mylpBuffer0=mylpBuffer;
if ((nStatus0==NO_ERROR)||(nStatus0==ERROR_NO_MORE_ITEMS))

for(i = 0; i < mylpcCount; i++)
{
wprintf(//L"\lpLocalName - %s\n"
L"\lpRemoteName - %s\n"
//L"\lpProvider - %s\n"
//L"\dwDisplayType - %s\n"
//L"\lpComment - %s\n"
//L"\dwScope - %s\n"
//L"\dwType - %s\n"
//L"\dwUsage - %s\n"
,
//mylpBuffer0->lpLocalName,
mylpBuffer0->lpRemoteName
//mylpBuffer0->lpProvider
//mylpBuffer0->dwDisplayType,
//mylpBuffer0->lpComment,
//mylpBuffer0->dwScope
//mylpBuffer0->dwType
//mylpBuffer0->dwUsage
);
mylpBuffer0++;

}


;
}}
return 0;
}
Ответить