Sobre nome da máquina...
Pessoal como pegar o nome da máquina atual... :?:
Bruno Belchior
Curtidas 0
Respostas
Kapak
25/07/2005
Veja: GetComputerName
GOSTEI 0
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.
Todos os exemplos foram feitos em Delphi 7.
Espero que tenha ajudado,
Até mais,
Antônio.
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
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
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
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
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
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