ipconfig获取的是哪的信息,我怎么用程序得到它? 我程序中有时能从注册表中获取ip信息,但在cmd中用ipconfig获取的ip为空,ipconfig获取的是哪的信息,我怎么用程序得到它? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果没有IP地址,一般是你用的是动态分配IP地址(DHCP)可以用indy控件.-----------------------------http://kmok.cn/ unit Unit1;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,Registry, StdCtrls;constMAX_ADAPTER_NAME_LENGTH = 256;MAX_ADAPTER_DESCRIPTION_LENGTH = 128;MAX_ADAPTER_ADDRESS_LENGTH = 8;typeTIP_ADDRESS_STRING = recordIPstring: array [0..15] of Char;end;PIP_ADDRESS_STRING = ^TIP_ADDRESS_STRING;TIP_MASK_STRING = TIP_ADDRESS_STRING;PIP_MASK_STRING = ^TIP_MASK_STRING;PIP_ADDR_STRING = ^TIP_ADDR_STRING;TIP_ADDR_STRING = recordNext: PIP_ADDR_STRING;IpAddress: TIP_ADDRESS_STRING; //IP地址字符串IpMask: TIP_MASK_STRING; //子网掩码字符串Context: DWORD; //Netword table entryend;PIP_ADAPTER_INFO = ^TIP_ADAPTER_INFO;TIP_ADAPTER_INFO = packed recordNext: PIP_ADAPTER_INFO;ComboIndex: DWORD;AdapterName: array [0..MAX_ADAPTER_NAME_LENGTH + 4-1] of Char;Description: array [0..MAX_ADAPTER_DESCRIPTION_LENGTH + 4-1] of Char;AddressLength: UINT;Address: array [0..MAX_ADAPTER_ADDRESS_LENGTH-1] of BYTE;Index: DWORD;dwType: UINT;DhcpEnabled: UINT;CurrentIpAddress: PIP_ADDR_STRING;IpAddressList: TIP_ADDR_STRING;GatewayList: TIP_ADDR_STRING;DhcpServer: TIP_ADDR_STRING ;HaveWins: BOOL;PrimaryWinsServer: TIP_ADDR_STRING;SecondaryWinsServer: TIP_ADDR_STRING;end;typeTForm1 = class(TForm)Memo1: TMemo;procedure FormCreate(Sender: TObject);private{ Private declarations }function SearchNetwork(): string;public{ Public declarations }end;varForm1: TForm1;function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO;pOutBufLen: PDWORD): DWORD; stdcall;external 'IPHLPAPI.DLL' name 'GetAdaptersInfo';implementation{$R *.DFM}function ExtractRegKey(var Path: string): string; // return keyvari: integer;begini := Pos('\', Path);if i > 1 thenbeginResult := Copy(Path, 1, i-1);Delete(Path, 1, i);endelsebeginResult := Path;Path := '';end;end;Function ReadRegStrValue(Path: string; DataName: String): string;varregfile: TRegistry;tstr: string;beginResult := '';regfile := TRegistry.Create();trytstr := UpperCase(ExtractRegKey(Path));if tstr = 'HKEY_CLASSES_ROOT' thenregfile.RootKey := HKEY_CLASSES_ROOTelse if tstr = 'HKEY_CURRENT_USER' thenregfile.RootKey := HKEY_CURRENT_USERelse if tstr = 'HKEY_LOCAL_MACHINE' thenregfile.RootKey := HKEY_LOCAL_MACHINEelse if tstr = 'HKEY_CURRENT_CONFIG' thenregfile.RootKey := HKEY_CURRENT_CONFIGelse if tstr = 'HKEY_DYN_DATA' thenregfile.RootKey := HKEY_DYN_DATA;while Path <> '' dobegintstr := ExtractRegKey(Path);if not regfile.OpenKey(tstr, False) thenExitend;Result := regfile.ReadString(DataName);finallyregfile.Free;end;end;function TForm1.SearchNetwork(): string;varpbuf: PIP_ADAPTER_INFO;buflen: DWORD;i: integer;guid: string;regfolder: string;linkname: string;mac: string;beginResult := '';buflen := 0;if GetAdaptersInfo(pbuf, @bufLen) = ERROR_BUFFER_OVERFLOW thenbeginpbuf := AllocMem(buflen);if GetAdaptersInfo(pbuf, @bufLen) = ERROR_SUCCESS thenwhile pbuf <> nil do // 找到一个网络连接begin// pbuf 指向连接信息// 此处加入处理代码guid := StrPas(pbuf.AdapterName);regfolder := 'HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\' + guid + '\Connection';linkname := ReadRegStrValue(regfolder, 'name');Memo1.Lines.Add(linkname);Memo1.Lines.Add('IP: ' + pbuf.IpAddressList.IpAddress.IPstring);Memo1.Lines.Add('MASK: ' + pbuf.IpAddressList.IpMask.IPstring);Memo1.Lines.Add('Gateway: ' + pbuf.GatewayList.IpAddress.IPstring);mac := '';for i := 0 to 5 domac := mac + IntToHex(pbuf.Address[i], 2);Memo1.Lines.Add('MAC: ' + mac);Memo1.Lines.Add('');pbuf := pbuf.Next;end;FreeMem(pbuf);end;end;procedure TForm1.FormCreate(Sender: TObject);beginSearchNetwork();end;end. 我编译时提示PIP_ADAPTER_INFO没定义,我应该怎么办,需要引用什么单元? 上传数据的问题 Delphi2010的代码助手不能使用了…… Unit 自己 怎么知道属于哪个bpl Indy UDP 广播的回复问题 怎样通过TADOQuery知道表的主键或索引 grid修改单个数据 怎样在SQLSERVER里的IMAGE字段的问题?50分 急 谁有DELPHI Professional 的序列号和注册码阿??在线求帮!! 如何用delphi动态建立和修改SQL SERVER数据库表 如何在屏幕上直接画或改? Delphi 中这样的集合操作如何进行? 关于鼠标画平行线和垂直线的问题
可以用indy控件.-----------------------------
http://kmok.cn/
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Registry, StdCtrls;const
MAX_ADAPTER_NAME_LENGTH = 256;
MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
MAX_ADAPTER_ADDRESS_LENGTH = 8;type
TIP_ADDRESS_STRING = record
IPstring: array [0..15] of Char;
end;
PIP_ADDRESS_STRING = ^TIP_ADDRESS_STRING;
TIP_MASK_STRING = TIP_ADDRESS_STRING;
PIP_MASK_STRING = ^TIP_MASK_STRING;PIP_ADDR_STRING = ^TIP_ADDR_STRING;
TIP_ADDR_STRING = record
Next: PIP_ADDR_STRING;
IpAddress: TIP_ADDRESS_STRING; //IP地址字符串
IpMask: TIP_MASK_STRING; //子网掩码字符串
Context: DWORD; //Netword table entry
end;
PIP_ADAPTER_INFO = ^TIP_ADAPTER_INFO;
TIP_ADAPTER_INFO = packed record
Next: PIP_ADAPTER_INFO;
ComboIndex: DWORD;
AdapterName: array [0..MAX_ADAPTER_NAME_LENGTH + 4-1] of Char;
Description: array [0..MAX_ADAPTER_DESCRIPTION_LENGTH + 4-1] of Char;
AddressLength: UINT;
Address: array [0..MAX_ADAPTER_ADDRESS_LENGTH-1] of BYTE;
Index: DWORD;
dwType: UINT;
DhcpEnabled: UINT;
CurrentIpAddress: PIP_ADDR_STRING;
IpAddressList: TIP_ADDR_STRING;
GatewayList: TIP_ADDR_STRING;
DhcpServer: TIP_ADDR_STRING ;
HaveWins: BOOL;
PrimaryWinsServer: TIP_ADDR_STRING;
SecondaryWinsServer: TIP_ADDR_STRING;
end;type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
function SearchNetwork(): string;
public
{ Public declarations }
end;var
Form1: TForm1;function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO;
pOutBufLen: PDWORD): DWORD; stdcall;
external 'IPHLPAPI.DLL' name 'GetAdaptersInfo';implementation{$R *.DFM}function ExtractRegKey(var Path: string): string; // return key
var
i: integer;
begin
i := Pos('\', Path);
if i > 1 then
begin
Result := Copy(Path, 1, i-1);
Delete(Path, 1, i);
end
else
begin
Result := Path;
Path := '';
end;end;Function ReadRegStrValue(Path: string; DataName: String): string;
var
regfile: TRegistry;
tstr: string;
begin
Result := '';
regfile := TRegistry.Create();
try
tstr := UpperCase(ExtractRegKey(Path));
if tstr = 'HKEY_CLASSES_ROOT' then
regfile.RootKey := HKEY_CLASSES_ROOT
else if tstr = 'HKEY_CURRENT_USER' then
regfile.RootKey := HKEY_CURRENT_USER
else if tstr = 'HKEY_LOCAL_MACHINE' then
regfile.RootKey := HKEY_LOCAL_MACHINE
else if tstr = 'HKEY_CURRENT_CONFIG' then
regfile.RootKey := HKEY_CURRENT_CONFIG
else if tstr = 'HKEY_DYN_DATA' then
regfile.RootKey := HKEY_DYN_DATA;while Path <> '' do
begin
tstr := ExtractRegKey(Path);
if not regfile.OpenKey(tstr, False) then
Exit
end;
Result := regfile.ReadString(DataName);
finally
regfile.Free;
end;
end;function TForm1.SearchNetwork(): string;
var
pbuf: PIP_ADAPTER_INFO;
buflen: DWORD;
i: integer;
guid: string;
regfolder: string;
linkname: string;
mac: string;
begin
Result := '';
buflen := 0;
if GetAdaptersInfo(pbuf, @bufLen) = ERROR_BUFFER_OVERFLOW then
begin
pbuf := AllocMem(buflen);
if GetAdaptersInfo(pbuf, @bufLen) = ERROR_SUCCESS then
while pbuf <> nil do // 找到一个网络连接
begin
// pbuf 指向连接信息
// 此处加入处理代码
guid := StrPas(pbuf.AdapterName);
regfolder := 'HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\' + guid + '\Connection';
linkname := ReadRegStrValue(regfolder, 'name');
Memo1.Lines.Add(linkname);
Memo1.Lines.Add('IP: ' + pbuf.IpAddressList.IpAddress.IPstring);
Memo1.Lines.Add('MASK: ' + pbuf.IpAddressList.IpMask.IPstring);
Memo1.Lines.Add('Gateway: ' + pbuf.GatewayList.IpAddress.IPstring);
mac := '';
for i := 0 to 5 do
mac := mac + IntToHex(pbuf.Address[i], 2);
Memo1.Lines.Add('MAC: ' + mac);
Memo1.Lines.Add('');
pbuf := pbuf.Next;
end;
FreeMem(pbuf);
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
SearchNetwork();
end;end.