如何获得的本机器的ip地址,通过程序?谢谢

starts 2002-09-04 03:41:37
如何获得的本机器的ip地址,通过程序?谢谢
...全文
30 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
东方小黑 2002-09-04
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/topic/970/970575.xml?temp=.5432703
Patsy 2002-09-04
  • 打赏
  • 举报
回复
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, ExtCtrls, Winsock; //首先要添加winsock
type
TForm1 = class(TForm)
Timer1: TTimer;
Label1: TLabel;
PopupMenu1: TPopupMenu;
Exit: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ExitClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
oldx,oldy: integer;//添加变量,用做移动窗体
oldIp: string;
implementation
{$R *.dfm}
//下面就是关键所在了
function LIP : string;
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;

procedure TForm1.FormCreate(Sender: TObject);
begin
with Label1 do //定义属性
begin
Caption:='';
Font.Charset:=ANSI_CHARSET;
Font.Name:='Arial';
Font.Size:=10;
Font.Color:=clRed;
Align:=alClient;
PopupMenu:=popupmenu1;
end;

Timer1.Interval:=1000;
Timer1.Enabled:=true;
Label1.Caption:='IP:'+LIP; //赋值,把Ip赋值给label1
oldIp:=LIP;
BorderStyle:=bsNone;
Alphablend:=true; //呵呵,这个就是让窗口变透明的办法了
Alphablendvalue:=100;
FormStyle:=fsStayOnTop; //让窗体总在最前面
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption :='IP:'+LIP;
if oldip <> LIP then
Showmessage('IP地址已经改变,请检查!');//提醒用户
end;

procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssleft in shift then //移动窗体Form1
begin
Form1.Left:=Form1.Left+x-oldx;
Form1.Top:=Form1.top+y-oldy;
end;
end;

procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
oldx:=x;
oldy:=y;
end;

procedure TForm1.ExitClick(Sender: TObject);
begin
Close;
end;
end.
u2m 2002-09-04
  • 打赏
  • 举报
回复
function LocalIP : string;
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;
starts 2002-09-04
  • 打赏
  • 举报
回复
TWSAData 没有定义
doctor5 2002-09-04
  • 打赏
  • 举报
回复
function GetIpAddress:string;
var
Sdata: TWSAData;
ErrorCode: Integer;
HEnt: PHostEnt;
IPAddr: TInAddr;
CName: PChar;
iSize: longword;
begin
iSize := MAX_COMPUTERNAME_LENGTH;
GetMem(CName,iSize);
try
GetComputerName(CName,iSize);
ErrorCode := WSAStartUp($0101,SData);
if ErrorCode = 0 then
begin
try
HEnt := GetHostByName(CName);
if HEnt <> nil then
begin
with IPAddr,HEnt^ do
begin
S_un_b.s_b1 := h_addr^[0];
S_un_b.s_b2 := h_addr^[1];
S_un_b.s_b3 := h_addr^[2];
S_un_b.s_b4 := h_addr^[3];
end;
Result := inet_ntoa(IPAddr);
end;
finally
ErrorCode := WSACleanUp;
end;
end;
finally
FreeMem(CName);
end;
end;
Delphi_Li 2002-09-04
  • 打赏
  • 举报
回复
Function NameToIP( Const ComputerName : String ) : String;
Var
WSAdata : TWSAData;
HostName : Array [ 0.. 255 ] Of Char;
HostEnt : PHostEnt;
Addr : PChar;
Begin
WSAStartup( $0101, WSAdata );
Try
StrPCopy( HostName, Name );
HostEnt := GetHostByName( HostName );
If Assigned( HostEnt ) Then
Begin
If Assigned( HostEnt^.h_addr_list ) Then
Begin
Addr := hostEnt^.h_addr_list^;
If Assigned( Addr ) Then Result := Format( '%d.%d.%d.%d', [ Byte( Addr[ 0 ] ),Byte( Addr[ 1 ] ),Byte(Addr[ 2 ] ),Byte(Addr[ 3 ] ) ] )
Else Result := '';
End
Else Result := '';
End
Else Result := '';
Finally
WSACleanup;
End;
End;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧