???将注册表获取的ip地址 转换成string (80分)

  • 主题发起人 日出 东方
  • 开始时间

日出 东方

Unregistered / Unconfirmed
GUEST, unregistred user!
"IPAddress"=hex(7):32,00,30,00,32,00,2e,00,31,00,39,00,34,00,2e,00,31,00,39,00,/
35,00,2e,00,31,00,33,00,00,00,00,00
这个不能用的,怎样转换?
不是我懒,不知从何入手。
既然都进来了,帮帮我吧。
var reg:TRegistry ;
s:String ;
begin
reg:=TRegistry .Create ;
reg .RootKey :=HKEY_LOCAL_MACHINE ;
if reg.OpenKey('SYSTEM/ControlSet001/Services/{45EEA448-E52A-417A-8488-2D235F988B46}/Parameters/Tcpip',true) then
s:=reg .ReadString('IPAdress');
end;

end.
[HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services
/{45EEA448-E52A-417A-8488-2D235F988B46}/Parameters/Tcpip]
"EnableDHCP"=dword:00000000
"IPAddress"=hex(7):32,00,30,00,32,00,2e,00,31,00,39,00,34,00,2e,
00,31,00,39,00,/
35,00,2e,00,31,00,33,00,00,00,00,00
 
我也想知道耶,如何获得本机的IP地址??
 
我也想知道呀!
关注!!!!!!!
 
202.195.195.130
 
这个问题很难么?我现在还有142分!
为什么大侠张无忌不进来看看?
 
难道是我说得不够清楚么?我是想用程序来做。另外 202.195.195.130 :) 不是。
 
给你个控件吧!

unit GetLocalIP;

interface

uses
Windows, Messages, SysUtils, Classes, WinSock;

type
TGetLocalIP = class(TComponent)
private
{ Private declarations }
FLocalIP:string;
protected
function GetLocIP : string; //获取本地机器IP地址
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property LocalIP:string read FLocalIP;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Samples', [TGetLocalIP]);
end;
constructor TGetLocalIP.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FLocalIP:=GetLocIP;
end;

destructor TGetLocalIP.Destroy;
begin
inherited Destroy;
end;
function TGetLocalIP.GetLocIP : string; //获取本地机器IP地址
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
Result := '';
try
WSAStartup($101, GInitData);
GetHostName(Buffer, SizeOf(Buffer));
phe :=GetHostByName(buffer);
if phe = nil then Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^ <> nil do
begin
result:=StrPas(inet_ntoa(pptr^^));
Inc(I);
end;
WSACleanup;
except
WSACleanup;
end;
end;

end.
 
看错了一位,202.194.195.130, 这个对了吧?
 
其实得到自己的ip地址我可以用winsock 的 gethostname得到。
但是我这里就想知道怎么样算。
to pigprince: 呵呵 ,看来你还是得再算。不过就最后一个错了。告诉我怎么算得?你很厉害啊

注释:
我不仅仅想得到自己得ip。这个以前有人回答了。我想通过读取注册表来得到自己得dns÷网关等等
假如谁可以不通过注册表可以得到局域网的网关。我愿意用另一个ID出400分。
 
学习该贴
 
function GetDNS: string;
var
Reg: TRegistry;
re: Boolean;
dns: string;
begin
Reg := TRegistry.Create();
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
re := Reg.OpenKey('SYSTEM/CurrentControlSet/Services/Tcpip/Parameters', False); //Win2000系统
// Reg.OpenKey('SYSTEM/CurrentContolSet/Services/VxD/MSTCP/', False); Win98系统
if re then
Result := Reg.ReadString('NameServer')
else
Result := 'fail';
finally
Reg.Free;
end;

end;
 
32,00,30,00,32,00,2e,00,31,00,39,00,34,00,2e,00,31,00,39,00,35,00,2e,00,31,00,33,00,00,00,00,00
这个是unicode的16进制形式。2个字节代表一个字符。所以ip是。
202.194.195.13
 
看看下面的东西,然后不要问我怎么在delphi里调用api, 我不告诉你!

From MSDN:

The GetPerAdapterInfo function retrieves information about the adapter
corresponding to the specified interface.

DWORD GetPerAdapterInfo(
ULONG IfIndex,
PIP_PER_ADAPTER_INFO pPerAdapterInfo,
PULONG pOutBufLen
);


typedef struct _IP_PER_ADAPTER_INFO {
UINT AutoconfigEnabled;
UINT AutoconfigActive;
PIP_ADDR_STRING CurrentDnsServer;
IP_ADDR_STRING DnsServerList;
} IP_PER_ADAPTER_INFO, *PIP_PER_ADAPTER_INFO;


Requirements
Windows NT/2000/XP: Included in Windows 2000 and later.
Windows 95/98/Me: Unsupported.
Header: Declared in Iptypes.h.

 
GetNetworkParams works on 98+ while GetPerAdapterInfo only on w2k+.

然后不要问我怎么在delphi里调用api, 我不告诉你!

 
看看别人的源码吧:http://www.8421.org/download.php?id=147
我正的饱读中。。。
原理是用系统带的iphlpapi.dll文件提供的几个api,上面的pigprince用的就是这个
win9X以上的系统支持
 
真实202.194.195.14 是我弄错了还是你们算错了?呵呵。
谢谢
 
顶部