关于module 'win32api' has no attribute 'shell_taskbar'的问题,如何解决?

module 'win32api' has no attribute 'shell_taskbar'怎么解决?
具体在63行,以下是完整代码:

import threading
import tkinter as tk
from tkinter import ttk
import win32api
import win32gui
import urllib.request

class DownloadThread(threading.Thread):
    def __init__(self, url, filename, progress_bar):
        super().__init__()
        self.url = url
        self.filename = filename
        self.progress_bar = progress_bar

    def run(self):
        with urllib.request.urlopen(self.url) as response, open(self.filename, 'wb') as f:
            total_length = int(response.getheader('Content-Length'))
            bytes_read = 0
            while True:
                chunk = response.read(1024)
                if not chunk:
                    break
                f.write(chunk)
                bytes_read += len(chunk)
                percent_complete = int(bytes_read / total_length * 100)
                self.progress_bar['value'] = percent_complete

class DownloaderGUI:
    def __init__(self, master):
        self.master = master
        self.master.geometry('300x200')
        self.master.title('Downloader')

        self.url_label = tk.Label(master, text='URL')
        self.url_label.pack()
        self.url_entry = tk.Entry(master)
        self.url_entry.pack()

        self.filename_label = tk.Label(master, text='Filename')
        self.filename_label.pack()
        self.filename_entry = tk.Entry(master)
        self.filename_entry.pack()

        self.progress_bar = ttk.Progressbar(master, orient='horizontal', mode='determinate')
        self.progress_bar.pack()

        self.start_button = tk.Button(master, text='Start', command=self.start_download)
        self.start_button.pack()

        self.quit_button = tk.Button(master, text='Quit', command=self.quit)
        self.quit_button.pack()

    def start_download(self):
        url = self.url_entry.get()
        filename = self.filename_entry.get()
        download_thread = DownloadThread(url, filename, self.progress_bar)
        download_thread.start()

    def quit(self):
        self.master.quit()

def minimize_to_tray(root):
    icon = win32api.shell_taskbar.GetModuleFileName(None)
    hicon = win32api.shell_taskbar.LoadIconFromFile(icon)
    hwnd = root.winfo_id()
    _,_,_,x,y = root.geometry()
    root.withdraw()
    nid = (hwnd, 0, win32gui.NIF_ICON | win32gui.NIF_MESSAGE | win32gui.NIF_TIP, hicon, "Downloader")
    win32gui.Shell_NotifyIcon(win32gui.NIM_ADD, nid)

def restore_from_tray(event, root):
    hwnd = root.winfo_id()
    win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, (hwnd, 0))

root = tk.Tk()
downloader_gui = DownloaderGUI(root)
minimize_to_tray(root)
root.bind('', lambda event: minimize_to_tray(root))
root.bind('', lambda event: restore_from_tray(event, root))
root.mainloop()

报错信息:

Traceback (most recent call last):
  File "g:\Download.py", line 77, in 
    minimize_to_tray(root)
  File "g:\Download.py", line 63, in minimize_to_tray
    icon = win32.shell_taskbar.GetModuleFileName(None)
AttributeError: module 'win32api' has no attribute 'shell_taskbar'

在网上查了好久都解决不了

https://blog.csdn.net/qq_36477513/article/details/104833806