通过程序启用/禁用 网络连接(提供4种思路 你值得拥有)

一。场景回顾:

写这篇文章的主要原因是这些天,因为客户那边的需求,而更改的一个需求。在这过程中,翻阅了很多的资料,发现了几种方法,所以把一些我知道的方法贴出来,以飨读者。希望你们喜欢。

二。解决方案

2.1 通过命令行方式----netsh

说到这个,顺便给一个查看所以网络连接的命令:

netsh int show int -----注:int 也就是interface的意思,可以写全字或者缩写,都ok。

你看,上面罗列了所有我本地的网络连接。好的,其实我们在程序中 也是用这个语法,只是我们需要加一个set关键字。语法是:

netsh int set int name=“网络连接名” admin=disable/enable  connect=disconnected/connected newname=新的名字

对上面的语法,我们只需要关注name和admin就可以了,后面的2个不能用在非lan中。前2个很好理解,name,就是你网络连接的名字,比如Local Area Conenction;admin 指的是你要关闭或者重启你的网络连接。那在程序中怎么实现呢?

代码如下

          string args = "int set int name=‘本地网络连接’ admin=disable";
                ProcessStartInfo start = new ProcessStartInfo("netsh", args);
                start.UseShellExecute = false;
                start.CreateNoWindow = true;
                start.Verb = "runas";
                Process p = System.Diagnostics.Process.Start(start);

这样,就把本地网络连接这个给disable。

注:对name属性而言,如果有空格一定要用引号,如果没有空格则可不用。比如这里你也可以 name=本地网络连接。同理,后面的admin也可有可无引号。

顺便提一下,如果你想获取输出的一些数据,ok 你可以这样做,比如我想获取所有的网络连接。

List<string> lists = new List<string>();
            string args = "int show interface";
            ProcessStartInfo start = new ProcessStartInfo("netsh", args);
            start.UseShellExecute = false;
            start.CreateNoWindow = true;
            start.Verb = "runas";
            start.RedirectStandardOutput = true;
            Process p = Process.Start(start);

            StreamReader reader = p.StandardOutput;

            while (!reader.EndOfStream)
            {
                lists.Add(reader.ReadLine());
            }
            return lists;

其中,start.RedirectStandardOutput = trueStreamReader reader = p.StandardOutput是关键的地方。

优点:很方便使用,容易上手。

缺点:只能在win 2000、2003、2008以及win 7中使用。

2.2 使用WMI----Win32_NetworkAdapter

对,我们这里使用微软大名鼎鼎的WMI,里面主要有Win32_NetworkAdapter MSFT_NetAdapter 前面一个已经被微软设为不建议使用了。但,我现在还是用的第一个。

至于WMI 的写法,我这边不写,这个就几个固定格式,很容易看懂,如果不懂的话,可以去度娘看看。

禁止一个Wifi

 public static bool disableWireless()
        {string manage = "SELECT * From Win32_NetworkAdapterConfiguration where IPEnabled=true";//意思是说,如果当前的有IP,那么就是可以使用的网络地址。
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(manage);
            ManagementObjectCollection collection = searcher.Get();
            List<string> netWorkList = new List<string>();
            foreach (ManagementObject obj in collection)
            {
                if (obj["Description"].ToString().ToUpper().Contains("Wireless Network Connection"))
                {
                    obj.InvokeMethod("disable", null);//这边有一个调用disable 这个方法就好了。disable方法不需要我们自己写,可以认为是一个委托吧。
                }
            }
            return true;
        }

当然,很简单,开启也很容易:

 public static bool enableWireless()
        {
            string manage = "SELECT * From Win32_NetworkAdapter Where NetEnabled = false";
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(manage);
            ManagementObjectCollection collection = searcher.Get();
            List<string> netWorkList = new List<string>();
            foreach (ManagementObject obj in collection)
            {
                if (obj["NetConnectionID"].ToString().ToUpper().Contains("AA"))
                {
                    obj.InvokeMethod("Enable", null);
                }
            }

        }

这2段code 都很简单,关键是要理解WMI的用法呢。

优点:使用很方便,只需要查查WMI 中类的参数就好了

缺点:目前这个方法只能使用在WIN 7中,下午改了很久都没能改成在XP 中运行。

2.3 使用微软的COM---shell32.dll

读过我前一篇文章的朋友应该知道,使用VS 自带的dll类库是有问题。我们需要重新下载新的dll文件。如果需要的点击下面的地址:

猛击Shell32.dll 下载地址

核心代码如下:

var shell = (Shell32.IShellDispatch4)new Shell32.ShellClass();//定义
                    Shell32.Folder folder = shell.NameSpace(49);//在控制面板中,获取网络连接这个item

                    foreach (Shell32.FolderItem myItem in folder.Items())//遍历网络连接里的所有项,也就是我们看到网络里面的item,比如本地连接,无线网络连接。
                    {if (myItem.Name.Contains("Wireless Network") || myItem.Name.Contains("无线网络"))//查找相关的网络
                        {
                            foreach (Shell32.FolderItemVerb Fib in myItem.Verbs())
                            {
                                if (Fib.Name == “禁用(&B)”)
                                {
                                    Fib.DoIt();
                                }
                            }
                        }
                    }

上面的myItem.Verbs() 指的是获取所有的网络的状态。比如以下面:

这里有一个小小的bug是,如果这里的的禁用可能根据不同的OS 具有不同的结果,英文版的是 dis&able.所有这里需要小心点。应该还有更智能的方法,但时间太短了,我没有仔细的研究。

优点:适合XP 和Win7系统

缺点:不容易找到。

2.4 使用devcon工具---devcon.exe

注意,这个是无需安装的。因为时间关系,没对这个做太多研究。如果你们喜欢的可以研究一下,这个听说专门是为弥补XP 不能使用netsh来使用的。

猛击下载devcon工具。

使用方法(使用代码控制在后面)

1.cmd 导航到 下载后的页面

2.打开cmd ,输入devcon,如果有下面的devcon usage 那说明就可以开始了。

3.找出所有的本地网卡。

Devcon  findall  *

会列出很多很多的东西,你使用下面的命令进行学习。因为我没做太多的研究对这个,所有有需要的读者 可以自行研究咯。

devcon help

4.程序中使用方法

和第一种方法是一样的,只是第一个参数,你需要些的是devcon的路劲而已。

  string args = "findall *";
            ProcessStartInfo start = new ProcessStartInfo("C:\Documents and Settings\Administrator\Desktop\1.10\TestWifi\i386\devcon.exe", args);
            start.UseShellExecute = false;
            start.CreateNoWindow = true;
            start.Verb = "runas";
            start.RedirectStandardOutput = true;
            Process p = Process.Start(start);

 Ok,这样就能输出,有许多功能你们自己研究咯。

结束语

希望对大家有帮助,欢迎提问。

大家 晚安。


<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<think>我们正在解决Windows 11有线网络连接不稳定或自动断开的问题。根据引用[1][2]提供思路,我们可以采取以下步骤: 1. 更新有线网卡驱动 2. 禁用并重新启用网卡驱动 3. 取消电源管理中的“允许计算机关闭此设备以节约电源”选项 4. 调整网卡工作模式(如速度和双工) 5. 修改注册表(引用[2]中提到的方法) 6. 其他可能的系统设置调整 同时,引用[4]提到连接有线网络后无线网络断开的问题,虽然问题不同,但其中关于BIOS设置的调整(关闭Wireless Auto Connection)也值得参考,因为有时BIOS设置可能影响网络稳定性。但我们的重点是有线网络,所以先不考虑无线部分。 另外,引用[5]提到WSL2导致网络断开的问题,但用户没有提到使用WSL2,所以暂时不考虑。 现在,我们按照步骤详细说明解决方法: 步骤1:更新有线网卡驱动 - 右键点击“开始”按钮,选择“设备管理器”。 - 展开“网络适配器”,找到你的有线网卡(通常包含“Ethernet”字样)。 - 右键点击网卡,选择“更新驱动程序”。 - 选择“自动搜索更新的驱动程序软件”,按照提示完成更新。 - 如果自动更新没有找到新驱动,可以到电脑或主板制造商的官网下载最新驱动手动安装。 步骤2:禁用并重新启用网卡驱动 - 在设备管理器中,右键点击有线网卡,选择“禁用设备”。 - 等待几秒钟,然后再次右键点击,选择“启用设备”。 步骤3:取消电源管理选项 - 在设备管理器中,右键点击有线网卡,选择“属性”。 - 切换到“电源管理”选项卡。 - 取消勾选“允许计算机关闭此设备以节约电源”。 - 点击“确定”。 步骤4:调整网卡工作模式 - 在网卡属性窗口中,切换到“高级”选项卡。 - 在属性列表中找到“速度和双工”(Speed & Duplex)或类似选项。 - 将值从“自动协商”改为“100Mbps全双工”或“1.0Gbps全双工”(根据你的网络环境选择,通常先尝试1.0Gbps全双工)。 - 点击“确定”。注意:如果更改后网络无法连接,请改回“自动协商”。 步骤5:修改注册表(引用[2]中的方法) - 注意:修改注册表有风险,请先备份注册表(文件->导出)或创建系统还原点。 - 按Win+R,输入`regedit`,回车打开注册表编辑器。 - 导航到:`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{网卡接口GUID}` 说明:{网卡接口GUID}是每个网卡对应的唯一标识符,你可以在多个子项中查找,找到包含你当前IP地址的子项。 - 在右侧空白处右键,新建一个`DWORD (32位)值`,命名为`TcpAckFrequency`,并将其值设置为`1`。 - 再新建一个`DWORD (32位)值`,命名为`TCPNoDelay`,值设置为`1`。 - 重启电脑。 步骤6:检查网络重置 - 如果以上步骤无效,尝试重置网络: 打开“设置”->“网络和Internet”->“高级网络设置”->“网络重置”,点击“立即重置”,然后重启电脑。 步骤7:检查BIOS设置(参考引用[4]) - 重启电脑,进入BIOS(通常按Del、F2或F10键,具体取决于主板)。 - 在BIOS中查找与网络相关的设置,特别是与网卡唤醒、节能相关的选项,尝试关闭它们(例如:ErP Ready、Network Stack等)。 - 保存设置并重启。 如果问题仍然存在,可能是硬件问题(如网线、路由器端口等),请尝试更换网线或连接到不同的路由器端口。 根据引用[1][2]的经验,这些步骤通常可以解决大部分有线网络不稳定的问题。 注意:注册表修改步骤(步骤5)是引用[2]中提到的,但该引用并没有明确说明是用于Windows 11。不过,由于Windows 10和11在TCP/IP设置上相似,所以可以尝试。但请谨慎操作。 如果所有方法都无效,考虑系统还原、重装系统或联系硬件厂商。 相关问题: 1. 如何检查Windows 11中的网络驱动程序是否最新? 2. 在Windows 11中如何创建系统还原点? 3. 如何进入BIOS/UEFI设置? 4. 如何确定网卡的工作模式(速度和双工)应该设置为什么值? 5. 重置网络设置会有什么影响?</think>### Windows 11 有线网络连接不稳定/自动断开的解决方法 以下是系统性的解决步骤,结合微软官方建议和实际案例: #### 1. **更新网卡驱动** [^1][^2] - 按 `Win+X` → 选择 **设备管理器** - 展开 **网络适配器** → 右键有线网卡(如 "Realtek PCIe GbE")→ **更新驱动程序** - 选择 **自动搜索驱动程序**(或访问主板/电脑官网下载最新驱动) - 更新后重启电脑 #### 2. **关闭节能模式** [^2] - 设备管理器中右键网卡 → **属性** - 切换到 **电源管理** 选项卡 - 取消勾选 **允许计算机关闭此设备以节约电源** - 点击 **确定** 保存 #### 3. **调整网卡工作模式** [^2] - 网卡属性中切换到 **高级** 选项卡 - 在属性列表中找到 **Speed & Duplex**(速度与双工) - 将值从 "Auto Negotiation" 改为 **1.0 Gbps Full Duplex**(或尝试100Mbps) - 点击 **确定** #### 4. **禁用快速启动** [^1] - 打开 **控制面板** → **硬件和声音** → **电源选项** - 点击 **选择电源按钮的功能** - 点击 **更改当前不可用的设置** - 取消勾选 **启用快速启动** - 保存更改后重启 #### 5. **修改注册表(关键步骤)** [^2] - 按 `Win+R` 输入 `regedit` - 定位路径: ``` HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces ``` - 在子项中查找包含你当前IP地址的项 - 右侧新建 **DWORD (32位)值**: - 名称:`TcpAckFrequency` → 值设为 **1** - 名称:`TCPNoDelay` → 值设为 **1** - 重启电脑生效 #### 6. **网络重置** [^1] - 打开 **设置** → **网络和Internet** → **高级网络设置** - 点击 **网络重置** → **立即重置** - 重启后系统将重新安装网络组件 #### 7. **检查硬件问题** - 更换网线测试(建议使用Cat5e以上规格) - 尝试连接路由器不同端口 - 移除USB网络共享设备(如有)[^5] #### 8. **BIOS设置检查** [^4] - 重启电脑按 **Del/F2** 进入BIOS - 查找类似选项: - **ErP Ready** → 设为 **Disabled** - **Network Stack** → 设为 **Disabled** - 保存并退出 > ⚠️ 若问题持续,建议: > - 创建系统还原点后再尝试操作 > - 使用 `sfc /scannow` 命令修复系统文件 > - 检查路由器/光猫固件更新
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值