PDA

Ver la Versión Completa : Como Mostrar Todos los Grupos y PC's de Trabajo en una RED????


AGAG4
09-01-2006, 22:33:47
Como puedo ver una lista de todas las PC's Conectadas en una RED LAN asi como en que Grupo de Trabajo Pertenece y SU IP Local de cada una de ellas en Delphi????

Agradezco cualquier información.

OSKR
10-01-2006, 17:57:32
No se si te refieres al codigo por el foro en donde está, pero si es asi puedes mirar http://www.clubdelphi.com/foros/showthread.php?t=26737
Si necesitas los recursos, impresoras, controladores ...etc puedes echarle un vistazo a esto, tarda un poco y aun no se porqé, además enumera hasta la máquina en donde uno está parado pero hoy en dia creo saber el porqé, lo q puedes hacer si este es tu caso es buscar en la ayuda del MSDN un ejemplo de la función WNetOpenEnum.

#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "winnetwk.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
NETRESOURCE NR;
/*
const int RESOURCE_CONNECTED= 0x1;
const int RESOURCE_GLOBALNET = 0x2;
const int RESOURCE_REMEMBERED = 0x3;
const int RESOURCETYPE_ANY = 0x0;
const int RESOURCETYPE_DISK = 0x1;
const int RESOURCETYPE_PRINT = 0x2;
const int RESOURCETYPE_UNKNOWN = 0xFFFF;
const int RESOURCEUSAGE_CONNECTABLE = 0x1;
const int RESOURCEUSAGE_CONTAINER = 0x2;
const int RESOURCEUSAGE_RESERVED = 0x80000000;
const int RESOURCEDISPLAYTYPE_DOMAIN = 0x1;
const int RESOURCEDISPLAYTYPE_SERVER = 0x2;
const int RESOURCEDISPLAYTYPE_SHARE = 0x3;
*/
TStringList *SL;
char _NetResourceTypes[13][13]={"Generic","Domain","Server","share","File","Group","Network","Root","ShareAdmin","Directory","Tree","NDSContainer","Printer"};
void Enumera(NETRESOURCE *NR,int tab)
{ LPVOID Datos=0; //Puntero al buffer
DWORD lDatos=16*1024; //tamaño del buffer
DWORD nDatos=0xFFFFFFFF;
HANDLE lEnum;
AnsiString Cadena,espacio="";
DWORD WNOE=WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, NR, &lEnum);
DWORD WNER=0;
if( WNOE==0)
{ Datos=new char[lDatos];
WNER=WNetEnumResource(lEnum,&nDatos,Datos,&lDatos);
if( WNER==0)
{ NETRESOURCE *NRV= (NETRESOURCE *)Datos;
for(int i=0;i<nDatos;i++)
{ Cadena="";
for(int j=0;j<tab;j++) espacio+=" ";
try
{ if(NRV[i].lpRemoteName)
if(strlen(NRV[i].lpRemoteName))
Cadena=AnsiString(NRV[i].lpRemoteName);
else
{ delete [] Datos;
WNetCloseEnum(lEnum);
return;
}
}
catch(Exception &ex)
{ delete [] Datos;
WNetCloseEnum(lEnum);
return;
}
Cadena=espacio+AnsiString(_NetResourceTypes[(NRV[i].dwDisplayType < 12 ? NRV[i].dwDisplayType : 12)])+": "+Cadena;
SL->Add(Cadena);
//if((NRV[i].dwUsage & RESOURCEUSAGE_CONTAINER)!=0)
//NRV[i].dwUsage=0;
Enumera(&NRV[i],tab+1);
}
//delete [] NRV;
}
if(Datos)
delete [] Datos;
WNetCloseEnum(lEnum);
}
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{ SL= new TStringList();
Enumera(0,0);
for(int i=0;i<SL->Count;i++)
Memo1->Lines->Add(SL->Strings[i]);
delete SL;

}