diff --git "a/\346\241\214\351\235\242\345\210\207\346\215\242/refresh_desktop.py" "b/\346\241\214\351\235\242\345\210\207\346\215\242/refresh_desktop.py" new file mode 100644 index 0000000000000000000000000000000000000000..00a4b58e5a54f9eac2c4c20cf88526a0eea0a035 --- /dev/null +++ "b/\346\241\214\351\235\242\345\210\207\346\215\242/refresh_desktop.py" @@ -0,0 +1,38 @@ +import ctypes + +WM_KEYDOWN = 0x0100 +WM_KEYUP = 0x0101 +VK_F5 = 0x74 + +user32 = ctypes.windll.user32 + +def refresh_desktop(): + """ + 刷新 Windows 桌面(模拟 F5)。 + 返回 True 表示刷新成功,False 表示未找到桌面窗口。 + """ + defview = None + worker = None + while True: + worker = user32.FindWindowExW(None, worker, "WorkerW", None) + if not worker: + break + defview = user32.FindWindowExW(worker, None, "SHELLDLL_DefView", None) + if defview: + break + + listview = user32.FindWindowExW(defview, None, "SysListView32", None) if defview else None + + if listview: + user32.PostMessageW(listview, WM_KEYDOWN, VK_F5, 0) + user32.PostMessageW(listview, WM_KEYUP, VK_F5, 0) + return True + else: + return False + +# --------------------------------- +if __name__ == "__main__": + if refresh_desktop(): + print("桌面已刷新 ✅") + else: + print("找不到桌面图标窗口 ❌") diff --git "a/\346\241\214\351\235\242\345\210\207\346\215\242/switch_desktop.py" "b/\346\241\214\351\235\242\345\210\207\346\215\242/switch_desktop.py" index a6bc2a139c6746d0b7e73611f0663f701bed6bc6..6ad212fa2b6bd0eff8f70791bd1f1135bcd09601 100644 --- "a/\346\241\214\351\235\242\345\210\207\346\215\242/switch_desktop.py" +++ "b/\346\241\214\351\235\242\345\210\207\346\215\242/switch_desktop.py" @@ -1,7 +1,10 @@ import ctypes import os from ctypes import wintypes +from refresh_desktop import refresh_desktop # 你之前封装的函数 +# ----------------------------- +# GUID 定义,用于桌面路径修改 class GUID(ctypes.Structure): _fields_ = [ ("Data1", wintypes.DWORD), @@ -20,8 +23,14 @@ FOLDERID_Desktop = GUID( ) ) +# ----------------------------- +# 修改桌面路径并刷新桌面 def switch_desktop_path(new_path: str) -> bool: - # 1️⃣ 先检测目录是否存在 + """ + 修改 Windows 桌面路径并刷新桌面 + 返回 True 表示成功,False 表示失败 + """ + # 1️⃣ 检查目录是否存在 if not os.path.isdir(new_path): return False @@ -34,25 +43,19 @@ def switch_desktop_path(new_path: str) -> bool: None, ctypes.c_wchar_p(new_path) ) - if hr != 0: return False - # 3️⃣ 刷新桌面 - shell32.SHChangeNotify( - 0x8000000, # SHCNE_ASSOCCHANGED - 0x0000, - None, - None - ) - + # 3️⃣ 刷新桌面(快速刷新) + refresh_desktop() return True - +# ----------------------------- +# 脚本直接运行示例 if __name__ == "__main__": new_path = r"C:\Users\lqvsy\Desktop" if switch_desktop_path(new_path): - print("✅ 桌面切换完成,右键新建文件夹可用") + print("✅ 桌面切换完成并刷新,右键新建文件夹可用") else: print("❌ 桌面切换失败(目录不存在或设置失败)")