Sobre nome da máquina...

Delphi

25/07/2005

Pessoal como pegar o nome da máquina atual... :?:


Bruno Belchior

Bruno Belchior

Curtidas 0

Respostas

Kapak

Kapak

25/07/2005

Veja: GetComputerName


GOSTEI 0
Janbaceiredo

Janbaceiredo

25/07/2005

Caro colega Bruno,

para você saber o nome da maquina conheço duas formas:

[b:cec907def0]1º Usando a Unit Winsock[/b:cec907def0]

[b:cec907def0][color=blue:cec907def0]1º Passo[/color:cec907def0][/b:cec907def0]
Declare a unit Winsock na clausula [b:cec907def0]Uses[/b:cec907def0]
Exemplo
[list:cec907def0][i:cec907def0][color=red:cec907def0][b:cec907def0]uses[/b:cec907def0][/color:cec907def0]
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, [color=red:cec907def0][b:cec907def0]Winsock[/b:cec907def0][/color:cec907def0], ShellApi;[/i:cec907def0][/list:u:cec907def0]

[b:cec907def0][color=blue:cec907def0]2º Passo[/color:cec907def0][/b:cec907def0]
Insira o código abaixo no [b:cec907def0]Evento OnCreate:[/b:cec907def0]

[list:cec907def0][i:cec907def0]procedure TForm1.FormCreate(Sender: TObject);
var
wVersionRequested: WORD;
wsaData: TWSAData;
begin
wVersionRequested:= MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);
end;[/i:cec907def0][/list:u:cec907def0]

E no [b:cec907def0]Evento OnDestroy[/b:cec907def0] insira o seguinte código:
[list:cec907def0][i:cec907def0]procedure TForm1.FormDestroy(Sender: TObject);
begin
WSACleanup;
end;[/i:cec907def0][/list:u:cec907def0]

[b:cec907def0][color=blue:cec907def0]3º Passo[/color:cec907def0][/b:cec907def0]
Insira um componente Button no formulario e em seu [b:cec907def0]Evento Onclick[/b:cec907def0] digite o seguinte código:

[list:cec907def0][i:cec907def0]procedure TForm1.Button1Click(Sender: TObject);
var
Host : PHostEnt;
S : array[0..128] of char;
Num_Ip : pchar;
Msg: String;
begin
// Pega o nome da maquina
GetHostName(@s, 128);
Host:= GetHostByName(@s);

// Pega o número do IP da maquina
Num_Ip:= iNet_ntoa(PInAddr(Host^.h_addr_list^)^);

// Junta o nome da maquina + o número Ip
Msg:= ´Nome do Host: ´ + Host^.h_Name + #13 + ´Número IP: ´ + Num_Ip;

ShowMessage(Msg);
end;[/i:cec907def0][/list:u:cec907def0]

Agora é só executar a aplicação e verificar o resultado.

Agora a segunda forma é referente ao comando [b:cec907def0]GetComputerName[/b:cec907def0], mencionado pelo membro [b:cec907def0]kapak.[/b:cec907def0]

[b:cec907def0]2º Usando a Unit ShellApi[/b:cec907def0]

[b:cec907def0][color=blue:cec907def0]1º Passo[/color:cec907def0][/b:cec907def0]
Declare a unit ShellApi na clausula [b:cec907def0]Uses[/b:cec907def0]
Exemplo
[list:cec907def0][i:cec907def0][color=red:cec907def0][b:cec907def0]uses[/b:cec907def0][/color:cec907def0]
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, Winsock, [color=red:cec907def0][b:cec907def0]ShellApi;[/b:cec907def0][/color:cec907def0][/i:cec907def0][/list:u:cec907def0]

[b:cec907def0][color=blue:cec907def0]2º Passo[/color:cec907def0][/b:cec907def0]
Insira um componente Button no formulario e em seu [b:cec907def0]Evento Onclick[/b:cec907def0] digite o seguinte código:
[list:cec907def0][i:cec907def0]procedure TForm1.Button1Click(Sender: TObject);
var
pcName : pchar; // Recebe o nome do Host
dwSize : dword; // Buffer que aloca o nome do Host
begin
try
dwSize:= MAX_COMPUTERNAME_LENGTH + 1;
pcName:= strAlloc( dwSize );

if not getComputerName(pcName, dwSize) then
application.MessageBox(
pChar( ´Motivo: A chamada na Api do Windows Falhou´ + #1010 +
´Windows reporta o código de erro ´ +
intToStr( getLastError ) ),
´Não pode pegar o nome do computador´, ID_OK )
else
application.MessageBox(
pChar( O nome deste computador é ´´ + pcName +
´´, e ele contém ´ + intToStr( dwSize ) +
´ caracter(s).´ ), ´FYI´, ID_OK );
finally
strDispose( pcName );
end;
end;[/i:cec907def0][/list:u:cec907def0]

Agora é só executar a aplicação e verificar o resultado.

Observe que nesse exemplo usando a função getComputerName trata somente erros simples (básicos). A maiorias das rotinas da Api do Windows retornam valores que indicam o sucesso ou a falha da chamada. Você deve observar o retorno desses valor e tratar as condições de erro caso venha acontecer. Use o Win32 Programmer´s Reference Help file fornecido junto com o Delphi para determinar condições de erro e possiveis soluções para tratar o mesmo. Você pode usar a função da Api chamada getLastError() para obter informações adicionais sobre erro. Como você pôde esperar, os valores que retornam depende da função que você esta trabalhando. Durante a execução desse exemplo ocorreu o seguinte erros relatados pela função getLastError(): [b:cec907def0]ERROR_INVALID_PARAMETER (Value: 87)[/b:cec907def0] Indica que o dwSize não apresenta o número de carácteres alocados realmente a pcName. De acordo com Win32 Programmer´s Reference Help file, o pcName necessita ter MAX_COMPUTERNAME_LENGTH + 1 (um) caracter no seu tamanho. Se o getComputerName() e o erro relatado pelo getLastError() for 87, atribua o comprimento do pcName a dwSize antes de chamar o getComputerName(). [b:cec907def0]ERROR_BUFFER_OVERFLOW (Value: 111)[/b:cec907def0] Indica que o dwSize não reflete corretamente os carácteres alocados para o pcName. Use o mesmo valor para ambos (MAX_COMPUTERNAME_LENGTH + 1), como mostrado acima. Para maiores informações sobre o getComputerName() ou getLastError, por favor consulte o Win32 SDK Help file do Delphi.


Todos os exemplos foram feitos em Delphi 7.
Espero que tenha ajudado,
Até mais,
Antônio.


GOSTEI 0
Conradorag

Conradorag

25/07/2005

olha tem uma forma muito mais tranquila de voce pegar o hostname da sua maquina:

adicione um compontente TTcpClient que esta na paleta Internet e faça assim:

procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.caption := TcpClient1.LocalDomainName;
LAbel2.caption := TcpClient1.LocalHostAddr;
LAbel3.caption := TcpClient1.LocalHostName;
end;
espero que ajude


GOSTEI 0
Michael

Michael

25/07/2005

Olá!

Veja [url=http://delphi.about.com/cs/adptips2002/a/bltip0102_3.htm]este link[/url] do site [url=http://delphi.about.com]About Delphi[/url].

[]´s


GOSTEI 0
Martins

Martins

25/07/2005

Olá! Veja [url=http://delphi.about.com/cs/adptips2002/a/bltip0102_3.htm]este link[/url] do site [url=http://delphi.about.com]About Delphi[/url]. []´s

Blz [b:514961ba25]Michael[/b:514961ba25], bem melhor do q utilizar o registro do Windows.

function ComputerName: string;
var
  reg : tregistry;
begin
  reg:=tregistry.create;
  reg.RootKey:=HKEY_LOCAL_MACHINE;
  reg.openkey(´\SYSTEM\ControlSet001\Control\ComputerName\ComputerName´,false);
  result:=reg.readstring(´ComputerName´);
end;


Não esquecendo de acrescentar o Registry no Uses.

Valew!!!

end;


GOSTEI 0
POSTAR