C#获取ADSL所有宽带连接名称

本文介绍了两种获取ADSL连接名称的方法:一是通过注册表,但存在兼容性问题;二是使用API,兼容性更好。提供了具体的C#代码实现,包括定义结构体接收条目名称及调用RasEnumEntries函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.通过注册表获取,缺点,兼容性差

1 //RegistryKey userKey = Registry.CurrentUser;
2 //RegistryKey key = userKey.OpenSubKey(@"RemoteAccess\Profile");
3 //string[] keysList = key.GetSubKeyNames();//获取当前创建的adsl宽带列表


2.通过api获取,兼容性比上面好

#region 获取adsl所有宽带连接名称

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct RasEntryName      //define the struct to receive the entry name
{
    public int dwSize;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256 + 1)]
    public string szEntryName;
    #if WINVER5
     public int dwFlags;
     [MarshalAs(UnmanagedType.ByValTStr,SizeConst=260+1)]
     public string szPhonebookPath;
    #endif
}

[DllImport("rasapi32.dll", CharSet = CharSet.Auto)]

public extern static uint RasEnumEntries(
    string reserved,              // reserved, must be NULL
    string lpszPhonebook,         // pointer to full path and file name of phone-book file
    [In, Out]RasEntryName[] lprasentryname, // buffer to receive phone-book entries
    ref int lpcb,                  // size in bytes of buffer
    out int lpcEntries             // number of entries written to buffer
);

public static List<string> GetAllAdslName()
{
    List<string> list = new List<string>();
    int lpNames = 1;
    int entryNameSize = 0;
    int lpSize = 0;
    RasEntryName[] names = null;
    entryNameSize = Marshal.SizeOf(typeof(RasEntryName));
    lpSize = lpNames * entryNameSize;
    names = new RasEntryName[lpNames];
    names[0].dwSize = entryNameSize;
    uint retval = RasEnumEntries(null, null, names, ref lpSize, out lpNames);

    //if we have more than one connection, we need to do it again
    if (lpNames > 1)
    {
        names = new RasEntryName[lpNames];
        for (int i = 0; i < names.Length; i++)
        {
            names[i].dwSize = entryNameSize;
        }
        retval = RasEnumEntries(null, null, names, ref lpSize, out lpNames);
    }

    if (lpNames > 0)
    {
        for (int i = 0; i < names.Length; i++)
        {
            list.Add(names[i].szEntryName);
        }
    }
    return list;
}

#endregion
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值