HWND htxt; // EDIT SUR LEQUEL JE METS RESULTAT
HANDLE hthrd = 0;
DWORD thrdID;
char szERROR[] = "ERREUR";
void __stdcall SearchIP(char *Tmp)
{
HOSTENT* ip_resolue;
SOCKADDR_IN valip;
int c;
char IPAdress[20];
ip_resolue = gethostbyname(Tmp);
if(ip_resolue) {
// RECUPERATION DU DERNIER ENTIER 'c' TEL QUE ip_resolue->h_addr_list[c] != NULL
for(c = 0; ip_resolue->h_addr_list[c+1]; c++) {}
memcpy(&valip.sin_addr.s_addr, ip_resolue->h_addr_list[c], ip_resolue->h_length);
IPAdress[0] = '\t';
strcpy(IPAdress + 1, inet_ntoa(valip.sin_addr));
SendMessage(htxt, EM_REPLACESEL, 0, (long) IPAdress);
}
}
void PcEnumReso(NETRESOURCE *nr)
{
HANDLE hEnum;
DWORD Result;
DWORD count = -1;
DWORD BufferSize = 0;
DWORD ReturnVal = 0;
NETRESOURCE *NetRes;
Result = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_CONTAINER, nr, &hEnum);
if(Result) return;
NetRes = (LPNETRESOURCE) VirtualAlloc(0, 1024, MEMDISPO, PAGE_READWRITE);
while(1) {
ReturnVal = WNetEnumResource(hEnum, &count, NetRes, &BufferSize);
if(ReturnVal == ERROR_MORE_DATA) { // On recalcul la taille du Buffer
count = -1;
VirtualFree(NetRes, 0, MEM_RELEASE);
NetRes = (LPNETRESOURCE) VirtualAlloc(0, BufferSize, MEMDISPO, PAGE_READWRITE);
ReturnVal = WNetEnumResource(hEnum, &count, NetRes, &BufferSize);
}
if(ReturnVal) break;
while(count--) {
if(*((WORD*)NetRes[count].lpRemoteName) == 0x5C5C) { // 2 premiers char == '\\'
SendMessage(htxt, EM_REPLACESEL, 0, (long) (NetRes[count].lpRemoteName + 2));
SearchIP(NetRes[count].lpRemoteName + 2);
SendMessage(htxt, EM_REPLACESEL, 0, (long) "\r\n");
}
// RECURRENCE POUR TROUVER L'ENSEMBLE DES PCs
if(NetRes[count].dwUsage & RESOURCEUSAGE_CONTAINER) PcEnumReso(&NetRes[count]);
}
if(ReturnVal == ERROR_NO_MORE_ITEMS) {
VirtualFree(NetRes, 0, MEM_RELEASE);
WNetCloseEnum(hEnum);
}
}
VirtualFree(NetRes, 0, MEM_RELEASE);
WNetCloseEnum(hEnum);
}
Appeler ainsi:
PcEnumReso(0);
ciao...
[ Lien ]
BruNews, MVP VC++