上週孩子她媽跑過來說電腦上有個軟件打不開了,讓我給看看是怎麼回事。
做爲一個程序員,外行人眼中修電腦什麼的肯定都是必備技能啊!
我走過去看了看,這個軟件就是SwitchHosts!,具體問題當時沒有保存截圖,總之就是報錯!
最後解決的辦法就是把C:\Users\Administrator\.SwitchHosts這個文件夾刪除就好了。
雖然問題已經解決,但是我分析了下這個軟件,核心功能嘛就是切換預設的hosts文件嘛,功能並不複雜。
但是它:
1、高達100MB的程序體積(大概是爲了跨平臺,使用electron打包的程序)。
2、默認配置文件保存在用戶主目錄(這不符合我對綠色軟件的定義)。
因此我突發奇想,決定使用Windows原生API重寫一個真正的綠色程序,
按照我理解的綠色程序應該具有以下特點:
1、免安裝,解壓即用;
2、不寫註冊表,程序數據和配置文件保存在程序目錄下面;
3、打包整個程序目錄放到U盤,可以在任意電腦上打開,並得到相同的配置參數;
好的,說幹就幹。
於是我打開VS2005,新建一個MFC工程,然後此處省略1萬字........................
終於一個界面醜陋,功能簡單的hosts切換工具就產生了。
界面佈局參考了SwitchHosts!,左邊是配置文件的列表,右邊可以查看和編輯配置文件的內容。
左側的配置文件列表點鼠標右鍵可以進行添加、刪除、改名操作。
勾選對應的配置,可以同時勾選多個,則加載到系統hosts文件並執行清除DNS緩存的操作。
清除DNS緩存使用的是命令:ipconfig /flushdns
右側的編輯框查看和修改配置文件,並實時保存配置文件的改動。
實時保存這個功能,目前採用的是當EDIT控件丟失焦點時,如果文本內容有改變,則保存一次文件。
第一次啓動程序的時候會自動備份當前系統的hosts文件,命名爲“默認配置”;
所有配置文件均保存在程序主目錄的etc目錄下面,並以.hosts爲後綴;
編譯出來的程序也才200多KB,比起SwitchHosts!小巧了不是一點半點。
這個工具使用純MFC開發,源碼也非常的簡單,感興趣的朋友可以到我的碼雲查看源碼。
下載地址:https://download.csdn.net/download/qq446252221/12282814
源碼地址:https://gitee.com/kerndev/HostsMan
後記:
發給孩子她媽試用,竟然打開是一坨英文+亂碼!
原來hosts文件被SwitchHosts!修改過後變成了UTF8編碼的UNIX文檔(換行符變成了\n而不是\r\n)。
由於文本編輯使用的是EDIT控件,只能識別\r\n的換行符,
於是又修改了一下代碼,把加載的文件換行符強轉爲\r\n,才能正常換行。
但是UTF8編碼這個就有點麻煩了,暫時還不支持,只能用Notepad++先轉爲GBK編碼吧。
補充:
用python寫了個腳本把SwitchHosts!的配置導入HostsMan
#!python
#從SwitchHosts!導入配置文件
#蔣曉崗<[email protected]>
import io
import os
import json
#創建子目錄etc
def safe_mkdir(name):
try:
os.mkdir(name)
except:
return None
#保存配置
def save_hosts(dir, name, data):
print("正在導入:", name)
hosts = open(dir + "\\" + name + ".hosts", "w")
hosts.write(data)
hosts.close()
#入口
home = os.environ["USERPROFILE"]
file_name = home + "\\.SwitchHosts\\data.json"
file_obj = open(file_name, "r", encoding="utf8")
json_str = file_obj.read()
file_obj.close()
list_obj = json.loads(json_str)
for data in list_obj["list"]:
title = data["title"]
content = data["content"]
safe_mkdir("etc")
save_hosts("etc", title, content)