大家的桌面都使用什么动态壁纸的软件呢?wallpaper engine ? 还是自制的软件? github上的开源软件?作者也使用Python 加 tkinter 做了一个简易的动态壁纸程序。我在一个下午使用中发现了一个bug,暂时没有找到修复方法。
运行程序后点击win10任务栏视图
桌面上的壁纸成功消失不见(或被顶掉),这个Bug并不是只有我写的程序中有,github上找了两个程序,。OUS Wallpaper Wallpaper.Maker 两款程序测试后也有此bug.
现未找到原因,猜测可能是当用户点击任务视图窗口后刷新了程序的pm窗口导致壁纸被顶出(仅猜测)
动态壁纸的实现方法都是看了大佬:Draw Behind Desktop Icons in Windows 8+ - CodeProject 的文章实现的吧。0x052c信息。
"""窗口发信息"""
def pretreatmentHandle():
hwnd = win32gui.FindWindow("Progman", "Program Manager")
win32gui.SendMessageTimeout(hwnd, 0x052C, 0, None, 0, 0x03E8)
hwnd_WorkW = None
while 1:
hwnd_WorkW = win32gui.FindWindowEx(None, hwnd_WorkW, "WorkerW", None)
# print('hwmd_workw: ', hwnd_WorkW)
if not hwnd_WorkW:
continue
hView = win32gui.FindWindowEx(hwnd_WorkW, None, "SHELLDLL_DefView", None)
# print('hwmd_hView: ', hView)
if not hView:
continue
h = win32gui.FindWindowEx(None, hwnd_WorkW, "WorkerW", None)
# print('h_1: ',h)
while h:
win32gui.SendMessage(h, 0x0010, 0, 0) # WM_CLOSE
h = win32gui.FindWindowEx(None, hwnd_WorkW, "WorkerW", None)
# print(h)
break
return hwnd
"""窗口创建子窗口"""
def main(WindowsTitle, SleepTime):
global _id_
while True:
_HWND = get_hwnd_from_name(WindowsTitle)
if _HWND:
_id_ = _HWND
sleep(SleepTime)
win32gui.SetParent(_HWND, pretreatmentHandle())
break
else:
continue
有哪位有经验的大佬,解决这个bug吗?