引言
最近做的MyTools想可以自定义启动任何程序,甚至是word文档,那么前面的图标该怎么获取到是个问题,问问度娘好像也没看出什么有用的东西,有个pypiwin32的,但是py3没有安上,就没有再试了,自己想办法了。
思考过程
- 扩展名和打开方式存储在注册表中,所以方向定位到注册表
- 找到textfile,发现有一项指向了一个Exe文件,所以可以通过exe获取到icon

- 全局搜索注册表
textfile看看有没有对应的扩展名.txt

S-1-5-21-143525665-3044134838-379703025-1001感觉可能不能满足所有人
Wordpad和 系统自带的有关,肯定不适配所有格式 - 经过排除,感觉
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts最像了 - 找到关键字textfile_.txt

- 此时可以根据.txt前面的textfile去
HKEY_CLASSES_ROOT查textfile,里面的FriendlyTypeName就可以找到对应的执行文件了
有待证实。
测试过程

直接根据.txt的默认值去找就是默认打开方式
不需要HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts找,HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts里面是所有的打开方式,比如说mp3可以通过au,vlc,kugou,网易云等打开,这里面存的就是全量的支持打开对应格式的软件。
有待证实
结论
证明代码:
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
看起来挺多的



评论 0
还没有评论,来说点什么吧。