我正在尝试提出一种以编程方式启用/禁用网卡的解决方案——我已经进行了大量研究,但在 XP 和 Vista 环境中似乎没有什么是可行的解决方案。我在说的是,如果您进入控制面板“网络连接”,右键单击一个并选择启用或禁用。理想情况下,我想使用一个库,但如果情况变得更糟,我想我可以调用一个命令行应用程序,但这绝对是最坏的情况。这是我迄今为止尝试过的以及他们失败的地方/原因:
这个以前的帖子:
列出了几个方法 - 第一个是使用 netsh,这似乎与使用 IPHelper 函数 SetIfEntry() 相同。问题在于它将接口设置为以管理方式启用或禁用,而不是正常的启用/禁用,因此它实际上并没有关闭 NIC。
提出的另一个解决方案是使用 WMI,特别是 Win32_NetworkAdapter 类,它有一个 Enable 和 Disable 方法:
http://msdn.microsoft.com/en-us/library/aa394216(VS.85).aspx
很棒吧?在 Vista 中工作正常,这些方法在普通的 XP 安装中不存在......
另一个建议是使用真正使用 SetupAPI 的 DevCon,特别是带有 DICS_ENABLE 的 SetupDiSetClassInstallParams()。在这个精彩的课程上花费了无数小时,并尝试在全局级别以及特定配置级别(以及每个组合)禁用/启用设备后,它也不能始终如一地工作 - 有时工作正常,但其他时候在设备管理器中禁用设备,但仍将其留在网络连接中并运行。
然后我尝试使用 INetConnection 接口,特别是 INetConnection->Connect/Disconnect:
http://msdn.microsoft.com/en-us/library/aa365084(VS.85).aspx
但是我永远无法让这对我的 Vista 或 XP 测试盒上的连接产生任何影响。
最后,我找到了这个名为 ToggleNic 的 C# 脚本:
http://channel9.msdn.com/playground/Sandbox/154712/
看起来它以某种方式通过 Shell 以有效地导致右键单击行为。限制(至少是这个实现)是它在非英语系统上不起作用(未经修改),我需要我来使用它。公平地说,这个解决方案看起来是最可行的,但我对 C# 的熟悉程度很低,而且我找不到它使用的 API 是否在 C++ 中可用。
任何帮助或见解将不胜感激 - 或有关如何完成切换脚本在 C++ 中的作用的想法。谢谢!