c# - 检测是否在 Windows 设置中选择了 "Obtain IP address automatically"

标签 c# .net winforms wmi

我制作了一个可以使用 C# 检测、设置和切换 IPv4 设置的 winform 应用程序。当用户想要从 DHCP 自动获取 IP 时,我调用 Automatic_IP():

自动 IP:

private void Automatic_IP()
{
    ManagementClass mctemp = new ManagementClass("Win32_NetworkAdapterConfiguration");
    ManagementObjectCollection moctemp = mctemp.GetInstances();

    foreach (ManagementObject motemp in moctemp)
    {
        if (motemp["Caption"].Equals(_wifi)) //_wifi is the target chipset
        {
            motemp.InvokeMethod("EnableDHCP", null);
            break;
        }
    }

    MessageBox.Show("IP successfully set automatically.","Done!",MessageBoxButtons.OK,MessageBoxIcon.Information);

    Getip(); //Gets the current IP address, subnet, DNS etc
    Update_current_data(); //Updates the current IP address, subnets etc into a labels

}

并且在 Getip 方法中,我提取了当前的 IP 地址、子网、网关和 DNS,而不管所有这些都可以手动设置或由 DHCP 自动分配并更新这些值使用 Update_current_data() 方法的标签。

获取提示:

public bool Getip()
{
    ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
    ManagementObjectCollection moc = mc.GetInstances();

    foreach (ManagementObject mo in moc)
    {
        if(!chipset_selector.Items.Contains(mo["Caption"]))
            chipset_selector.Items.Add(mo["Caption"]);

        if (mo["Caption"].Equals(_wifi))
        {
            ipadd = ((string[])mo["IPAddress"])[0];
            subnet = ((string[])mo["IPSubnet"])[0];
            gateway = ((string[])mo["DefaultIPGateway"])[0];
            dns = ((string[])mo["DNSServerSearchOrder"])[0];
            break;
        }

    }
}

但问题是我无法检测当前 IP 是手动设置还是自动分配,尽管我可以从 Automatic_IP 方法中选择 select automatically from DHCPManagementObject.InvokeMethod("EnableDHCP", null); 可以轻松将其设置为自动获取 IP 地址 但我无法检查 IP 是自动设置还是手动设置应用程序首先启动。

我做了一些挖掘,发现类似的帖子,如 this .尽管存在非常相似的帖子 here但这是关于 DNS 而不是 IP 设置。

基本上我想找到选择了哪个选项:

Automatic

最佳答案

ManagementObject 类有一堆 properties您可以使用,对于网络适配器,其中之一称为 DHCPEnabled。这会告诉您网络接口(interface)是否正在自动获取 IP 地址。例如:

var isDHCPEnabled = (bool)motemp.Properties["DHCPEnabled"].Value;

关于c# - 检测是否在 Windows 设置中选择了 "Obtain IP address automatically",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50453778/

相关文章:

c# - Object == equality 失败,但是 .Equals 成功。这有意义吗?

c# - 我可以通过 .Net 获取与已安装打印机关联的图标吗?

c# - ComboBox 像一个按钮?

c# - 如何阻止引发 datagridview 中的双击事件?

c# - Azure云服务 "The remote server returned an error: (413) Request Entity Too Large."

c# - 在事务中执行 SQL 更新批处理

c# - 在 C# 中使用函数

c# - 作为系统运行的Windows服务无法访问C :\users\

c# - 转换日期时间?串入 dd-MM-yyyy

c# - 为什么我的绑定(bind)失败?