Netsh命令實現共享,并查詢連接用戶C#實現

podc9bw2 8年前發布 | 27K 次閱讀 C# Dot NET

這個封裝很方便了,設置名稱密碼,一鍵即可共享。

缺點就是第一次共享要到網絡中心設置網卡共享。

現在是用在我的軟件FLYFI中,百度即可搜索到,歡迎大伙品嘗!

public class FLYFI_SHARE_ADMIN
    {
        /// <summary>
        /// 獲取是否共享屬性
        /// </summary>
        public bool IsShar { get; set; }
        /// <summary>
        /// 獲取是否增強共享
        /// </summary>
        public bool IsStrengthen { get; set; }
        /// <summary>
        /// 設置、獲取共享賬戶ID
        /// </summary>
        public string ShareSSID { get; set; }
        /// <summary>
        /// 設置、獲取共享賬戶密碼
        /// </summary>
        public string SharePassword { get; set; }
        /// <summary>
        /// 無線WiFi接口名稱
        /// </summary>
        public string WifiInterface { get; set; }

        /// <summary>
        /// 開啟共享
        /// </summary>
        public bool StartShare(out string message)
        {
            bool bFlag = false;
            message = "wlan set hostednetwork mode=allow ssid=" + this.ShareSSID + " key=" + this.SharePassword;
            message = this.RunCommand(message);                //調用Doc命令
            string str = this.RunCommand("wlan start hostednetwork");
            int StrInt = str.IndexOf("已啟動承載網絡");
            if (StrInt != -1)
            {
                this.IsShar = true;
                bFlag = true;
            }
            message = str + message;
            return bFlag;
        }
        /// <summary>
        /// 關閉共享,若增強開啟則關閉增強
        /// </summary>
        public void StopShare()
        {
            if (this.IsStrengthen)
            {
                this.StopStrengthen();                
            }
            this.RunCommand("wlan stop hostednetwork");             //停止承載網絡                              
            this.RunCommand("wlan set hostednetwork mode=disallow");//網絡共享設置為禁止  
            this.IsShar = false;
        }
        /// <summary>
        /// 開啟共享增強
        /// </summary>
        public void StartStrengthen()
        {
            string str;
            if (this.WifiInterface == null)
                this.GetWifiInterface();
            str = "wlan set autoconfig enabled=no interface=" + this.WifiInterface;
            this.RunCommand(str);
            this.IsStrengthen = true;
        }
        /// <summary>
        /// 關閉共享增強
        /// </summary>
        public void StopStrengthen()
        {
            if (this.WifiInterface == null)
                this.GetWifiInterface();
            this.RunCommand("wlan set autoconfig enabled=yes interface=" + this.WifiInterface);
            this.IsStrengthen = false;
        }
        /// <summary>
        /// 獲取無線接口名稱
        /// </summary>
        public void GetWifiInterface()
        {
            string str = "wlan show drivers";
            str = this.RunCommand(str).Substring(7, 100);
            str = str.Substring(0, str.IndexOf("\r\n"));
            this.WifiInterface = str;
        }        
        /// <summary>
        /// 打開網絡共享中心
        /// </summary>
        public void OpenNetworkCenter()
        {
            this.RunCommand_CMD("ncpa.cpl");
        }
        /// <summary>
        /// Process類執行DOS命令
        /// </summary>
        /// <param name="command">執行的命令行</param>
        /// <returns></returns>
        private string RunCommand(string command)
        {
            string returnStr = null;
            //實例一個Process類,啟動一個獨立進程
            Process p = new Process();
            //Process類有一個StartInfo屬性,這個是ProcessStartInfo類,包括了一些屬性和方法,下面我們用到了他的幾個屬性:
            p.StartInfo.FileName = "netsh.exe";  //設定程序名
            p.StartInfo.Arguments = command;            //設定程式執行參數
            p.StartInfo.Verb = "runas";
            p.StartInfo.UseShellExecute = false;        //關閉Shell的使用
            p.StartInfo.RedirectStandardInput = true;   //重定向標準輸入
            p.StartInfo.RedirectStandardOutput = true;  //重定向標準輸出
            p.StartInfo.RedirectStandardError = true;   //重定向錯誤輸出
            p.StartInfo.CreateNoWindow = true;          //設置不顯示窗口
            p.Start();                                  //啟動
            returnStr = p.StandardOutput.ReadToEnd();     //賦值
            p.Dispose();                                //釋放資源
            return returnStr;        //從輸出流取得命令執行結果

        }
        /// <summary>
        /// Process類執行CMD DOS命令
        /// </summary>
        /// <param name="command">執行的命令行</param>
        /// <returns></returns>
        private string RunCommand_CMD(string command)
        {
            string returnStr = null;
            //實例一個Process類,啟動一個獨立進程
            Process p = new Process();
            //Process類有一個StartInfo屬性,這個是ProcessStartInfo類,包括了一些屬性和方法,下面我們用到了他的幾個屬性:
            p.StartInfo.FileName = "cmd.exe";           //設定程序名
            p.StartInfo.Arguments = "/c" + command;     //設定程式執行參數
            p.StartInfo.UseShellExecute = false;        //關閉Shell的使用
            p.StartInfo.RedirectStandardInput = true;   //重定向標準輸入
            p.StartInfo.RedirectStandardOutput = true;  //重定向標準輸出
            p.StartInfo.RedirectStandardError = true;   //重定向錯誤輸出
            p.StartInfo.CreateNoWindow = true;          //設置不顯示窗口
            p.Start();                                  //啟動
            returnStr = p.StandardOutput.ReadToEnd();     //賦值
            p.Dispose();                                //釋放資源
            return returnStr;        //從輸出流取得命令執行結果
        }
        /// <summary>
        /// 獲取用戶列表Mac地址
        /// </summary>
        /// <returns></returns>
        public List<string> GetShareMacList()
        {
            List<string> ShareList = new List<string>();
            string str = null;
            try
            {
                str = this.RunCommand("wlan show hostednetwork");//查詢語句
                str = str.Substring(str.IndexOf(" 客戶端數"));
                str = str.Substring(str.IndexOf(":") + 2);
            }
            catch (Exception)
            {
                str = "0";
            }
            int Pstr = Convert.ToInt32(str.Substring(0, 1));
            //刷新用戶數量
            if (Pstr > 0)
            {//判斷當前用戶數量是否大于0
                for (int i = 0, fir = 11; i < Pstr; i++)
                {//進行修改
                    try
                    {
                        ShareList.Add(str.Substring(fir, 17).ToLowerInvariant());
                        fir = fir + 42;          //增加值,跳轉到第二個用戶
                        //, sec = 36
                        //狀態str.Substring(sec, 7));//添加到內存表
                        //sec = fir + 25;
                    }
                    catch (Exception)
                    { }
                }
            }
            return ShareList;
        }

    }

來自:http://blog.csdn.net//qiujuer/article/details/18011955

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