我找到了C++的程序,可惜水平太次,不会转成C#的,请各位帮忙,分不够再加.如何编程实现启用禁用网卡 演示如何编程实现启用禁用网卡
Mady By ZwelL
2004.7.29
[email protected]#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;

解决方案 »

  1.   

    先看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();
      

  2.   

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

  3.   

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

  4.   

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

  5.   

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

  6.   

    哪位高手可否帮忙看看这段代码,为何实现不了?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); } }
    }
      

  7.   

    //添加引用-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;
    }