office的图标白板后的修改方法
win10的系统卸载了office365后,导致原来的office快捷方式图标都变成白板了,如下
想手动处理下,不想重新安装office了,
问题原因是原来的快捷方式关联的程序和图标,由于卸载了office365没有了,即磁盘上没有
C:\WINDOWS\Installer\{90160000-0011-0000-1000-0000000FF1CE}\outicon.exe文件了
需要修改成自己本地的文件路径,如下图
上图的工具是我用py写的一个tool,
修改后的图标如下
安装pywin32`pip install pywin32`, 工具代码如下
# -*- coding: UTF-8 -*-
#-------------------------------------------------------------------------------
# Name: windows快捷方式修改tool.py
# Purpose:
#
# Author: changliang02
#
# Created: 23/10/2024
# Copyright: (c) changliang02 2024
# Licence: <your licence>
#-------------------------------------------------------------------------------
import os
import win32com.client
import tkinter as tk
from tkinter import filedialogclass LabelEdit(tk.Frame):def __init__(self, parent, label_text, initial_value=""):super().__init__(parent)self.label = tk.Label(self, text=label_text)self.label.pack(side=tk.LEFT)self.entry = tk.Entry(self)self.entry.insert(0, initial_value) # 设置初始值self.entry.pack(side=tk.LEFT, expand='yes',fill='x')def get_value(self):return self.entry.get()def set_value(self, value):self.entry.delete(0, "end")self.entry.insert(0, value)class AttrFrame(tk.Frame):def __init__(self, master=None, cnf={}, **kw):super().__init__(master, *cnf, **kw)self.columnconfigure(1, weight=1)self.attrs = {}def set_attr(self, key, value):if key not in self.attrs.keys():label = tk.Label(self, text=key)label.grid(row=len(self.attrs), column=0, sticky='e')entry = tk.Entry(self)entry.insert(0, value)entry.grid(row=len(self.attrs), column=1, sticky='ew')self.attrs[key] = {"label":label, "entry":entry}else:self.attrs[key].set_value(value)def get_attr(self, key):if key in self.attrs.keys():return self.attrs[key]["entry"].get()else:return Nonedef __iter__(self):self.__index = 0return selfdef __next__(self):if self.__index < len(self.attrs):k = list(self.attrs.keys())[self.__index]v = self.attrs[k]["entry"].get()self.__index += 1return k,velse:raise StopIterationclass WinLnkModifyTool(tk.Frame):def __init__(self, master=None, cnf={}, **kw):super().__init__(master, *cnf, **kw)self.shell = win32com.client.Dispatch("WScript.Shell")self.shortcut = Noneself.init_ui()def init_ui(self):self.rowconfigure(1, weight=1)self.columnconfigure(0, weight=1)self.file_path_edit = LabelEdit(self, "加载lnk文件", '')self.file_path_edit.grid(row=0, column=0, sticky='ew')select_button = tk.Button(self, text="Select File", command=self.open_file)select_button.grid(row=0, column=1, sticky='e')self.frame_attrs = AttrFrame(self)self.frame_attrs.grid(row=1, column=0, columnspan=2, sticky='snew', padx=10, pady=10)self.bt_save = tk.Button(self, text="Save", command=self.save_to)self.bt_save.grid(row=2, column=1, sticky='e')def open_file(self):file_path = filedialog.askopenfilename(title="选择快捷方式",filetypes=[("Shortcut files", "*.lnk")])if file_path:self.file_path_edit.set_value(file_path)self.load_lnk_file(file_path)else:print("没有选择文件路径")# self.file_path_edit.set_value(file_path)def load_lnk_file(self, lnk_file_path):self.shortcut = self.shell.CreateShortCut(lnk_file_path)if self.shortcut:for k in dir(self.shortcut):if k in ["FullName",]:continueif (not k.startswith("_")) and (not callable(getattr(self.shortcut, k))):print(k, ":", getattr(self.shortcut, k))self.frame_attrs.set_attr(k,getattr(self.shortcut, k))self.bt_save.config(text="Save")def save_to(self):print("-------save to----------------")if self.shortcut:for k,v in self.frame_attrs:print(k,v)setattr(self.shortcut, k, v)rt = self.shortcut.save()self.bt_save.config(text="Save ok")def main():root = tk.Tk()root.title("修改windows的快捷方式")lnktool = WinLnkModifyTool(root)lnktool.pack(expand='yes',fill='both')root.mainloop()if __name__ == '__main__':main()