procedure TMainWinForm.FormCreate(Sender: TObject);
var
Reg:TRegistry;
IpAddressStr:String;
i:integer;
WSData:TWSAData;
Host:PHostEnt;
Ip:string;
Ipstr:string;
CPName:PChar;
CGName:String;
Size:DWord;
Msg:String;
PMsg:array[0..255] of Char;
len:Integer;
begin
Reg:=TRegistry.Create;
IpAddressStr:='';
try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\Software\JFGL',False) then
IpAddressStr:=Reg.ReadString('IpAddress')
else
IpAddressStr:='129.1.3.16';
finally
Reg.CloseKey ;
//Reg.Free;
end; try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\System\CurrentControlSet\Services\VxD\VNETSUP',False) then
CGName:=Reg.ReadString('Workgroup')
else
CGName:='';
finally
Reg.CloseKey ;
Reg.Free;
end;
GroupName:=CGName; if IpAddressStr='' then
IpAddressStr:='129.1.3.16'; NMUDP1.RemoteHost:=IpAddressStr; GetMem(CPName,255);
Size:=255;
GetComputerName(CPName,Size);
ComputerName:=CPName; if WSAstartup(2,WSData)<>0 then //为程序使用WS2_32.DLL初始化
halt;
Host:=gethostbyname(CPName);
if Host=nil then
IpAddress:='127.0.0.1'
else begin
for i:=1 to 4 do
begin
Ip:=inttostr(Ord(Host.h_addr^[i-1]));
Ipstr:=Ipstr+Ip;
if i<4 then
Ipstr:=Ipstr+'.'
else
IpAddress:=Ipstr;
end;
end;
WSACleanUp;
FreeMem(CPName); MACAddress:=NBGetAdapterAddress(0);
Msg:='IP:'+IpAddress+'-MAC:'+MACAddress+'-CN:'+ComputerName+'-GN:'+GroupName;
StrpCopy(PMsg,Msg);
len:=length(Msg);
NMUDP1.SendBuffer(PMsg,len+1);
TimerSend.Enabled :=True;
end;
var
Reg:TRegistry;
IpAddressStr:String;
i:integer;
WSData:TWSAData;
Host:PHostEnt;
Ip:string;
Ipstr:string;
CPName:PChar;
CGName:String;
Size:DWord;
Msg:String;
PMsg:array[0..255] of Char;
len:Integer;
begin
Reg:=TRegistry.Create;
IpAddressStr:='';
try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\Software\JFGL',False) then
IpAddressStr:=Reg.ReadString('IpAddress')
else
IpAddressStr:='129.1.3.16';
finally
Reg.CloseKey ;
//Reg.Free;
end; try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\System\CurrentControlSet\Services\VxD\VNETSUP',False) then
CGName:=Reg.ReadString('Workgroup')
else
CGName:='';
finally
Reg.CloseKey ;
Reg.Free;
end;
GroupName:=CGName; if IpAddressStr='' then
IpAddressStr:='129.1.3.16'; NMUDP1.RemoteHost:=IpAddressStr; GetMem(CPName,255);
Size:=255;
GetComputerName(CPName,Size);
ComputerName:=CPName; if WSAstartup(2,WSData)<>0 then //为程序使用WS2_32.DLL初始化
halt;
Host:=gethostbyname(CPName);
if Host=nil then
IpAddress:='127.0.0.1'
else begin
for i:=1 to 4 do
begin
Ip:=inttostr(Ord(Host.h_addr^[i-1]));
Ipstr:=Ipstr+Ip;
if i<4 then
Ipstr:=Ipstr+'.'
else
IpAddress:=Ipstr;
end;
end;
WSACleanUp;
FreeMem(CPName); MACAddress:=NBGetAdapterAddress(0);
Msg:='IP:'+IpAddress+'-MAC:'+MACAddress+'-CN:'+ComputerName+'-GN:'+GroupName;
StrpCopy(PMsg,Msg);
len:=length(Msg);
NMUDP1.SendBuffer(PMsg,len+1);
TimerSend.Enabled :=True;
end;
type
TaPInAddr = array [0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe : PHostEnt;
pptr : PaPInAddr;
Buffer : array [0..63] of char;
I : Integer;
GInitData : TWSADATA;
begin
WSAStartup($101, GInitData);
Result := '';
GetHostName(Buffer, SizeOf(Buffer));
phe :=GetHostByName(buffer);
if phe = nil then Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^[I] <> nil do begin
result:=StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;
注意,需要use WinSock Unit.
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;