PDA

Ver la Versión Completa : nombre de todas las pc de la red?


pborges36
26-06-2006, 21:46:41
Holas, Necesito de su ayuda. Estoy trabajando en D6 y para una ventana de configuracion necesito obtener el nombre de todas las pc de la red. La idea es que el usuario seleccione en un combo una de todas las pcs de la red. Sera posible? Gracias!!

[Gunman]
26-06-2006, 23:01:09
Busca en:
Trucomanía (http://www.q3.nu/trucomania)
Foros de ClubDelphi (http://www.clubdelphi.com/foros/search.php)Pero como soy buen chicho... (y no tengo abuela):

type
PNetResourceArray = ^TNetResourceArray;
TNetResourceArray = array[0..100] of TNetResource;

function CreateNetResourceList(ResourceType: DWord;
NetResource: PNetResource;
out Entries: DWord;
out List: PNetResourceArray): Boolean;
var
EnumHandle: THandle;
BufSize: DWord;
Res: DWord;
begin
Result := False;
List := Nil;
Entries := 0;
if WNetOpenEnum(RESOURCE_GLOBALNET,
ResourceType,
0,
NetResource,
EnumHandle) = NO_ERROR then begin
try
BufSize := $4000; // 16 kByte
GetMem(List, BufSize);
try
repeat
Entries := DWord(-1);
FillChar(List^, BufSize, 0);
Res := WNetEnumResource(EnumHandle, Entries, List, BufSize);
if Res = ERROR_MORE_DATA then
begin
ReAllocMem(List, BufSize);
end;
until Res <> ERROR_MORE_DATA;

Result := Res = NO_ERROR;
if not Result then
begin
FreeMem(List);
List := Nil;
Entries := 0;
end;
except
FreeMem(List);
raise;
end;
finally
WNetCloseEnum(EnumHandle);
end;
end;
end;

procedure ScanNetworkResources(ResourceType, DisplayType: DWord; List: TStrings);

procedure ScanLevel(NetResource: PNetResource);
var
Entries: DWord;
NetResourceList: PNetResourceArray;
i: Integer;
begin
if CreateNetResourceList(ResourceType, NetResource, Entries, NetResourceList) then try
for i := 0 to Integer(Entries) - 1 do
begin
if (DisplayType = RESOURCEDISPLAYTYPE_GENERIC) or
(NetResourceList[i].dwDisplayType = DisplayType) then begin
List.AddObject(NetResourceList[i].lpRemoteName,
Pointer(NetResourceList[i].dwDisplayType));
end;
if (NetResourceList[i].dwUsage and RESOURCEUSAGE_CONTAINER) <> 0 then
ScanLevel(@NetResourceList[i]);
end;
finally
FreeMem(NetResourceList);
end;
end;

begin
ScanLevel(Nil);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ScanNetworkResources(RESOURCETYPE_DISK, RESOURCEDISPLAYTYPE_SERVER, ListBox1.Items);
end;

jandro
21-02-2010, 13:18:29
Hola a todos!

Alguien ha utilizado esta fundion?? Yo la he usado y funciona bien el problema es que mientras que esta buscando la aplicacion se queda pillada y no reacciona hasta que termina :(

He probado a ponerle Application.ProcessMessages; por algunos sitios pero nada no consigo solucionarlo.

Alguien sabe como hacerlo??

Muchas gracias y saludos.

DriverOp
21-02-2010, 18:43:32
Ponla dentro de un thread.