大侠们,问题严重了,快帮帮忙呀~1、有没有人知道怎么从程序里读取本地网络连接的名称呀??比如“本地连接”“本地连接2”这样的名称。2、根据这些本地连接名称读取对应网卡当前的IP地址;子网掩码;MAC地址;和网关地址等与网卡设置有关的参数。先开20分,解决问题后另开送200分,决不食言,可记下我的ID:huaneww;
如果有源码那就更好了,我的E_Mail:[email protected], [email protected]
先谢谢大侠们了~
如果有源码那就更好了,我的E_Mail:[email protected], [email protected]
先谢谢大侠们了~
解决方案 »
- 如何以TComboBox为基础加上新的属性制作一个新的控件,最好能给出代码,谢谢
- 这样的界面用什么控件可以实现?如果不用控件可以怎么实现?(来着有分)
- 在C++中实现与,或,左移位,右移位的操作都是对byte的,但在delphi中规定的参数只能是integer,如果要对delphi中的char实现这些操作该如
- ADOQuery1得到表名问题
- 我DOWN了一个ado的补丁程序,安装需要序列号,我找不到,谁可以告诉我,我用的是DELPHI5
- 请教一下关于SQL的问题
- 关于用李维书的一个问题,
- Delphi高手请进...
- 盗版价格调查~!先到者得分
- 在DELPHI中怎样将目录中的文件和目录逐条查询或显示出来并反映到List控件上
- Delphi数据库数值判断问题!
- 如何禁止ADOquery1.ReQuery后记录位置的变化?
name为 “本地连接 3”“本地连接 3” ----{4FBF2B86-E9D0-4FD0-9EFE-E0D0E54BC0CA}2.在注册表,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
下的项“{4FBF2B86-E9D0-4FD0-9EFE-E0D0E54BC0CA}”的键值中,就有相应的IP地址
具体的数据都在注册表中的这些位置,写一个注册表读取函数,对这些位置读取,分析一下即可
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Registry;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)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
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 SearchNetwork(): string;
var
pbuf: PIP_ADAPTER_INFO;
buflen: DWORD;
i: integer;
guid: string;
regfolder: string;
linkname: 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');
ShowMessage(linkname);
pbuf := pbuf.Next;
end;
FreeMem(pbuf);
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
SearchNetwork();
end;end.
procedure TForm1.Button1Click(Sender: TObject);
var
pi: PROCESS_INFORMATION ;
si: STARTUPINFO ;
begin
ZeroMemory(@si,sizeof(STARTUPINFO));
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := SW_HIDE;
CreateProcess(nil,'cmd.exe /c ipconfig.exe /all >1.txt', nil, nil, false,
0, nil, nil, si, pi);
WaitForSingleObject(pi.hThread,INFINITE);
CloseHandle(pi.hThread);
Memo1.Lines.LoadFromFile('1.txt'); //这只是一个例子,你可将它放入TStringList中,并分析其中所有Ethernet adapter 后面的内容,就为本地网络连接的名称
DeleteFile('1.txt');end;
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.
http://community.csdn.net/Expert/topic/5265/5265561.xml?temp=.8391382
http://community.csdn.net/Expert/topic/5265/5265563.xml?temp=7.400149E-02
领取感谢你的另外200分~~