gpt4 book ai didi

python - 如何在 Windows 上使用 Python 更改文件夹图标?

转载 作者:可可西里 更新时间:2023-11-01 13:29:31 25 4
gpt4 key购买 nike

我想编写一个实用程序脚本来更改具有特定名称的文件夹的图标。这在 python 中可行吗?如果没有,还有其他方法吗?

谢谢

最佳答案

import os
import ctypes
from ctypes import POINTER, Structure, c_wchar, c_int, sizeof, byref
from ctypes.wintypes import BYTE, WORD, DWORD, LPWSTR, LPSTR
import win32api

HICON = c_int
LPTSTR = LPWSTR
TCHAR = c_wchar
MAX_PATH = 260
FCSM_ICONFILE = 0x00000010
FCS_FORCEWRITE = 0x00000002
SHGFI_ICONLOCATION = 0x000001000

class GUID(Structure):
_fields_ = [
('Data1', DWORD),
('Data2', WORD),
('Data3', WORD),
('Data4', BYTE * 8)]

class SHFOLDERCUSTOMSETTINGS(Structure):
_fields_ = [
('dwSize', DWORD),
('dwMask', DWORD),
('pvid', POINTER(GUID)),
('pszWebViewTemplate', LPTSTR),
('cchWebViewTemplate', DWORD),
('pszWebViewTemplateVersion', LPTSTR),
('pszInfoTip', LPTSTR),
('cchInfoTip', DWORD),
('pclsid', POINTER(GUID)),
('dwFlags', DWORD),
('pszIconFile', LPTSTR),
('cchIconFile', DWORD),
('iIconIndex', c_int),
('pszLogo', LPTSTR),
('cchLogo', DWORD)]

class SHFILEINFO(Structure):
_fields_ = [
('hIcon', HICON),
('iIcon', c_int),
('dwAttributes', DWORD),
('szDisplayName', TCHAR * MAX_PATH),
('szTypeName', TCHAR * 80)]

def seticon(folderpath, iconpath, iconindex):
"""Set folder icon.

>>> seticon(".", "C:\\Windows\\system32\\SHELL32.dll", 10)

"""
shell32 = ctypes.windll.shell32

folderpath = unicode(os.path.abspath(folderpath), 'mbcs')
iconpath = unicode(os.path.abspath(iconpath), 'mbcs')

fcs = SHFOLDERCUSTOMSETTINGS()
fcs.dwSize = sizeof(fcs)
fcs.dwMask = FCSM_ICONFILE
fcs.pszIconFile = iconpath
fcs.cchIconFile = 0
fcs.iIconIndex = iconindex

hr = shell32.SHGetSetFolderCustomSettings(byref(fcs), folderpath,
FCS_FORCEWRITE)
if hr:
raise WindowsError(win32api.FormatMessage(hr))

sfi = SHFILEINFO()
hr = shell32.SHGetFileInfoW(folderpath, 0, byref(sfi), sizeof(sfi),
SHGFI_ICONLOCATION)
if hr == 0:
raise WindowsError(win32api.FormatMessage(hr))

index = shell32.Shell_GetCachedImageIndexW(sfi.szDisplayName, sfi.iIcon, 0)
if index == -1:
raise WindowsError()

shell32.SHUpdateImageW(sfi.szDisplayName, sfi.iIcon, 0, index)

关于python - 如何在 Windows 上使用 Python 更改文件夹图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4662759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com