c#中怎么禁用和开启无线网卡?

ztwz 2008-07-25 03:55:29
其实禁用网卡我已经搞定了,但就是启用不了禁用的无线网卡-_-b,但是普通的物理网卡禁用和启用都没问题!
不能启用无线网卡的原因是无线网卡禁用和开启时的Name不一样.开启的时候我的无线网卡Name是
Intel(R) PRO/Wireless 3945ABG Network Connection #2
但禁用后得到的名字是Intel(R) PRO/Wireless 3945ABG Network Connection
但我在控制面板->网络连接中查看我的无线不论是禁用还是启用时都是Intel(R) PRO/Wireless 3945ABG Network Connection #2名字.
倒底要怎么得到正确的网卡连接名?
下面的代码是我得到网卡的连接名,

string manage = "SELECT * From Win32_NetworkAdapter";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(manage);
ManagementObjectCollection collection = searcher.Get();
List<string> netWorkList = new List<string>();
foreach (ManagementObject obj in collection)
{
netWorkList.Add(obj["Name"].ToString());

}
this.cmbNetWork.DataSource = netWorkList;
...全文
3689 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanjing5 2012-08-02
  • 打赏
  • 举报
回复
顶,研究中
xiaoli100_1980 2011-02-10
  • 打赏
  • 举报
回复
ddd
蝶恋花雨 2008-07-25
  • 打赏
  • 举报
回复
菜鸟的帖子我来顶顶
ztwz 2008-07-25
  • 打赏
  • 举报
回复
我用的是本本.
ztwz 2008-07-25
  • 打赏
  • 举报
回复

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Management;
using System.Collections;

namespace NetWorkControl
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
NetWorkList();
}

/// <summary>
/// 网卡列表
/// </summary>
public void NetWorkList()
{
string manage = "SELECT * From Win32_NetworkAdapter";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(manage);
ManagementObjectCollection collection = searcher.Get();
List<string> netWorkList = new List<string>();

foreach (ManagementObject obj in collection)
{
netWorkList.Add(obj["Name"].ToString());

}
this.cmbNetWork.DataSource = netWorkList;

}

/// <summary>
/// 禁用网卡
/// </summary>5
/// <param name="netWorkName">网卡名</param>
/// <returns></returns>
public bool DisableNetWork(ManagementObject network)
{
try
{
network.InvokeMethod("Disable", null);
return true;
}
catch
{
return false;
}
}

/// <summary>
/// 启用网卡
/// </summary>
/// <param name="netWorkName">网卡名</param>
/// <returns></returns>
public bool EnableNetWork(ManagementObject network)
{
try
{
network.InvokeMethod("Enable", null );
return true;
}
catch
{
return false;
}

}

/// <summary>
/// 网卡状态
/// </summary>
/// <param name="netWorkName">网卡名</param>
/// <returns></returns>
public bool NetWorkState(string netWorkName)
{
string netState = "SELECT * From Win32_NetworkAdapter";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(netState);
ManagementObjectCollection collection = searcher.Get();
foreach (ManagementObject manage in collection)
{
if (manage["Name"].ToString() == netWorkName )
{
return true;
}
}
return false;
}

/// <summary>
/// 得到指定网卡
/// </summary>
/// <param name="networkname">网卡名字</param>
/// <returns></returns>
public ManagementObject NetWork(string networkname)
{
string netState = "SELECT * From Win32_NetworkAdapter";

ManagementObjectSearcher searcher = new ManagementObjectSearcher(netState);
ManagementObjectCollection collection = searcher.Get();

foreach (ManagementObject manage in collection)
{
if (manage["Name"].ToString() == networkname)
{
return manage;
}
}


return null;
}

private void btnStart_Click(object sender, EventArgs e)
{
if (NetWorkState(this.cmbNetWork.SelectedValue.ToString()))
{
if (!EnableNetWork(NetWork(this.cmbNetWork.SelectedValue.ToString())))
{
MessageBox.Show("开启网卡失败!");
}
else
{
MessageBox.Show("开启网卡成功!");
}
}
else
{
MessageBox.Show("网卡己开启!");
}

NetWorkList();
}

private void btnStop_Click(object sender, EventArgs e)
{

if (NetWorkState(this.cmbNetWork.SelectedValue.ToString()))
{
if (!DisableNetWork(NetWork(this.cmbNetWork.SelectedValue.ToString())))
{
MessageBox.Show("禁用网卡失败!");
}
else
{
MessageBox.Show("禁用网卡成功!");
}
}
else
{
MessageBox.Show("网卡己禁用!");
}

NetWorkList();
}

}
}

wdgphc 2008-07-25
  • 打赏
  • 举报
回复
首先,我不知道你是笔记本还是台机,如果是台机(或者网卡是PCMCIA).有可能是这样的,你在PCI槽中插上网卡,安装好驱动后,由于其他原因拔下过此卡后插在另一个槽上,或者你从其他机器上Ghost过来的系统后,系统又认到一个新网卡,这样,系统就记住了你网卡的2个名字Intel(R) PRO/Wireless 3945ABG Network Connection 和 Intel(R) PRO/Wireless 3945ABG Network Connection #2, 你用代码写的找到的可能是你第一个网卡的名字,禁用后第二个生效了,你的名字就不对了.

我一直用
ManagementClass mc = new ManagementClass("Win32_NetworkAdapter");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
//循环查找用 mo["NetConnectionStatus"] , (string)mo["Caption"] 和 (string)mo["NetConnectionID"]来判断
}

另外,能否把禁用/启用普通网卡的有关代码给我一份,只需要查找到网卡名或连接名以后的禁/启方法即可. hbxuhb@yahoo.com.cn 交流.

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧