Учись программированию на C++ Builder бесплатно!
  • Главная
  • FAQ
  • Как получить список компьютеров подключенных к сети?

Для начала опишем булевую переменную:

BOOL EnumHandler(HWND hWnd, DWORD dwLevel, LPNETRESOURCE lpNet)
{
BOOL ret=TRUE;
DWORD dwStatus, dwSize, dwEntries, i, j;
LPSTR lpStr=NULL;
LPNETRESOURCE lpNewNet=NULL;
HANDLE hEnum=NULL;

dwStatus = WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, lpNet, &hEnum );
if(dwStatus != NO_ERROR)
{
ret=FALSE; goto mend;
}
dwEntries = 1000;
dwSize = sizeof(NETRESOURCE) * dwEntries;
lpNewNet=(LPNETRESOURCE)new char[dwSize];
if(!lpNewNet)
{
ret=FALSE;
goto mend;
}
dwStatus = WNetEnumResource(hEnum, &dwEntries, (LPVOID)lpNewNet, &dwSize);

if(dwStatus != NO_ERROR)
{
ret=FALSE; goto mend;
}
WNetCloseEnum(hEnum);
hEnum=NULL;

lpStr=new char[512];
if(!lpStr)
{
ret=FALSE;
goto mend;
}
for(i = 0; i < dwEntries; i++)
{
if(lpNewNet[i].dwDisplayType==RESOURCEDISPLAYTYPE_NETWORK)
{
strcpy(lpStr, lpNewNet[i].lpProvider);
}
if(lpNewNet[i ].lpRemoteName )
{
if(lpNewNet[i].dwDisplayType == RESOURCEDISPLAYTYPE_DOMAIN)
strcpy(lpStr, "Domain...");
if(lpNewNet[i].dwDisplayType == RESOURCEDISPLAYTYPE_GENERIC)
strcpy( lpStr, "Generic..");
if(lpNewNet[i].dwDisplayType == RESOURCEDISPLAYTYPE_SERVER)
strcpy( lpStr, "Server...");
if(lpNewNet[i].dwDisplayType == RESOURCEDISPLAYTYPE_SHARE)
strcpy( lpStr, "Share....");
for(j = 0; j < dwLevel; j++)
strcat(lpStr, "......");
strcat(lpStr, lpNewNet[i].lpRemoteName);
//Добавим IP адрес к концу строки
//if(lpNewNet[i].dwDisplayType == RESOURCEDISPLAYTYPE_SERVER)
//if(!GetIP(&lpNewNet[i].lpRemoteName[2],lpStr))continue;
}
SendMessage(hWnd, LB_ADDSTRING, 0,(LPARAM)lpStr);
UpdateWindow(hWnd);
// Уровень детализации вы сможете установить здесь
if(dwLevel < 2) //0=Сеть,1=Domain,2=Host,3=Resource
EnumHandler(hWnd, dwLevel + 1, lpNewNet + i);
}
mend:
if(hEnum)WNetCloseEnum(hEnum);
if(lpStr)delete lpStr;
if(lpNewNet)delete lpNewNet;
return ret;
}

Теперь с помощью кнопки Button выведем список подключенных компьютеров:

HCURSOR hOldCursor;
ListBox1->Clear();
SendMessage(Form1->ListBox1->Handle, LB_RESETCONTENT, 0, 0);
UpdateWindow(Form1->ListBox1->Handle);
hOldCursor = ::SetCursor(LoadCursor(NULL, IDC_WAIT));
EnumHandler(Form1->ListBox1->Handle, 0, NULL);
::SetCursor(hOldCursor);

IP адреса компьютеров выводятся в компоненте ListBox1.


Поиск по сайту