首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取文件的关联文件类型图标

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

Stack Overflow用户
提问于 2014-08-27 01:25:13
回答 2查看 2.7K关注 0票数 4

我想要的

我正在尝试编写一个函数,它接受一个文件名并返回与我的系统(即Windows7)上的文件类型相关联的应用程序的图标。

我尝试过的

我见过this question,但答案并没有给出我需要的细节。我对ctype模块不是很熟悉,而且我发现关于VC++函数的文档很难理解。

我也看到了this question,但我遇到了第一个障碍。当我尝试的时候:

代码语言:javascript
复制
import _winreg
_winreg.OpenKey(_winreg.HKEY_CURRENT_USER, 'Software\Microsoft\CurrentVersion\Explorer\FileExts')

它会引发一个WindowsError: [Error 2] The system cannot find the file specified

即使我这样做了

代码语言:javascript
复制
_winreg.OpenKey(_winreg.HKEY_CURRENT_USER, 'Software\Microsoft')

它返回一个键,所以我尝试对它执行的任何‘PyHKEY object’操作都会引发一个TypeError: The object is not a PyHKEY object

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-27 18:40:15

我找到了答案here

链接中的代码是:

代码语言:javascript
复制
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()
票数 0
EN

Stack Overflow用户

发布于 2018-07-07 04:25:17

下面是一些有效的py2代码。不幸的是,我肯定不理解这里发生的一切,但我至少可以说,它肯定是有效的!

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25511706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档