我正在尝试提出一种以编程方式启用/禁用网卡的解决方案 - 我已经进行了大量研究,但在 XP 和 Vista 环境中似乎没有一个可行的解决方案。我在说的是,如果您进入控制面板“网络连接”,右键单击一个并选择启用或禁用。理想情况下,我想使用一个库,但如果情况变得更糟,我想我可以调用一个命令行应用程序,但这绝对是最坏的情况。以下是我迄今为止尝试过的方法以及失败的地方/原因:
上一篇:
How to programmatically enable/disable network interfaces? (Windows XP)
列出了几个方法 - 第一个是使用 netsh,这似乎与使用 IPHelper 函数 SetIfEntry() 相同。这样做的问题是它将接口(interface)设置为管理启用或禁用,而不是正常启用/禁用,因此它实际上并没有关闭 NIC。
提出的另一个解决方案是使用 WMI,特别是 Win32_NetworkAdapter 类,它具有启用和禁用方法:
http://msdn.microsoft.com/en-us/library/aa394216(VS.85).aspx
不错吧?在 Vista 中工作正常,这些方法在普通 XP 安装中不存在...
另一个建议是使用真正使用 SetupAPI 的 DevCon,特别是带有 DICS_ENABLE 的 SetupDiSetClassInstallParams()。在这个精彩的类(class)上花费了无数小时,并尝试在全局级别以及特定配置级别(以及每个组合)禁用/启用设备后,它也不能始终如一地工作 - 有时工作正常,但其他时候在设备管理器中禁用设备,但仍将其留在网络连接中并运行。
然后我尝试使用 INetConnection 接口(interface),特别是 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++ 中的作用的想法。谢谢!
最佳答案
在更多平台和更多方法上进行测试后,我基本上已经放弃了这个功能(至少出于我的目的)。对我来说,问题是我想要在 90% 以上的情况下工作,而现实情况是,我能想到的一切都接近 70%。具有讽刺意味的是,它实际上与普通的 Windows 方法一样不稳定。对于那些仍然想走这条危险道路的人,这是我发现的:
在上述 API 直接方法中,最一致的方法是使用 SetupAPI (SetupDiSetClassInstallParams) - 我遇到的最大问题是有时它会进入需要重新启动和在那之前,任何改变都不会奏效。使用它时唯一需要注意的另一件事是设备有两个配置文件,因此在某些情况下您需要同时切换它们。 DDK 包含 devcon 工具的源代码,它准确地向您展示了如何做所有事情。这最终看起来像是最接近右键单击,但它仍然表现出一些网络连接没有的奇怪行为。这种方法似乎在大约 70% 的时间内都有效(在测试和测试系统中)。
从整体破解方法中,我发现最好的方法不是使用 ToggleNIC 所做的技术,而是使用 IShellFolder 的东西——这允许您使用与语言无关的 GetCommandString。问题是在 XP 下 GetCommandString 不返回任何东西(哦,高兴),但似乎“启用”和“禁用”的菜单 ID 是一致的(分别为 16 和 17),所以如果我未能 GetCommandString ,我只是回到菜单 ID 上。要切换,只需调用 InvokeCommand ,如果它返回一个字符串,或者如果它没有返回菜单 ID。这样做的问题是,就像正常的 Windows 方式一样,有时它不起作用,也没有给你任何关于正在发生的事情或失败原因的指示。这种方法似乎在大约 70% 的时间里也有效,但更难判断是否出现问题,而且会弹出正常的“正在启用界面...”文本。
希望这对其他人有所帮助 - 如果有人设法找到另一种适用于更多情况的方法,我很乐意听到它!
关于c++ - 以编程方式禁用/启用网络接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/860673/
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
在启用Rack::Deflater来gzip我的响应主体时偶然发现了一些奇怪的东西。也许我遗漏了一些东西,但启用此功能后,响应被压缩,但是资源的ETag在每个请求上都会发生变化。这会强制应用程序每次都响应,而不是发送304。这在没有启用Rack::Deflater的情况下有效,我已经验证页面源没有改变。我正在运行一个使用thin作为Web服务器的Rails应用程序。Gemfile.lockhttps://gist.github.com/2510816有没有什么方法可以让我从Rack中间件获得更多的输出,这样我就可以看到发生了什么?提前致谢。 最佳答案
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识