用GetAdaptersInfo
我可以从AdapterName属性中得到注册表的键值
从Address中得到Mac地址
但拨号连接没连接时。。都得不到的。。
我用RasEnumEntries可以得到拨号的名称
请问各位高手。。没连接时。。
有什么方法可以得到一个拨号连接在注册表的键值或者MAC地址分不够。。我加。。
请记得是拨号连接而且是没连接时的

解决方案 »

  1.   

    在《Windows网络编程》第16章相很多内容,其中包括你上面所需的示例代码。
      

  2.   

    RasEnumEntries只能得到连接的名称
    程序只考虑2000及XP。。9X系列不考虑
    RasGetEntryPerPerties也没见返回注册表的键值
      

  3.   

    to DentistryDoctor(牙科医生) 
    如果有相关代码。。麻烦你copy出来一下
    这个问题已经搞了一个星期了
      

  4.   

    给个E-Mail,我将相关源代码发一份给你。
      

  5.   

    你最好还是看《Windows网络编程》第16章
      

  6.   

    MSDN中有个示例叫rasberry,你可以仔细读一下。
      

  7.   

    [email protected]
    我现在手上没有《Windows网络编程》
    我找找来看
      

  8.   

    LPRASENTRYNAME lpRasEntry;
       LPRASENTRYNAME lpTemp;
        DWORD cbBuf;
        DWORD cEntry;
        DWORD dwRet;
        UINT  ndx;    cbBuf = sizeof(RASENTRYNAME);
        if ((lpRasEntry = ( LPRASENTRYNAME ) _fmalloc((UINT)cbBuf)) != NULL ) 
        {
            lpRasEntry->dwSize = sizeof(RASENTRYNAME);
            dwRet = RasEnumEntries( NULL, NULL, lpRasEntry, &cbBuf, &cEntry );
            if ( dwRet == ERROR_BUFFER_TOO_SMALL )
            {
                if ((lpTemp = ( LPRASENTRYNAME ) _frealloc ( lpRasEntry, (UINT)cbBuf )) != NULL )
                {
                    lpRasEntry = lpTemp;
                    dwRet = RasEnumEntries( NULL, NULL, lpRasEntry, &cbBuf, &cEntry );
                }
                else
                {
                    dwRet = ERROR_NOT_ENOUGH_MEMORY;
                }
            }
            else if ( dwRet != 0 ) // other error
            {
                if ( RasGetErrorString( (UINT)dwRet, szMessage, 256 ) != 0 )
    {
    }
                
            } RASENTRY rasEntry;
    DWORD dwCountryCode=0;
    LPBYTE lpDeviceInfo;
    DWORD EntryInfoSize=0,DeiveInfoSize=0;
    DWORD nRet=0;
    if((nRet=RasGetEntryProperties(NULL,"",&EntryInfoSize,NULL,&DeviceInfoSize))!=0)
    {
    if(nRet!=ERROR_BUIFFER_TOO_SMALL)
    return;
    }
    if(DeviceInfoSize==0)
    lpDeviceInfo=NULL;
    else
    lpDeviceInfo=(LPBYTE)GlobalAlloc(GPTR,DeviceInfoSize);
    rasEntry.dwSize=sizeof(RASENTRY);
            if ( dwRet == 0 )  // No errors
            {
                for ( ndx = 0; ndx < cEntry; ndx++ ) 
    {
    RasGetEntryProperties(lpRasEntry[ndx].szPhonebookPath,lpRasEntry[ndx].szEntryName,&rasEntry,&nEntrySize,lpDeviceInfo,&DeviceInfoSize);
    ...
    }
                            }
    GlobalFree(lpDeviceInfo);        _ffree( lpRasEntry );
        }
      

  9.   

    RasGetEntryProperties()能得到键值或者MAC地址吗
    是那一个属性呢
      

  10.   

    RasGetEntryProperties得到的是RASENTRY,同是得可以得到一个RASDEVINFO结构。
      

  11.   

    typedef struct tagRASENTRY {
      DWORD      dwSize;
      DWORD      dwfOptions;
      //
      // Location/phone number.
      //
      DWORD      dwCountryID;
      DWORD      dwCountryCode;
      TCHAR      szAreaCode[ RAS_MaxAreaCode + 1 ];
      TCHAR      szLocalPhoneNumber[ RAS_MaxPhoneNumber + 1 ];
      DWORD      dwAlternateOffset;
      //
      // PPP/Ip
      //
      RASIPADDR  ipaddr;
      RASIPADDR  ipaddrDns;
      RASIPADDR  ipaddrDnsAlt;
      RASIPADDR  ipaddrWins;
      RASIPADDR  ipaddrWinsAlt;
      //
      // Framing
      //
      DWORD      dwFrameSize;
      DWORD      dwfNetProtocols;
      DWORD      dwFramingProtocol;
      //
      // Scripting
      //
      TCHAR      szScript[ MAX_PATH ];
      //
      // AutoDial
      //
      TCHAR      szAutodialDll[ MAX_PATH ];
      TCHAR      szAutodialFunc[ MAX_PATH ];
      //
      // Device
      //
      TCHAR      szDeviceType[ RAS_MaxDeviceType + 1 ];
      TCHAR      szDeviceName[ RAS_MaxDeviceName + 1 ];
      //
      // X.25
      //
      TCHAR      szX25PadType[ RAS_MaxPadType + 1 ];
      TCHAR      szX25Address[ RAS_MaxX25Address + 1 ];
      TCHAR      szX25Facilities[ RAS_MaxFacilities + 1 ];
      TCHAR      szX25UserData[ RAS_MaxUserData + 1 ];
      DWORD      dwChannels;
      //
      // Reserved
      //
      DWORD      dwReserved1;
      DWORD      dwReserved2;
    #if (WINVER >= 0x401)
      //
      // Multilink and BAP
      //
      DWORD      dwSubEntries;
      DWORD      dwDialMode;
      DWORD      dwDialExtraPercent;
      DWORD      dwDialExtraSampleSeconds;
      DWORD      dwHangUpExtraPercent;
      DWORD      dwHangUpExtraSampleSeconds;
      //
      // Idle time out
      //
      DWORD      dwIdleDisconnectSeconds;
    #endif
    #if (WINVER >= 0x500)
      DWORD      dwType;
      DWORD      dwEncryptionType;
      DWORD      dwCustomAuthKey;
      GUID       guidId;
       
      TCHAR      szCustomDialDll[MAX_PATH]; 
      DWORD      dwVpnStrategy; 
    #endif
    #if (WINVER >= 0x501)
      DWORD      dwfOptions2;
      DWORD      dwfOptions3;
      TCHAR      szDnsSuffix[RAS_MaxDnsSuffix];
      DWORD      dwTcpWindowSize;
      TCHAR      szPrerequisitePbk[MAX_PATH];
      TCHAR      szPrerequisiteEntry[RAS_MaxEntryName + 1];
      DWORD      dwRedialCount;
      DWORD      dwRedialPause;
    #endif
    } RASENTRY;
      

  12.   

    我的程序大概也是这样写的
    只是RasGetEntryProperties()后。。我打印了所有的属性出来
    不见有键值什么存在
      

  13.   

    DentistryDoctor(牙科医生)
    我明白。。我已经把RASENTRY翻了好几遍了。。
    如果你知道怎么取得。。请直接告诉我怎么取的
      

  14.   

    我晕死了。。我要的是这个连接在注册表里面的键值。。
    {D773CC64-1090-4FC0-A52B-4F71783AC3C1}
    如果拨号连接已经连上网络。。可以用GetAdaptersInfo得到这个键值
    我现在要问的是在没连接上网络前。。有什么方法得到。。
      

  15.   

    注册表中的HKEY_CURRENTUSER\Software\Microsoft\RAS Phonebook可能是你想要的,看看!
      

  16.   

    你说的这个我也找到了:
    http://www.codeguru.com/Cpp/I-N/network/dial-upnetworking/article.php/c2463/
      

  17.   

    不是。。
    在注册表里面
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\
    里面存在了电脑里面所有的网络连接
    每个连接都有这样的键值 
    {D773CC64-1090-4FC0-A52B-4F71783AC3C1}
    当然拨号连接也在里面
    我现在要知道的是根据拨号连接的属性怎么知道他是那个键值 。。
    因为里面存在了很多连接。。
      

  18.   

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RemoteAccess\Interfaces下,包含所有网络网络连接!!!
      

  19.   

    它有个Type值Type=3表示拔号连接!
      

  20.   

    其type也为3呀,枚举下注册表下的所有呀。
      

  21.   

    如果有两个拨号连接
    A的名字叫163..
    b的名字叫169
    我在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RemoteAccess\Interfaces
    里面怎么判断那个是163的。。那个是169的
      

  22.   

    在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\{...}下有Parameters键
      

  23.   

    你说的
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\{...}

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RemoteAccess\Interfaces
    并没有包括所有的网络连接
    所有的是在
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\
    里面。。
    我现在用的是ADSL拨号连接。。
    在你说的里面是没有的。。那里面保存的是局域连接的什么。。
      

  24.   

    我这儿只有宽带虚拟拔号,信息是可用的。但我应该拔号链接应该在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RemoteAccess\Interfaces
    而HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\
    包含了所有使用TCP/IP的链接。
      

  25.   

    再结合RasEnumDevices所返回的RASDEVINFO中的szDeviceType和szDeviceName吧。
      

  26.   

    根据返回的RASDEVICEINFO中的szDeviceName
      

  27.   

    我现在两个ADSL的连接
    两个返回的szDeviceName都是WAN 微型端口(PPPOE)
    怎么区分
      

  28.   

    RASENTRY中不是还有其它很多选项吗?比如szLocalPhoneNumber,以及RASENTRYNAME结构的szEntryName等(RasEnumEntries得到RASENTRYNAME!)
      

  29.   

    可以得到IP呀,RASENTRY中不是包含了IP信息吗?(ipaddr,ipaddrDns,ipaddrDnsAlt,ipaddrWins,ipaddrWinsAlt)
      

  30.   

    我打印出RASENTRY中的ipaddr是空的Str.Format("%d==%d==%d==%d\n,
    RasEntry.ipaddr.a,RasEntry.ipaddr.b,RasEntry.ipaddr.c,RasEntry.ipaddr.d);
    MessageBox(Str);
      

  31.   

    RasGetEntryProperties()后。。
    打印出RASENTRY中的ipaddr是空的
      

  32.   

    能不能将相关的代码发给我看看。[email protected]
      

  33.   

             CString m_strPLocalPhoneNumber = "#777";
    CString m_strDeviceName = m_DeviceName;
    CString m_strDeviceType = "modem";
    DWORD m_dwFramingProtocol = RASFP_Ppp;
    DWORD m_dwfNetProtocols = RASNP_Ip/* | RASNP_Ipx | 
    DWORD m_dwfOptions = RASEO_IpHeaderCompression | RASEO_RemoteDefaultGateway | RASEO_ModemLights | RASEO_SecureLocalFiles;
            
             RASENTRY rasEntry;
        ::ZeroMemory(&rasEntry, sizeof(rasEntry));
          rasEntry.dwSize=sizeof(RASENTRY);
    strcpy(rasEntry.szLocalPhoneNumber,m_strPLocalPhoneNumber); //连接名 strcpy(rasEntry.szDeviceName,m_strDeviceName);     //设备名
    strcpy(rasEntry.szDeviceType,m_strDeviceType);              //设备类型
    rasEntry.dwFramingProtocol = m_dwFramingProtocol;
    rasEntry.dwfNetProtocols = m_dwfNetProtocols;
    rasEntry.dwfOptions = m_dwfOptions;
    CString tempStr = m_EntryName;

    DWORD dwRt = RasSetEntryProperties(NULL, (char*)lpszEntry, &rasEntry, sizeof(rasEntry), NULL, 0);
      

  34.   

    这是RasSetEntryProperties,RasGetEntryProperties前后那段代码?
      

  35.   

    DentistryDoctor(牙科医生)
    可以上QQ吗
      

  36.   

    284867157
    MSN:[email protected]