win api函数getcomputername和gethostbyname怎么用(100分)

  • 主题发起人 主题发起人 yzyzw
  • 开始时间 开始时间
Y

yzyzw

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾,小弟是delphi的初学者,想通过一些小程序渐近学习delphi,现遇到
在局域网如何显示本机的计算机名和IP地址的问题,望各位大哥能否详细讲解
一下getcomputername及gethostbyname的用法,最好包括如何申明如何显示
的一实例。在此谢谢了!可发email给我:yzwww@990.net.
 
抄别人的。
不能用getcomputername,要用gethostbyaddr.
如下:
use winsock;

gethostbyaddr 根据IP地址返回主机信息
struct HOSTENT FAR * gethostbyaddr (
const char FAR * addr,
int len,
int type
);

addr [in] A pointer to an address in network byte order.
len [in] The length of the address.
type [in] The type of the address.

gethostbyname 根据主机名返回主机信息
struct hostent FAR * gethostbyname ( const char FAR * name );

hostent 主机信息类型说明
struct hostent {
char FAR * h_name;
char FAR * FAR * h_aliases;
short h_addrtype;
short h_length;
char FAR * FAR * h_addr_list;
};

h_name 主机名
h_aliases 别名(数组)
h_addrtype 地址类型
h_length 地址长度
h_addr_list 地址列表
 
Win32 Core API Help 中的例子:

===============
getcomputername的例子
-------

procedure TForm1.Button1Click(Sender: Tobject);
var
ComputerName: array[0..MAX_COMPUTERNAME_LENGTH+1] of char; // holds the name
Size: Integer; // holds the size
begin
{initialize the computer name size variable}
Size := MAX_COMPUTERNAME_LENGTH+1;

{retrieve the computer name}
if GetComputerName(ComputerName, Size) then

Edit1.Text := StrPas(Computername)
else Showmessage('Computer Name Not Found');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
ComputerName: array[0..MAX_COMPUTERNAME_LENGTH+1] of char; // holds the name
begin
{copy the specified name to the ComputerName buffer}
StrPCopy(ComputerName, Edit1.Text);

{set the computer name}
if SetComputerName(ComputerName) then

ShowMessage('Computer Name Reset Setting will be used at next startup')
else ShowMessage('Computer Name Not Reset');
end;
==============


没有gethostbyname的例子

 
apihelp原文:

GetComputerName

VB声明
Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
说明
取得这台计算机的名称
返回值
Long,TRUE(非零)表示成功,否则返回零。会设置GetLastError
参数表
参数 类型及说明
lpBuffer String,随同计算机名载入的字串缓冲区
nSize Long,缓冲区的长度。这个变量随同返回计算机名的实际长度载入
注解
注意nSize参数并不是按值传递的。参考api32.txt,了解MAX_COMPUTER_NAME常数的值

示例
Dim s$
s$ = String$(MAX_COMPUTERNAME_LENGTH+1,0)
Dim dl&
Dim sz&
sz& = MAX_COMPUTERNAME_LENGTH+1
dl& = GetComputerName(s$, sz)
其他
也许你会发现,MAX_COMPUTERNAME_LENGTH常数在vb自带的api文本查看器中找不到。的确,我也没有找到。但我有一个工具:Listapi,这个常数在它那里可以找到

 
小弟是想用delphi编个小程序显示computer name and IP addr.小弟其它语言
还没学呢!
 
得到本机IP地址和计算机名:

uses Winsock;

... ...

procedure TForm1.FormCreate(Sender: TObject);
var
wVersionRequested : WORD;
wsaData : TWSAData;
begin
{Start up WinSock}
wVersionRequested := MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
p : PHostEnt;
s : array[0..128] of char;
p2 : pchar;
begin
{获得计算机名}
GetHostName(@s, 128);
p := GetHostByName(@s);
Memo1.Lines.Add(p^.h_Name);
{获得本机的ip地址}
p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
Memo1.Lines.Add(p2);
end;


procedure TForm1.FormDestroy(Sender: TObject);
begin
{Shut down WinSock}
WSACleanup;
end;

 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
913
SUNSTONE的Delphi笔记
S
后退
顶部