News & Events
Listando máquinas da rede
A pedido de alguns colegas decidi colocar no ar um pequeno programinha que desenvolvi pra listar as estações de trabalho da rede. O programa traz o nome e o IP da estação em um componente TListView. Veja abaixo:
1. Crie uma tela como no exemplo acima. Inclua um TListView e configure como abaixo:
a. Na propriedade ViewStyle coloque como fsReport.
b. Clique duas vezes no TListView e adicione duas colunas. Uma com o nome Estações e outra como IP.
c. Aumente senecessário as colunas pra melhorar a visualização.
2. Inclua um botão na tela e digite o código abaixo:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
I: shortint;
Nome: string;
IP: string;
begin
try
ListaUsuarios.Clear;
lstEstacoes.Items.Clear;
pnlAguarde.Visible := True;
aniLocalizaEstadoes.Active := True;
Screen.Cursor := crHourGlass;
Plataforma := VersaoWindows;
ListaAmbienteRede;
lstEstacoes.Items.Clear;
for I := 0 to ListaUsuarios.Count - 1 do
begin
Nome := ListaUsuarios[I];
try
IP := GetIP(ListaUsuarios[I]);
except
IP := ' ';
end;
IncluiEstacao(Nome, IP);
Update;
end;
finally
pnlAguarde.Visible := False;
aniLocalizaEstadoes.Active := False;
Screen.Cursor := crDefault;
end;
end;
3. O código do botão Listar Estações faz chama a ouras funções. Por isso inclua também as funções abaixo:
procedure TForm1.IncluiEstacao(AEstacao, AIP: string);
var
Item: TListItem;
begin
with lstEstacoes do
begin
Item := Items.Add;
Item.Caption := AEstacao;
Item.SubItems.Add(AIP);
end;
end;
procedure TForm1.ListaAmbienteRede;
procedure Enumera(Res: PnetResource);
var
Hnd: THandle;
NumeroEntradas: DWord;
Buffer: array[1..255] of TNetResource;
LongBuffer: DWord;
N: Integer;
S: string;
begin
LongBuffer := SizeOf(Buffer);
if WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, Res, Hnd) = No_ERROR then
begin
NumeroEntradas := 255;
WNetEnumResource(Hnd, NumeroEntradas, @Buffer[1], LongBuffer);
for N := 1 to NumeroEntradas do
begin
S := string(Buffer[N].lpRemoteName);
if Plataforma = 'xp' then
if (Buffer[1].dwType = 0) and (Copy(S, 1, 2) = '\\') then
ListaUsuarios.Add(Copy(S, 3, Length(S) - 2));
if Plataforma = '9x' then
if (Buffer[1].dwType = 3) and (Copy(S, 1, 2) = '\\') then
ListaUsuarios.Add(Copy(S, 3, Length(S) - 2));
if (Buffer[N].dwUsage and RESOURCEUSAGE_CONTAINER) = RESOURCEUSAGE_CONTAINER then
Enumera(@Buffer[N]);
Update;
end;
end;
end;
begin
Enumera(nil);
end;
function TForm1.GetIP(AEstacao: string): string;
var
WSAData: TWSAData;
HostEnt: PHostEnt;
begin
WSAStartup(2, WSAData);
HostEnt := GetHostByName(PChar(AEstacao));
with HostEnt^ do
Result :=
Format('%d.%d.%d.%d', [Byte(h_addr^[0]), Byte(h_addr^[1]), Byte(h_addr^[2]), Byte(h_addr^[3])]);
WSACleanup;
end;
function TForm1.VersaoWindows: string;
var
PlatformId, CSDVersion: string;
begin
CSDVersion := '';
case Win32Platform of
VER_PLATFORM_WIN32_WINDOWS:
begin
if Win32MajorVersion = 4 then
case Win32MinorVersion of
0: PlatformId := '9x';
10: PlatformId := '9x';
90: PlatformId := 'ME';
end
else
PlatformId := '9x';
Result := '9x';
end;
VER_PLATFORM_WIN32_NT:
begin
if Length(Win32CSDVersion) > 0 then
CSDVersion := Win32CSDVersion;
if Win32MajorVersion <= 4 then
PlatformId := 'NT'
else if Win32MajorVersion = 5 then
case Win32MinorVersion of
0: PlatformId := '2000';
1: PlatformId := 'XP';
2: PlatformId := '2003';
else
PlatformId := '?';
end
else
PlatformId := '?';
Result := 'xp';
end;
end;
end;
Aqui estão listadas todas as funções e procedimentos necessários. Na seção Downloads você pode efetuar o download do código fonte de exemplo.
Até mais.
Siga @tdevrocks no Twitter agora e fique por dentro de todas as atualizações do blog.
Siga também o autor @asrsantos
só pra completar na sessão uses tem que estar assim
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Buttons, ComCtrls, WinSock, Jpeg, IniFiles, Menus,
FileCtrl;
De onde posso baixa o fonte de exemplo?
airamcosta@gmail.com
Boa Tarde,
Nao consegui baixar seu exemplo e tambem nao consegui faze-lo funcionar. Se puder me encmainhar, eu agradeço
um abraço
michel@gavoha.com.br
Nao funciona amigo da um monte de erros
Boa tarde!
Por favor, você poderia enviar o arquivo para o meu e-mail: robsoncesarchagas@yahoo.com.br
Desde já agradeço.
Que miséria, downloads não activos códigos que para que são só para quem sabe.
E depois diz que tem anos disto.
Pois não parece.
Quando os download estiverem OK manda-me um email
Htrik@hotmail.com
OLa! Por favor teria como me mandar esse condigo completo se possivel.. Obrigado!
michelborges@hotmail.com
Tive que mudar várias coisas pra fazer funcionar…
Mas deu certo aqui..
MUITOO OBRIGADO CARA…
Código fodaa!!!
Valeu
Tiago Jacomini – tiago-jacomini@hotmail.com