获取文件的关联文件类型图标
我想要做什么
我想写一个函数,这个函数可以接收一个文件名,然后返回与这个文件类型相关联的应用程序图标(我用的是Windows 7系统)。
我尝试过什么
我看到过这个问题,但是答案没有给我我需要的细节。我对ctypes模块不太熟悉,而且觉得VC++函数的文档很难理解。
我还看到过这个问题,但我在第一步就遇到了困难。当我尝试:
import _winreg
_winreg.OpenKey(_winreg.HKEY_CURRENT_USER, 'Software\Microsoft\CurrentVersion\Explorer\FileExts')
它抛出了一个错误:WindowsError: [Error 2] 系统找不到指定的文件
即使我这样做:
_winreg.OpenKey(_winreg.HKEY_CURRENT_USER, 'Software\Microsoft')
这返回了一个PyHKEY对象
,但我对它进行的任何“键”操作都会抛出一个错误:TypeError: 这个对象不是PyHKEY对象
2 个回答
0
这里有一些可以运行的Python 2代码给你。虽然我并不完全理解里面发生的所有事情,但我可以肯定地说,这段代码确实是有效的!
import win32ui
import win32gui
import win32con
import win32api
def save_icon(exe_file, out_file):
ico_x = win32api.GetSystemMetrics(win32con.SM_CXICON)
ico_y = win32api.GetSystemMetrics(win32con.SM_CYICON)
large, small = win32gui.ExtractIconEx(exe_file, 0)
win32gui.DestroyIcon(large[0])
hdc = win32ui.CreateDCFromHandle(win32gui.GetDC(0))
hbmp = win32ui.CreateBitmap()
hbmp.CreateCompatibleBitmap( hdc, ico_x, ico_y )
hdc = hdc.CreateCompatibleDC()
hdc.SelectObject( hbmp )
hdc.DrawIcon( (0,0), small[0] )
hbmp.SaveBitmapFile( hdc, out_file )
0
我在这里找到了解答 链接
链接中的代码是:
import win32ui
import win32gui
import win32con
import win32api
import cStringIO
import Image
tempDirectory = os.getenv("temp")
ico_x = win32api.GetSystemMetrics(win32con.SM_CXICON)
dst = cStringIO.StringIO()
large, small = win32gui.ExtractIconEx(path,0)
win32gui.DestroyIcon(small[0])
#creating a destination memory DC
hdc = win32ui.CreateDCFromHandle( win32gui.GetDC(0) )
hbmp = win32ui.CreateBitmap()
hbmp.CreateCompatibleBitmap(hdc, ico_x, ico_x)
hdc = hdc.CreateCompatibleDC()
hdc.SelectObject( hbmp )
#draw a icon in it
hdc.DrawIcon( (0,0), large[0] )
win32gui.DestroyIcon(large[0])
#convert picture
hbmp.SaveBitmapFile( hdc, tempDirectory + "\Icontemp.bmp")
im = Image.open(tempDirectory + "\Icontemp.bmp")
im.save(dst, "JPEG")
dst.seek(0)
os.remove(tempDirectory + "\Icontemp.bmp")
return dst.read()