Newsgroup: it.comp.lang.delphi
Titolo: Lista di computer

Ciao,
devo fare in modo che cliccando su un pulsante mi si apra una finestra con
una lista di tutti i computer collegati alla rete (LAN)
come risorse di rete per capirci....
ma non ho la piu' pallida idea da dove cominciare....
ci sono componenti in grado di farlo? o qualche funzione che mi riporti la
suddetta lista?
ciao e grazie
Simone

 come risorse di rete per capirci....
Ciao!
A suo tempo io risolsi con
WNetOpenEnum
e con WNetEnumResources ...
sinceramente le trovai abbastanza scomode da usare ... soprattutto perchè
sono lentissime
e bloccano l'esecuzione del codice per circa 2secondi (a parte quando si
cacha i nomi) !!!
Se vuoi un esempio di come si usano, riscrivi  (devo sistemarle... sono
sparse per un mio prog.)
Ciao!! Davide DG.

 ha scritto nel messaggio
news:Fi_H4.101675$pn3.1...@news.infostrada.it...


> te ne sarei grato se potessi fornirmi un esempio....
Function EnumerateNetwork (Var PCArray : Array of TComputerName) : Cardinal;
Type TNetArray  = Array[0..0] of TNetResource;  // definita da qualche parte
in windows.pas
        PTNetArray = ^TNetArray;
Var
 PNetArray   : PTNetArray;
 items,size  : cardinal;
 henum       : THandle;
 a               : Integer;
 s               : string;
Begin
Try
 a     := Low (PCArray);
 items := High(PCArray);
 size  := items * 256; //  sizeof ( TNetResorce ) ~ 256 ... per allineamento
memoria.
 GetMem (PNetArray, size); // Mi pare di ricordare che a volte poteva dare
problemi ...
                        //  forse č meglio usare la GlobalAlloc
 PNetArray^[a].lpRemoteName := PChar(WorkGroup);
   // cosě gli dici da che gruppo partire : il tuo gruppo di lavoro
 WNetOpenEnum (RESOURCE_GLOBALNET,
                             RESOURCETYPE_ANY,
                             RESOURCEUSAGE_CONTAINER,
                             @PNetArray^[a],
                              henum);
//  Apre un handle di ricerca per la rete con le impostazioni
//  definite in @PNetArray^[a]  (il primo elemento di PNetArray)
 WNetEnumResource (henum, items, PNetArray, size);
  // Visto che abbiamo specificato di ricercare nel nostro Workgroup
// per risorse contenitrici (computer), siamo sicuri che possiamo fermarci
qui:
  WNetCloseEnum (henum);
I risultati sono del tipo "\\Computer1", ecc.
Le procedure che vengono ora servono solo per "normalizzare" il nome :
{ "\\COMPUTER" --> "Computer" }
                                  for a := 0 to items-1 do begin
                                   s := pnetarray^[a].lpremotename;
                                   delete(s,1,2);
                                   s := LCase(s);
                                   if length (s) > 0 then s[1] :=
UCase(s)[1];  // IMPORTANTE *
                                   PCArray[a] := s;
                                end;
// * : In un uso intensivo di questa funzione (circa ogni 4 secondi per
mezz'ora), ho notato
// che, a volte, specialmente appena dopo il boot, Windows ritorna valori
vuoti, pur dicendo
// che items > 0, quindi in teoria avrebbe dovuto ritornare qualcosa.
 Result := Items;
 FreeMem (PNetArray);
Except
 Result := 0; end;
End;
Function WorkGroup : String;
Var R : TRegistry;  // uses registry
Begin
 R := tregistry.create;
 R.RootKey := HKEY_LOCAL_MACHINE;
 R.OpenKeyReadOnly ('System\CurrentControlSet\Services\VxD\VNETSUP');
 Result := R.ReadString ('Workgroup');
 R.Free;
End;
Function  GetLocalName : String;
var p : pchar;
   np : cardinal;
Begin
 np := MAX_COMPUTERNAME_LENGTH+1;
 getmem(p,np);
 getcomputername (p,np);
 result := LCase(p);        // "COMPUTERNAME" --> "computername"
 freemem(p);
 result[1] := UCase(result)[1]; // "computername" --> "Computername"
End;
****************************************************************************
**
****************************************************************************
**
Ok ... spero che questo esempio ti sia utile... perň l'ho pescato da un mio
vecchio programma...
quindi non ricordo se funziona bene o meno... (?) ,,, sappimi dire !!!
CIAO!!!! Davide DG.