CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

哪位老大有C#的禁用网卡和启用网卡的程序?100相送。

楼主argo_lzq(李生)2005-12-01 09:36:42 在 .NET技术 / C# 提问

我找到了C++的程序,可惜水平太次,不会转成C#的,请各位帮忙,分不够再加.  
   
  如何编程实现启用禁用网卡    
   
  演示如何编程实现启用禁用网卡  
  Mady   By   ZwelL  
  2004.7.29  
  zwell@sohu.com  
   
  #include   windows.h  
  #include   setupapi.h  
  #include   tchar.h  
  #include   stdio.h  
  #pragma   comment(lib,ws2_32.lib)  
  #pragma   comment(lib,setupapi.lib)  
   
  BOOL   DisableNetInterface(bool   bStatus)  
  {  
          IN   LPTSTR   HardwareId   ;  
          硬件ComponentId,注册表地址:systemcurrentcontrolsetclass{4D36E972-E325-11CE-BFC1-08002BE10318}0000  
           
          HardwareId=PCIVEN_10EC&DEV_8139&SUBSYS_813910EC   ;  
           
          DWORD   NewState   ;  
           
          if(bStatus)  
          {  
                  NewState=DICS_DISABLE   ;  
                  禁用  
          }  
          else    
          {  
                  NewState=DICS_ENABLE   ;  
                  启用  
          }  
           
          调用ddk函数,来禁用网卡  
           
          DWORD   i,err   ;  
          BOOL   Found=false   ;  
           
          HDEVINFO   hDevInfo   ;  
          SP_DEVINFO_DATA   spDevInfoData   ;  
           
          访问系统的硬件库  
          hDevInfo=SetupDiGetClassDevs(NULL,PCI,NULL,DIGCF_ALLCLASSESDIGCF_PRESENT);  
          if(hDevInfo==INVALID_HANDLE_VALUE)  
          {  
                  printf(访问系统硬件出错!);  
                  return   false   ;  
          }  
           
          枚举硬件,获得需要的接口  
          spDevInfoData.cbSize=sizeof(SP_DEVINFO_DATA);  
          for(i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&spDevInfoData);i++)  
          {  
                  DWORD   DataT   ;  
                  LPTSTR   p,buffer=NULL   ;  
                  DWORD   buffersize=0   ;  
                   
                  获得硬件的属性值  
                  while(!SetupDiGetDeviceRegistryProperty(  
          hDevInfo,  
          &spDevInfoData,  
          SPDRP_HARDWAREID,  
          &DataT,  
          (PBYTE)buffer,  
          buffersize,  
          &buffersize))  
                  {  
                          if(GetLastError()==ERROR_INVALID_DATA)  
                          {  
                                  不存在HardwareID.   Continue.  
                                  break   ;  
                          }  
                          else   if(GetLastError()==ERROR_INSUFFICIENT_BUFFER)  
                          {  
                                  buffer   size不对.  
                                  if(buffer)  
                                  LocalFree(buffer);  
                                  buffer=(char)LocalAlloc(LPTR,buffersize);  
                          }  
                          else    
                          {  
                                  未知错误  
                                  goto   cleanup_DeviceInfo   ;  
                          }  
                  }  
                   
                  if(GetLastError()==ERROR_INVALID_DATA)  
                  continue   ;  
                   
                  比较,找到和网卡ID相同的项  
                  for(p=buffer;p&&(p&buffer[buffersize]);p+=lstrlen(p)+sizeof(TCHAR))  
                  {  
                           
                          if(!_tcscmp(HardwareId,p))  
                          {  
                                  找到网卡  
                                  Found=TRUE   ;  
                                  break   ;  
                          }  
                  }  
                   
                  if(buffer)  
                  LocalFree(buffer);  
                   
                  如果相等  
                  if(Found)  
                  {  
                          禁用该设备  
                           
                          SP_PROPCHANGE_PARAMS   spPropChangeParams   ;  
                           
                          spPropChangeParams.ClassInstallHeader.cbSize=sizeof(SP_CLASSINSTALL_HEADER);  
                          spPropChangeParams.ClassInstallHeader.InstallFunction=DIF_PROPERTYCHANGE   ;  
                          spPropChangeParams.Scope=DICS_FLAG_GLOBAL   ;  
                          spPropChangeParams.StateChange=NewState   ;  
                          禁用:DICS_DISABLE,DICS_ENABLE启用  
                           
                           
                          if(!SetupDiSetClassInstallParams(hDevInfo,&spDevInfoData,(SP_CLASSINSTALL_HEADER)&spPropChangeParams,sizeof(spPropChangeParams)))  
                          {  
                                  DWORD   errorcode=GetLastError();  
                          }  
                           
                          if(!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,hDevInfo,&spDevInfoData))  
                          {  
                                  DWORD   errorcode=GetLastError();  
                          }  
                           
                          switch(NewState)  
                          {  
                                  case   DICS_DISABLE    
            printf(成功禁用网络!);  
                                  break   ;  
                                  case   DICS_ENABLE    
            printf(成功启用网络!);  
                                  break   ;  
                          }  
                           
                          break   ;  
                  }  
                   
          }  
           
          退出时,清理工作环境  
          cleanup_DeviceInfo    
          err=GetLastError();  
          SetupDiDestroyDeviceInfoList(hDevInfo);  
          SetLastError(err);  
           
          return   true   ;  
  }  
   
  void   usage(char   exefile)  
  {  
  printf(Usage%s   [-e-d]rn,   exefile);  
  printf(t-e   Enable   the   network   card.rn);  
  printf(t-d   Disable   the   network   card.rn);  
  exit(0);  
  }  
   
   
  int   main(int   argc,charargv)  
  {  
  if(argc2)  
      usage(argv[0]);  
  if(!DisableNetInterface((strstr(argv[1],-d)0TRUEFALSE)))  
      printf(对网卡操作失败!);  
          return   0;  
  }    
  问题点数:100、回复次数:14Top

1 楼hxhbluestar(贺星河)回复于 2005-12-01 10:16:38 得分 20

先看show   interface   的结果,   然后选择你要disable的interface.   注意带空格的名称需要用引号.    
   
  netsh   interface   show   interface    
   
  Admin   State   State   Type   Interface   Name    
  -------------------------------------------------------------------------    
  Enabled   Unreachable   Dedicated   Local   Area   Connection   2    
  Enabled   Unreachable   Dedicated   Local   Area   Connection    
  Enabled   Unreachable   Internal   Internal    
  Enabled   Unreachable   Loopback   Loopback    
   
  关闭  
  netsh   interface   set   interface   name="Local   Area   Connection"   admin=DISABLED  
  开启  
  netsh   interface   set   interface   name="Local   Area   Connection"   admin=ENABLE  
  如果是中文操作系统的话就name="本地连接",依此类推  
   
  C#代码如下:  
   
  Process   pro   =   new   Process();  
  pro.StartInfo.UseShellExecute   =   false;  
  pro.StartInfo.RedirectStandardError   =   true;  
  pro.StartInfo.RedirectStandardInput   =   true;  
  pro.StartInfo.RedirectStandardOutput   =   true;  
  pro.StartInfo.FileName   =   "netsh.exe";  
  pro.StartInfo.Arguments   =   "interface   set   interface   name=\"Local   Area   Connection\"   admin=Enable";  
  pro.StartInfo.CreateNoWindow   =   true;  
  pro.Start();  
   
   
  Top

2 楼hxhbluestar(贺星河)回复于 2005-12-01 10:31:05 得分 0

Sorry,我在win2003   英文版下测试通过,winxp不行,好像这个命令不支持中文Top

3 楼q_po_o(两个人)回复于 2005-12-01 10:43:49 得分 0

markTop

4 楼argo_lzq(李生)回复于 2005-12-01 11:11:43 得分 0

我把“本地连接”改成了英文,也不行,报错  
   
  没有指定一个或多个关键性参数  
  此命令提供的语法不正确。请查看帮助以获取正确的语法信息。  
   
  用法   set   interface   [name   =   ]   IfName  
                          [   [admin   =   ]   ENABLED|DISABLED  
                              [connect   =   ]   CONNECTED|DISCONNECTED  
                              [newname   =   ]   NewName   ]  
   
              设置接口参数。  
   
              IfName     -   接口名称  
              admin       -   接口是否被启用   (仅用于非   LAN)。  
              connect   -   是否连接接口   (仅用于非   LAN)。  
              newname   -   接口的新名称   (仅用于非   LAN)。  
   
              注意:  
              -   除名称外,还必须至少指定一个选项。  
              -   如果   connect   =   CONNECTED   被指定,那么接口被自动  
                  启用,甚至在   admin   =   DISABLED   选项被指定时也是如  
                  此。Top

5 楼argo_lzq(李生)回复于 2005-12-01 11:12:54 得分 0

现在命令行是:  
  netsh   interface   set   interface   name="localnet"   admin=DISABLEDTop

6 楼myblind(敲键盘的农民)回复于 2005-12-01 13:48:21 得分 5

高手啊Top

7 楼argo_lzq(李生)回复于 2005-12-01 15:18:16 得分 0

可惜,还是没有解决,如果分不够,再加也行啊,Top

8 楼s5689412(华君)回复于 2005-12-01 15:34:50 得分 20

From   forums.microsoft.com  
  http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=114198&SiteID=1  
   
  MSDN论坛上也有人问到类似的问题,下面的这两个链接帮助他解决了问题,也希望能帮助你。  
   
  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/wmi_tasks__networking.asp  
  http://www.codeproject.com/csharp/wmimadeeasy.asp  
  Top

9 楼argo_lzq(李生)回复于 2005-12-02 16:50:22 得分 0

有点思路,但是还没有解决。Top

10 楼argo_lzq(李生)回复于 2005-12-06 12:57:56 得分 0

哪位高手可否帮忙看看这段代码,为何实现不了?  
   
  public   void   SetNetCard(bool   sEnable)  
  {  
  ManagementClass   objMC   =   new   ManagementClass("Win32_NetworkAdapterConfiguration");  
  ManagementObjectCollection   objMOC   =   objMC.GetInstances();  
   
  foreach(ManagementObject   objMO   in   objMOC)  
  {  
  try  
  {  
  ManagementBaseObject   objSetIP   =   null;  
  ManagementBaseObject   objNewGate   =   null;  
  objNewGate   =   objMO.GetMethodParameters("IPEnabled");  
   
  objNewGate["IPEnabled"]   =   new   bool[]   {sEnable};  
  objSetIP   =   objMO.InvokeMethod("IPEnabled",objNewGate,null);  
   
  }  
  catch(Exception   ex)  
  {  
  Console.WriteLine("Unable   to   Set   IP   :   "   +   ex.Message);  
   
  }  
   
  }  
  }Top

11 楼huanggj(新人)回复于 2005-12-06 16:28:38 得分 5

学习  
  Top

12 楼sxlfybb(房客)回复于 2005-12-06 16:56:28 得分 0

markTop

13 楼jinjazz(近身剪)回复于 2005-12-06 17:14:50 得分 50

//添加引用-COM-浏览-C:\WINDOWS\system32\shell32.dll-添加  
  private   bool   SetNetworkAdapter(bool   status)  
  {  
  const   string   discVerb   =   "禁用(&B)";  
  const   string   connVerb   =   "启用(&A)";  
  const   string   networkConnection   =   "网络连接";  
  string   sVerb;  
   
  if   (status)   sVerb   =   connVerb;  
  else   sVerb   =   discVerb;  
   
  Shell32.Shell   sh   =   new   Shell32.Shell();  
  Shell32.Folder   folder;  
   
  folder   =   sh.NameSpace(3);       //Shell32.ShellSpecialFolderConstants.ssfCONTROLS  
  try  
  {  
  foreach   (Shell32.FolderItem   myItem   in   folder.Items())  
  {  
  if   (myItem.Name   ==   networkConnection)  
  {  
  Shell32.Folder   fd   =   (Shell32.Folder)myItem.GetFolder;  
  foreach   (Shell32.FolderItem   fi   in   fd.Items())  
  {  
  if   (fi.Name.IndexOf("VMware")   >   -1)  
  {  
  foreach   (Shell32.FolderItemVerb   Fib   in   fi.Verbs())  
  {  
  //   listBox1.Items.Add(Fib.Name);  
  if   (Fib.Name   ==   sVerb)    
  {  
  Fib.DoIt();  
  break;  
  }  
  }  
  }  
  }  
  }  
  }  
  }  
  catch   (Exception   e)  
  {  
  //sbpnl2.Text   =   e.Message;  
  MessageBox.Show(e.Message);  
  return   false;  
  }  
  return   true;  
  }Top

14 楼argo_lzq(李生)回复于 2005-12-06 17:39:28 得分 0

在XP中测试过,还是不行,不过非常感谢Top

相关问题

  • 如何用C#禁用/启用网卡(不用c++编译的dll)
  • 高分求在98下禁用,启用网卡的代码
  • 请赐教:怎样才能启用、禁用网卡?
  • 程序启用和禁用网卡(在线等,谢谢各位)
  • 如何直接禁用和启用网卡
  • 如何编程实现禁用和启用网卡
  • 请教修改网卡的网关和dns为空的问题 、禁用和再启用网卡问题
  • 写一个批处理文件 使网卡禁用然后过段时间自动再启用呢?
  • 命令行禁用网卡
  • 任何启用禁用设备(modem)

关键词

  • c#
  • 接口
  • shell
  • 硬件
  • 解决
  • msdn
  • 网卡
  • 禁用
  • 启用
  • objnewgate

得分解答快速导航

  • 帖主:argo_lzq
  • hxhbluestar
  • myblind
  • s5689412
  • huanggj
  • jinjazz

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo