5
A
回答
7
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)
1
從我的理解來做到這一點一絕Customise Folders with Desktop.ini。雖然可能有更多關於this question的信息。
相關問題
- 1. 如何更改%SystemRoot%文件夾(C:\ Windows)的圖標?
- 2. 如何更改Windows字體文件夾?
- 3. 用AppleScript更改文件夾的圖標?
- 4. 用Ruby更改mac文件夾圖標?
- 5. 如何將TreeView圖標更改爲文件夾圖標?
- 6. 如何使用java程序更改windows中文件夾的顏色/圖標?
- 7. 如何更改JTree中空文件夾的圖標? (FTP文件)
- 8. 如何在OSX中更改文件夾圖標?
- 9. 更改desktop.ini不會在Windows中自動更新文件夾圖標
- 10. 如何更改Jenkins中的文件夾圖標
- 11. Windows 7:如何更改上下文菜單項圖標?
- 12. 如何使用.NET更改Windows文件夾的隱藏屬性?
- 13. 將文件夾圖標更改爲dll圖標沒有desktop.ini
- 14. 將文件夾添加到收藏夾並更改文件夾圖標[Electron macOS]
- 15. 是否有方法使用Perl腳本更改Windows文件夾圖標?
- 16. 如何在Windows中立即刷新文件夾圖標
- 17. 如何在Windows上更改Atom編輯器的默認圖標?
- 18. Python + Jira(lib)如何更改「更新」文件夾
- 19. 如何設置python上的zip文件的文件夾目標?
- 20. 改變windows上的virtualenv文件夾
- 21. 在windows桌面上查找最少使用的圖標/文件/文件夾
- 22. 如何在Windows中移動文件而不更改目標父文件夾的修改時間(Win32)?
- 23. 如何用CMake更改文件夾的編譯標誌?
- 24. 如何在InnoSetup中更改安裝目標文件夾權限?
- 25. 如何更改apache tomcat中的文件上傳文件夾?
- 26. 更改apache上的上傳文件夾
- 27. 如何在Windows 7上的文件夾中有背景圖片?
- 28. 在Windows文件夾中更改文件名
- 29. 自定義Windows文件夾圖標
- 30. 通過修改desktop.ini來更改圖標的文件夾
太棒了,這正是我想要的。我所要做的就是生成該文件,而且我猜,Windows將會撿起它。非常感謝! – 2011-01-11 23:51:38
不完全。文件屬性必須包含System和Hidden,並且不更新圖標緩存Windows可能不會顯示正確的圖標。 – cgohlke 2011-01-12 00:08:23