Loading... # 引言 最近做的MyTools想可以自定义启动任何程序,甚至是word文档,那么前面的图标该怎么获取到是个问题,问问度娘好像也没看出什么有用的东西,有个`pypiwin32`的,但是py3没有安上,就没有再试了,自己想办法了。 # 思考过程 1. 扩展名和打开方式存储在注册表中,所以方向定位到注册表 2. 找到textfile,发现有一项指向了一个Exe文件,所以可以通过exe获取到icon ![image.png](https://www.zunmx.top/usr/uploads/2022/12/2410641311.png) 3. 全局搜索注册表`textfile`看看有没有对应的扩展名`.txt` ![image.png](https://www.zunmx.top/usr/uploads/2022/12/2899473775.png) `S-1-5-21-143525665-3044134838-379703025-1001` 感觉可能不能满足所有人 `Wordpad` 和 系统自带的有关,肯定不适配所有格式 4. 经过排除,感觉`HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts`最像了 5. 找到关键字textfile_.txt ![image.png](https://www.zunmx.top/usr/uploads/2022/12/2760990221.png) 6. 此时可以根据.txt前面的textfile去`HKEY_CLASSES_ROOT` 查textfile,里面的`FriendlyTypeName` 就可以找到对应的执行文件了 有待证实。 # 测试过程 ![image.png](https://www.zunmx.top/usr/uploads/2022/12/739557852.png) 直接根据.txt的默认值去找就是默认打开方式 不需要`HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts`找,`HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts`里面是所有的打开方式,比如说mp3可以通过au,vlc,kugou,网易云等打开,这里面存的就是全量的支持打开对应格式的软件。 有待证实 # 结论 证明代码: ```python import win32api import win32con key = win32api.RegOpenKey(win32con.HKEY_CLASSES_ROOT, "", 0, win32con.KEY_READ) for item in win32api.RegEnumKeyEx(key): fmt = item[0] if fmt.startswith('.'): ffmt = win32api.RegQueryValue(win32api.RegOpenKey(win32con.HKEY_CLASSES_ROOT, fmt, 0, win32con.KEY_READ), '') if ffmt == '': continue try: exe = win32api.RegQueryValueEx( win32api.RegOpenKey(win32con.HKEY_CLASSES_ROOT, ffmt + "\DefaultIcon\\", 0, win32con.KEY_READ), '') print(item[0], "-->", ffmt, '-->', exe) except Exception as e: pass ``` 看起来挺多的 ![image.png](https://www.zunmx.top/usr/uploads/2022/12/3379952104.png) © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏