请指教,谢谢!
解决方案 »
- Rzchecktree与popupmanu
- 同一IE进程打开多个内嵌activex控件的页面,Activex不释放?
- 如和给wideString 的类型变量给值啊
- 散分啊,大放血啊。
- 如果实现自动触发打印对话框中的“确定”按钮,急!在线等待。。。。
- 怎么加密网络数据啊?
- 为什么我的COMBOBOX下拉的内容到不了表里呢?(内详)请教
- 难题,分不够可以再加,解决了马上给分,请各位高手指教,在线等候。
- 请问如何在Delphi中使得用mainmenu制作的菜单项menuitem可控制字体,颜色和大小等?
- 如何用trackbar控制文件的播放位置?
- 请问 Delphi 的类库是怎么组着的?
- 可以在程序运行时修改serversocket和clientsocket的port属性吗?
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;
========================================
program get_ip;
uses
winsock,sysutils;
VAR
ch : ARRAY[1..32] OF Char;
i : Integer;
WSData: TWSAData;
MyHost: PHostEnt;
begin
IF WSAstartup(2,wsdata)<>0 THEN
BEGIN
Writeln('can''t start Winsock: Error ',WSAGetLastError);
Halt(2);
END;
try
IF getHostName(@ch[1],32)<>0 THEN
BEGIN
Writeln('getHostName failed');
Halt(3);
END;
except
Writeln('getHostName failed');
halt(3);
end;
MyHost:=GetHostByName(@ch[1]);
IF MyHost=NIL THEN
BEGIN
Writeln(GetHostName('+StrPas(@ch[1])+') failed : Error
'+IntToStr(WSAGetLastError));
Halt(4);
END
ELSE
BEGIN
Write('address ');
FOR i:=1 TO 4 DO
BEGIN
Write(Ord(MyHost.h_addr^[i-1]));
IF i<4 THEN
then write('.')
ELSE
writeln;
END;
END;
end.以上出自“猛料”,贴出来供参考。
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;
winsock,sysutils;
VAR
ch : ARRAY[1..32] OF Char;
i : Integer;
WSData: TWSAData;
MyHost: PHostEnt;
begin
IF WSAstartup(2,wsdata)<>0 THEN
BEGIN
Writeln('can''t start Winsock: Error ',WSAGetLastError);
Halt(2);
END;
try
IF getHostName(@ch[1],32)<>0 THEN
BEGIN
Writeln('getHostName failed');
Halt(3);
END;
except
Writeln('getHostName failed');
halt(3);
end;
MyHost:=GetHostByName(@ch[1]);
IF MyHost=NIL THEN
BEGIN
Writeln(GetHostName('+StrPas(@ch[1])+') failed : Error
'+IntToStr(WSAGetLastError));
Halt(4);
END
ELSE
BEGIN
Write('address ');
FOR i:=1 TO 4 DO
BEGIN
Write(Ord(MyHost.h_addr^[i-1]));
IF i<4 THEN
then write('.')
ELSE
writeln;
END;
END;
end.
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ShellApi,Winsock, StdCtrls;type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations } public
{ Public declarations }
end;var
Form1: TForm1;
FComputerName : String;//用来存贮本机的计算机名称
FComputerIP : String; //用来存贮本机的计算机IP地址implementation{$R *.DFM}procedure GetClientPcNameIP; //定义了一个局部函数,这个函数的功能是获取本机的计算机名称和IP
const
nSize = 256;
var
strName : PChar;
pWsaData : WSAData;
nHostent : PHostEnt;
Ver : Word;
begin
try
//初始化WinSock
Ver := MakeWord(2,0);
if WSAStartup(Ver,pWsaData) <> 0 then exit; //获取本机的计算机名和IP
GetMem(strName,nSize);
if GetHostName(strName,nSize) <> 0 then exit;
FComputerName := strName;
nHostent := GetHostByName(strName);
//FPcIP := AnsiString(inet_ntoa((pinin_addr((hInfo.h_addr_list)^))^)); FComputerIP := inet_ntoa((PInAddr((nHostent.h_addr_list)^))^);
finally
FreeMem(strName);
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
GetClientPcNameIP;
Edit1.Text := FComputerName;
Edit2.Text := FComputerIP;
end;end.说明:在Form中放两个TEdit控制和两个TLabel控制,包含ShellApi,Winsock两个单元即可。
silverwonder(刷卡太快请重刷) 经过验证是正确得其他人得我也想一定正确的不好意思啊。silverwonder(刷卡太快请重刷) ,这次平均分了,下次我再给你加分