C#列出所有物理網絡適配器

xf3f 9年前發布 | 705 次閱讀 C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Management;
using System.Text;

namespace RobvanderWoude { class ListNICs { public static ArrayList nics = new ArrayList( ); public static string computer = string.Empty;

    // Use global variables, so we only need to run the WMI queries once
    public static string nsrootwmi = computer + "root\\WMI";
    public static string nsrootcimv2 = computer + "root\\CIMV2";
    public static ManagementObjectSearcher searcher1 = new ManagementObjectSearcher( nsrootwmi, "SELECT * FROM MSNdis_PhysicalMediumType" );
    public static ManagementObjectCollection wmi1 = searcher1.Get( );
    public static ManagementObjectSearcher searcher2 = new ManagementObjectSearcher( nsrootcimv2, "SELECT * FROM Win32_NetworkAdapter" );
    public static ManagementObjectCollection wmi2 = searcher2.Get( );
    public static ManagementObjectSearcher searcher3 = new ManagementObjectSearcher( nsrootwmi, "SELECT * FROM MSNdis_LinkSpeed" );
    public static ManagementObjectCollection wmi3 = searcher3.Get( );


    static int Main( string[] args )
    {
        try
        {
            bool listBluetooth = true;
            bool listWired = true;
            bool listWireless = true;


            #region Command line parsing


            // Only 2 optional argument allowed: remote computer name and/or adapter type
            if ( args.Length > 2 )
            {
                return WriteError( "Invalid command line arguments" );
            }
            if ( args.Length > 0 )
            {
                foreach ( string arg in args )
                {
                    // We'll display a 'friendly' message if help was requested
                    if ( arg.StartsWith( "/" ) || arg.StartsWith( "-" ) )
                    {
                        switch ( arg.ToUpper( ) )
                        {
                            case "/?":
                            case "-?":
                                return WriteError( string.Empty );
                            case "/B":
                            case "/BLUETOOTH":
                                if ( ( listBluetooth && listWired && listWireless ) == false )
                                {
                                    return WriteError( "Select a single adapter type only, or omit type to select all" );
                                }
                                listWired = false;
                                listWireless = false;
                                break;
                            case "/W":
                            case "/WIRED":
                                if ( ( listBluetooth && listWired && listWireless ) == false )
                                {
                                    return WriteError( "Select a single adapter type only, or omit type to select all" );
                                }
                                listBluetooth = false;
                                listWireless = false;
                                break;
                            case "/WL":
                            case "/WIFI":
                            case "/WIRELESS":
                                if ( ( listBluetooth && listWired && listWireless ) == false )
                                {
                                    return WriteError( "Select a single adapter type only, or omit type to select all" );
                                }
                                listBluetooth = false;
                                listWired = false;
                                break;
                            default:
                                return WriteError( "Invalid command line argument" );
                        }
                    }
                    else
                    {
                        if ( !string.IsNullOrEmpty( computer ) )
                        {
                            return WriteError( "Do not specify more than one computer name" );
                        }
                        computer = "\\\\" + arg + "\\";
                    }

                }
            }


            #endregion Command line parsing


            foreach ( ManagementObject queryObj1 in wmi1 )
            {
                if ( queryObj1["NdisPhysicalMediumType"].ToString( ) == "10" )
                {
                    if ( listBluetooth )
                    {
                        AddAdapter( queryObj1["InstanceName"].ToString( ), "Bluetooth" );
                    }
                }
                if ( queryObj1["NdisPhysicalMediumType"].ToString( ) == "0" )
                {
                    if ( listWired )
                    {
                        AddAdapter( queryObj1["InstanceName"].ToString( ), "Wired" );
                    }
                }
                if ( queryObj1["NdisPhysicalMediumType"].ToString( ) == "1" )
                {
                    if ( listWireless )
                    {
                        AddAdapter( queryObj1["InstanceName"].ToString( ), "Wireless" );
                    }
                }
            }

            nics.Sort( );

            foreach ( string nic in nics )
            {
                Console.WriteLine( nic );
            }


            return 0;
        }
        catch ( Exception e )
        {
            return WriteError( e );
        }
    }


    public static void AddAdapter( string name, string type )
    {
        foreach ( ManagementObject queryObj2 in wmi2 )
        {
            if ( ( queryObj2["Name"].ToString( ) == name ) && Convert.ToBoolean( queryObj2["PhysicalAdapter"] ) )
            {
                foreach ( ManagementObject queryObj3 in wmi3 )
                {
                    if ( queryObj3["InstanceName"].ToString( ) == name )
                    {
                        nics.Add( String.Format( "{0,6}", Convert.ToInt32( queryObj3["NdisLinkSpeed"] ) / 10000 ) + " Mb/s\t" + String.Format( "{0,-11}", "[" + type + "]" ) + "\t" + name );
                    }
                }
            }
        }
    }


    #region Error handling


    public static int WriteError( Exception e )
    {
        return WriteError( e == null ? null : e.Message );
    }


    public static int WriteError( string errorMessage )
    {
        /*
        ListNICs,  Version 1.00
        List physical network adapters on the specified computer

        Usage:  LISTNICS  [ computername ]  [ /Bluetooth | /Wired | /WireLess ]

        Where:  "computername"    is a remote computer name    (default: this computer)
                /Bluetooth or /B  list Bluetooth adapters only (default: all)
                /Wired     or /W  list wired adapters only     (default: all)
                /Wireless  or /WL list wireless adapters only  (default: all)

        Written by Rob van der Woude
        http://www.robvanderwoude.com
        */

        if ( string.IsNullOrEmpty( errorMessage ) == false )
        {
            Console.Error.WriteLine( );
            Console.ForegroundColor = ConsoleColor.Red;
            Console.Error.Write( "ERROR:  " );
            Console.ForegroundColor = ConsoleColor.White;
            Console.Error.WriteLine( errorMessage );
            Console.ResetColor( );
        }
        Console.Error.WriteLine( );
        Console.Error.WriteLine( "ListNICs,  Version 1.00" );
        Console.Error.WriteLine( "List physical network adapters on the specified computer" );
        Console.Error.WriteLine( );
        Console.Error.Write( "Usage:  " );
        Console.ForegroundColor = ConsoleColor.White;
        Console.Error.Write( "LISTNICS" );
        Console.ResetColor( );
        Console.Error.Write( "  [ computername ]  [ " );
        Console.ForegroundColor = ConsoleColor.White;
        Console.Error.Write( "/B" );
        Console.ResetColor( );
        Console.Error.Write( "luetooth | " );
        Console.ForegroundColor = ConsoleColor.White;
        Console.Error.Write( "/W" );
        Console.ResetColor( );
        Console.Error.Write( "ired | " );
        Console.ForegroundColor = ConsoleColor.White;
        Console.Error.Write( "/W" );
        Console.ResetColor( );
        Console.Error.Write( "ire" );
        Console.ForegroundColor = ConsoleColor.White;
        Console.Error.Write( "L" );
        Console.ResetColor( );
        Console.Error.WriteLine( "ess ]" );
        Console.Error.WriteLine( );
        Console.Error.WriteLine( "Where:  \"computername\"    is a remote computer name    (default: this computer)" );
        Console.ForegroundColor = ConsoleColor.White;
        Console.Error.Write( "        /B" );
        Console.ResetColor( );
        Console.Error.Write( "luetooth or " );
        Console.ForegroundColor = ConsoleColor.White;
        Console.Error.Write( "/B" );
        Console.ResetColor( );
        Console.Error.WriteLine( "  list Bluetooth adapters only (default: all)" );
        Console.ForegroundColor = ConsoleColor.White;
        Console.Error.Write( "        /W" );
        Console.ResetColor( );
        Console.Error.Write( "ired     or " );
        Console.ForegroundColor = ConsoleColor.White;
        Console.Error.Write( "/W" );
        Console.ResetColor( );
        Console.Error.WriteLine( "  list wired adapters only     (default: all)" );
        Console.ForegroundColor = ConsoleColor.White;
        Console.Error.Write( "        /W" );
        Console.ResetColor( );
        Console.Error.Write( "ire" );
        Console.ForegroundColor = ConsoleColor.White;
        Console.Error.Write( "L" );
        Console.ResetColor( );
        Console.Error.Write( "ess  or " );
        Console.ForegroundColor = ConsoleColor.White;
        Console.Error.Write( "/WL" );
        Console.ResetColor( );
        Console.Error.WriteLine( " list wireless adapters only  (default: all)" );
        Console.Error.WriteLine( );
        Console.Error.WriteLine( "Written by Rob van der Woude" );
        Console.Error.WriteLine( "http://www.robvanderwoude.com" );
        return 1;
    }


    #endregion Error handling
}

}</pre>

 本文由用戶 xf3f 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!