获取文件的关联文件类型图标

时间:2014-08-26 17:25:13

标签: python file icons file-type

我想要什么

我正在尝试编写一个函数,该函数接收文件名并返回与我的系统(即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

2 个答案:

答案 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 )
相关问题