大侠们,问题严重了,快帮帮忙呀~1、有没有人知道怎么从程序里读取本地网络连接的名称呀??比如“本地连接”“本地连接2”这样的名称。2、根据这些本地连接名称读取对应网卡当前的IP地址;子网掩码;MAC地址;和网关地址等与网卡设置有关的参数。先开20分,解决问题后另开送200分,决不食言,可记下我的ID:huaneww;
如果有源码那就更好了,我的E_Mail:[email protected][email protected]
先谢谢大侠们了~

解决方案 »

  1.   

    给一个提示,1.在注册表中,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}找到“本地连接”“本地连接2”这些名称的键,并记录连接的GUID如我本机:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{4FBF2B86-E9D0-4FD0-9EFE-E0D0E54BC0CA}\Connection 下
    name为 “本地连接 3”“本地连接 3” ----{4FBF2B86-E9D0-4FD0-9EFE-E0D0E54BC0CA}2.在注册表,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
    下的项“{4FBF2B86-E9D0-4FD0-9EFE-E0D0E54BC0CA}”的键值中,就有相应的IP地址
    具体的数据都在注册表中的这些位置,写一个注册表读取函数,对这些位置读取,分析一下即可
      

  2.   

    上面老兄的办法我试了,有一个问题呀,就是连接的名称没有一个固定的值,比如像这个值{4D36E972-E325-11CE-BFC1-08002BE10318}我并不知道他就是“本地连接”呀,我该怎么才能把这个值,和我的连接名称联系起来呢?
      

  3.   

    unit Unit1;interfaceuses
      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.
      

  4.   

    给你一个较另类的方法,用系统的ipconfig
    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;
      

  5.   

    ahjoe(强哥)大侠的方法,可以读出连接名称,去读不出地址,不知道怎么回事,有没有高手能解决这个问题呀,感谢,感谢,万分感谢~
      

  6.   

    unit Unit1;interfaceuses
    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.
      

  7.   

    哈哈,搞定了,太感谢ahjoe(强哥) 了,我请到
    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分~~