我正在尝试编写一个函数,该函数接收文件名并返回与我的系统(即Windows 7)上的文件文件类型相关联的应用程序的图标。
我已经看过this question了,但答案并没有给我提供我需要的详细信息。我对ctypes模块不太熟悉,我发现VC ++函数上的文档很难理解。
我也看到了this question,但是我遇到了第一道障碍。 当我尝试:
import _winreg
_winreg.OpenKey(_winreg.HKEY_CURRENT_USER, 'Software\Microsoft\CurrentVersion\Explorer\FileExts')
它引发WindowsError: [Error 2] The system cannot find the file specified
即使我做了
_winreg.OpenKey(_winreg.HKEY_CURRENT_USER, 'Software\Microsoft')
返回PyHKEY object
,任何'键'我尝试对其执行操作会引发TypeError: The object is not a PyHKEY object
答案 0 :(得分:-1)
我找到了答案here
链接中的代码是:
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()
答案 1 :(得分:-1)
这里有一些适合您的py2代码。不幸的是,我绝对不了解这里发生的一切,但我至少可以说它确实有效!
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 )