用Python写一个Windows版本查询工具(附源码)

运行出来是酱紫
1.双击运行
在这里插入图片描述

2.点击选择路径按钮,选择希望查询版本的路径
在这里插入图片描述

3.会在程序的相同目录下生成一个包含文件名和版本信息的file_version.xlxs文件
在这里插入图片描述
4.分为EXE和DLL两个sheet表
在这里插入图片描述

import time
import tkinter as tk
from tkinter import filedialog
import openpyxl
from openpyxl.utils import get_column_letter
from openpyxl.styles import Font
import win32api
import os





def get_file_version(file_path):
    try:
        info = win32api.GetFileVersionInfo(file_path, '\\')
        ms = info['FileVersionMS']
        ls = info['FileVersionLS']
        file_version = f"{win32api.HIWORD(ms)}.{win32api.LOWORD(ms)}.{win32api.HIWORD(ls)}.{win32api.LOWORD(ls)}"
        return file_version
    except Exception as e:

        text.insert(tk.END, f"Failed to get version for file: {file_path}"+"\n")
        return ""


def write_to_excel(file_info, excel_file):
    workbook = openpyxl.Workbook()
    workbook.remove(workbook.active)  # 删除默认的 Sheet 表
    for sheet_name, file_list in file_info.items():
        sheet = workbook.create_sheet(sheet_name)
        header = ["File Name", "Version"]
        for col_num, column_title in enumerate(header, 1):
            col_letter = get_column_letter(col_num)
            cell = sheet.cell(row=1, column=col_num)
            cell.value = column_title
            cell.font = Font(bold=True)
            sheet.column_dimensions[col_letter].width = 20
        for row_num, (file_name, version) in enumerate(file_list, 2):
            sheet.cell(row=row_num, column=1, value=file_name)
            sheet.cell(row=row_num, column=2, value=version)
    workbook.save(excel_file)




def button_clicked():
    file_path = "./file_versions.xlsx"  # 指定要删除的文件路径
    try:
        # 尝试以管理员身份运行脚本
        os.remove(file_path)
        text.insert(tk.END, "历史文件删除成功" + "\n")

    except PermissionError:
        # 如果没有删除权限,尝试修改文件权限
        os.chmod(file_path, 0o777)
        os.remove(file_path)
        text.insert(tk.END, "历史文件删除成功" + "\n")
    except FileNotFoundError:
        text.insert(tk.END, "历史文件不存在" + "\n")
    except Exception as e:
        print("发生未知错误:", str(e))
    # 弹出文件选择对话框
    common_path = filedialog.askdirectory()

    # 更新文本框中的内容
    entry.delete(0, tk.END)
    entry.insert(tk.END, common_path)


    file_info = {
        "EXE Files": [],
        "DLL Files": []
    }
    for root, dirs, files in os.walk(common_path):
        for file in files:
            file_path = os.path.join(root, file)
            if file.endswith(".exe"):
                version = get_file_version(file_path)
                file_info["EXE Files"].append((file, version))
            elif file.endswith(".dll"):
                version = get_file_version(file_path)
                file_info["DLL Files"].append((file, version))

    excel_file = "file_versions.xlsx"
    write_to_excel(file_info, excel_file)

    text.insert(tk.END,f"File versions have been written to {excel_file}"+"\n")
    text.see(tk.END)
    time.sleep(10)

# 创建主窗口
window = tk.Tk()
window.geometry("800x600+200+200")

window.title("strings")
label = tk.Label(window,text = "请选择你希望查询版本的路径 : ")
# 创建输入框
entry = tk.Entry(window,width=40)
entry.pack()
# 创建按钮
button = tk.Button(window, text="选择路径", command=button_clicked)

button.pack()


# 创建文本框
text = tk.Text(window)
text.pack()
# 每次更新调试信息后,通过调用 after() 方法设置下一次更新的时间间隔
text.after(100)

# 使用布局管理器将它们水平放置
label.pack(side=tk.LEFT)
button.pack(side=tk.LEFT)
entry.pack(side=tk.LEFT)
# 进入消息循环
window.mainloop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值