乙個用C 實現的虛擬WiFi設定程式

2022-07-13 08:15:10 字數 3288 閱讀 6046

本人常年使用windows 7(雖然在努力學習ubuntu,但是必須承認windows 7上擁有大量的優秀軟體,比如evernote、microsoft office等)。但是由於學校的網路是通過繫結mac和ip位址,然後客戶端登入的模式提供網路服務的,所以同一時間只能夠允許一台裝置上網(學校的客戶端會檢測路由器,一旦檢測到就會斷開連線)。

這時候windows 7的虛擬wifi就成了手機和平板電腦的救命稻草。虛擬wifi需要一定的硬體支援,但是現在的筆記本一般都沒問題,本文不再討論了。虛擬wifi開啟的方式一般有兩種:(1)使用類似connectify的工具軟體。(2)使用命令提示符進行設定。本文介紹筆者的乙個用來設定虛擬wifi的小程式,其關鍵就是對命令提示符的二次呼叫。

(一)工具軟體

本人用過的軟體只有connectify。不得不說這是一款很好的軟體,介面友好、功能齊全。但是在本人的筆記本上工作卻不是很正常,開啟初始化的過程非常卡(y470 win7 x64)。所以後來我一般選擇在命令提示符中手動開啟。

(二)命令提示符

首先介紹一下在命令提示符下開啟虛擬wifi:

1、開啟命令提示符cmd。(注意需要用管理員許可權)

2、開啟虛擬wifi:    netsh wlan set hostednetwork mode=allow ssid=namestring key=keystring(mode=disallow可以禁用虛擬wifi,ssid表示熱點名稱,key則為連線到熱點的密碼)

3、設定連線源:開啟控制面板,按照 控制面板 => 網路和 internet => 網路連線的順序開啟,你會發現多了乙個microsoft virtual wifi miniport adapter。按照你的訊號源(如果連有線的就選本地連線,連無線的就選無線網路連線),右鍵屬性 => 共享 勾選第乙個選項,然後在下拉列表中選擇那個多出來的無線網路連線。

4、開啟虛擬wifi:     netsh wlan start hostednetwork

5、關閉虛擬wifi:     netsh wlan stop hostednetwork

可以發現,如果每次開啟和關閉虛擬wifi都要輸入那麼長一串命令的確很麻煩,乙個簡便的處理方式是將命令作為批處理方式。將這兩個命令分別寫入到txt檔案中,然後將字尾名改為bat,批處理檔案就做好了。

事實上,用兩個批處理檔案的確可以了,但是把兩個bat檔案放在桌面上不嫌醜嗎?再說被人蹭網也是常事,如果要改密碼那麼就必須重新修改命令,還是有點麻煩。於是本著計算機專業學生的二愣子精神,我打算自己動手做乙個小程式來完成虛擬wifi的開啟、關閉、修改、禁用等功能。

其實吧,作為乙個半桶水本人也不會修改作業系統的一些引數。於是我就打算在cmd外面加一層殼,用windowsform做乙個cmd的二次呼叫。首先是生成介面:

窗體上的兩個輸入框用來在更改和設定虛擬wifi的ssid和連線密碼。顯示資訊可以顯示出連線的連線裝置數目等資訊。開啟和關閉分別對應start和stop命令,禁用會刪除虛擬的無線連線。最後說說這個輸出面板,這是用來顯示cmd中的輸入資訊,但是不能從這裡輸入。

最重要也是實現的關鍵——對cmd的呼叫:

1: using system;
2: using system.collections.generic;
3: using system.linq;
4: using system.text;
5: using system.diagnostics;
6: using system.io;
7:
8: namespace virtualwifi
9:
31:             p.standardinput.writeline("exit");
32:
33:             //讀取返回資訊;
34:             return p.standardoutput.readtoend();
35:         }
36:     }
37: }
然後是窗體的事件處理程式:

1: using system;
2: using system.collections.generic;
3: using system.windows.forms;
4:
5: namespace virtualwifi
6:
24:
25:         private

void buttonok_click(object sender, eventargs e)

26:
33:             string setting = allow + "ssid=" + textbox1.text + "key=" + textbox2.text;
34:             var commands = new list();
35:             commands.add(setting);
36:             commands.add(show);
37:             command.runcmd(commands);
38:         }
39:
40:         private

void radiobuttonstart_checkedchanged(object sender, eventargs e)

41:
46:
47:         private

void radiobuttonstop_checkedchanged(object sender, eventargs e)

48:
53:
54:         private

void buttondisplay_click(object sender, eventargs e)

55:
60:
61:         private

void buttonforbidden_click(object sender, eventargs e)

62:
67:     }
68: }

用 C 實現乙個變長陣列

我想用 c 的人都用過 std vector 它是乙個可變長的陣列,在很多時候都比 c 固有的定長陣列要靈活。c 裡沒有這樣的標準化設施,但是寫軟體的人通常都會實現乙個。正所謂,不厭其煩的重造輪子 d 這裡我們不討論造輪子的好壞問題,直接討論下實現這麼個東西的一點小技巧吧。總是固執於用誰做的輪子的問...

用C 實現乙個日期類

最近在複習c 的時候發現日期類是乙個非常有用的類,在現實中是非常實用的 雖然我不知道為什麼這麼實用的類,庫里沒有 以下是我自己實現的日期類的 因為大部分都是運算子的過載,所以理解起來應該並不難 include include using namespace std class date date c...

用C 實現乙個XML parser的必要工作。

考慮乙個完整的xml parser一般由幾部分組成 必要元件 1.dom 介面定義,以及dom model的實現。2.乙個xml詞法分析器,用於將xml字元流轉換成token流。3.乙個xml parser,將token流組織成dom model.4.一套在dom node中遍歷的資料結構和演算法,...