我正在制作一個涉及 Windows 桌面上檔案夾圖示的專案。當我用 python 更改圖示時,更改不會立即發生。您必須以某種方式重繪 它(例如重新啟動筆記本電腦)。為了解決這個問題,我搜索了互聯網并從這個 github 頁面找到了這段代碼:https ://github.com/sunshowers/iconrefresher/blob/master/refresh-icons.py
def update_folder_icon():
# !/usr/bin/env python
# Released to the public domain.
# http://creativecommons.org/publicdomain/zero/1.0/
import ctypes
from ctypes import wintypes
# http://msdn.microsoft.com/en-us/library/ms644950
SendMessageTimeout = ctypes.windll.user32.SendMessageTimeoutA
SendMessageTimeout.restype = wintypes.LPARAM # aka LRESULT
SendMessageTimeout.argtypes = [wintypes.HWND, wintypes.UINT, wintypes.WPARAM, wintypes.LPARAM,
wintypes.UINT, wintypes.UINT, ctypes.c_void_p]
# http://msdn.microsoft.com/en-us/library/bb762118
SHChangeNotify = ctypes.windll.shell32.SHChangeNotify
SHChangeNotify.restype = None
SHChangeNotify.argtypes = [wintypes.LONG, wintypes.UINT, wintypes.LPCVOID, wintypes.LPCVOID]
HWND_BROADCAST = 0xFFFF
WM_SETTINGCHANGE = 0x001A
SMTO_ABORTIFHUNG = 0x0002
SHCNE_ASSOCCHANGED = 0x08000000
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0, SMTO_ABORTIFHUNG, 5000, None)
SHChangeNotify(SHCNE_ASSOCCHANGED, 0, None, None)
每次我使用此代碼時,所有檔案夾圖示都會重繪 并閃爍。我需要在我的專案中經常使用此代碼(每 3 秒一次),因此最好不要每次都看到閃爍效果。所以我的問題是:有沒有辦法讓我只更新一個特定的檔案夾,例如將檔案夾路徑作為引數傳遞給update_folder_icon()函式?
這是我用來更改檔案夾圖示的代碼:
def set_folder_icon(folder_path, icon_path):
if not os.path.isdir(folder_path):
print("Folder Required To Set The Icon!")
return
shell32 = ctypes.windll.shell32
folder_path = os.path.abspath(folder_path)
icon_path = os.path.abspath(icon_path)
fcs = SHFOLDERCUSTOMSETTINGS()
fcs.dwSize = sizeof(fcs)
fcs.dwMask = FCSM_ICONFILE
fcs.pszIconFile = icon_path
fcs.cchIconFile = 0
fcs.iIconIndex = 0
hr = shell32.SHGetSetFolderCustomSettings(byref(fcs), folder_path, FCS_FORCEWRITE)
if hr:
raise WindowsError(win32api.FormatMessage(hr))
sfi = SHFILEINFO()
hr = shell32.SHGetFileInfoW(folder_path, 0, byref(sfi), sizeof(sfi),
SHGFI_ICONLOCATION)
if hr == 0:
raise WindowsError(win32api.FormatMessage(hr))
shell32.SHUpdateImageW(sfi.szDisplayName, sfi.iIcon, 0, 0)
其他可能有用的資訊:
- 視窗版本:視窗 11
- Python版本:3.8
- IDE:Pycharm
uj5u.com熱心網友回復:
我設法解決了這個問題。問題實際上并不在于代碼本身,而更像是一個 Windows 錯誤。當您第一次設定檔案夾的圖示時,它會起作用,但是當您再次更改圖示時,但圖示檔案具有相同的名稱,則不會發生更改。所以為了解決這個問題,你要么必須做一些激進的事情,SHCNE_ASSOCCHANGED要么只是使用不同的圖示檔案名。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/464810.html
標籤:Python python-3.x 视窗 图标 桌面.ini
