Windows平台快速切换hosts文件的小工具
上周孩子她妈跑过来说电脑上有个软件打不开了,让我给看看是怎么回事。
做为一个程序员,外行人眼中修电脑什么的肯定都是必备技能啊!
我走过去看了看,这个软件就是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!导入配置文件
#蒋晓岗<446252221@qq.com>
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)