最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python手搓一個(gè)Windows注冊表清理器

 更新時(shí)間:2025年12月18日 09:51:12   作者:森葉  
這篇文章主要為大家詳細(xì)介紹了如何使用Python手搓一個(gè)Windows注冊表清理器,本文將從開發(fā)到?EXE?打包進(jìn)行全面講解,希望對(duì)大家有所幫助

前言

相信大家在使用 Windows 時(shí)都遇到過這種情況:直接刪除了軟件安裝目錄,或者卸載過程出錯(cuò),導(dǎo)致“設(shè)置 -> 應(yīng)用和功能”列表里依然殘留著軟件的圖標(biāo)。點(diǎn)擊卸載,系統(tǒng)只會(huì)彈窗提示“找不到文件”,看著非常難受(強(qiáng)迫癥噩夢)。

雖然市面上有各種管家類軟件,但為了這點(diǎn)小功能裝個(gè)大管家實(shí)在沒必要。作為開發(fā)者,不如利用 Python 自己動(dòng)手寫一個(gè)輕量級(jí)的清理工具。

本文將復(fù)盤整個(gè)開發(fā)過程,包括 注冊表掃描、UAC 管理員提權(quán)、Tkinter UI 美化 以及最終的 PyInstaller 打包。

項(xiàng)目源碼

本項(xiàng)目已開源至 Gitee,歡迎 Star 和 Fork!

Gitee 地址https://gitee.com/sen2020/regedit-clean

核心思路

Windows 的“添加/刪除程序”列表,本質(zhì)上是讀取注冊表中的特定路徑。我們需要做的就是:

  • 掃描:遍歷 HKCU (當(dāng)前用戶) 和 HKLM (本地機(jī)器) 下的 Uninstall 注冊表項(xiàng)。
  • 判斷:讀取每個(gè)軟件的 InstallLocation (安裝路徑),檢測該路徑在磁盤上是否存在。如果不存在,判定為“失效”。
  • 展示:通過 GUI 列表展示失效項(xiàng),供用戶勾選。
  • 清理:調(diào)用 Windows API 刪除選中的注冊表項(xiàng)。

效果圖

實(shí)現(xiàn)細(xì)節(jié)

1. 注冊表掃描 (winreg)

Python 自帶的 winreg 模塊足以應(yīng)對(duì)。我們需要關(guān)注的路徑通常是:Software\Microsoft\Windows\CurrentVersion\Uninstall

import winreg
import os

# 掃描邏輯簡化版
def scan():
    scan_locations = [
        (winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\Uninstall"),
        (winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"),
        # 還要注意 64位系統(tǒng)下的 32位應(yīng)用注冊表
        (winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall")
    ]
    
    for hive, subkey in scan_locations:
        # ... 遍歷 EnumKey ...
        # 讀取 InstallLocation 并使用 os.path.exists 判斷

2. 搞定管理員權(quán)限 (UAC)

要?jiǎng)h除 HKEY_LOCAL_MACHINE 下的內(nèi)容,必須擁有管理員權(quán)限。

為了體驗(yàn)更好,我實(shí)現(xiàn)了自動(dòng)提權(quán):程序啟動(dòng)時(shí)檢測是否為 Admin,如果不是,則通過 ShellExecuteW 重新以管理員身份啟動(dòng)自己。

這里有個(gè)坑:腳本運(yùn)行打包后的 EXE 運(yùn)行,提權(quán)參數(shù)是不一樣的。

import ctypes
import sys

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False

if __name__ == "__main__":
    if is_admin():
        # 啟動(dòng)主程序 UI
        root = tk.Tk()
        app = RegistryCleanerApp(root)
        root.mainloop()
    else:
        # 請(qǐng)求提權(quán)
        try:
            if getattr(sys, 'frozen', False):
                # 如果是打包后的 exe
                script_param = None
            else:
                # 如果是 .py 腳本
                script_param = f'"{__file__}"'

            ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, script_param, None, 1)
            sys.exit()
        except Exception as e:
            print(f"Failed to elevate: {e}")

3. UI 交互與美化 (Tkinter + Pillow)

原生 Tkinter 的 Checkbutton 在 Treeview (列表控件) 中支持得并不好,而且在高分屏下非常小,難以點(diǎn)擊。

解決方案:使用 Pillow 庫動(dòng)態(tài)繪制 24x24 像素的圖片(選中/未選中狀態(tài)),放入 Treeview 的第一列,模擬復(fù)選框。

from PIL import Image, ImageDraw, ImageTk

def create_checkbox_icons(self):
    size = 24
    # 繪制未選中方框
    img_un = Image.new('RGBA', (size, size), (0, 0, 0, 0))
    draw_un = ImageDraw.Draw(img_un)
    draw_un.rectangle([2, 2, size-3, size-3], outline='#555555', width=2, fill='#FFFFFF')
    self.icon_unchecked = ImageTk.PhotoImage(img_un)

    # 繪制選中方框 (藍(lán)色背景 + 白色對(duì)勾)
    img_chk = Image.new('RGBA', (size, size), (0, 0, 0, 0))
    draw_chk = ImageDraw.Draw(img_chk)
    draw_chk.rectangle([2, 2, size-3, size-3], outline='#0078D7', width=2, fill='#0078D7')
    # ... 畫對(duì)勾邏輯 ...
    self.icon_checked = ImageTk.PhotoImage(img_chk)

這樣不僅解決了點(diǎn)擊區(qū)域過小的問題,還讓界面看起來更像現(xiàn)代的 Win11 風(fēng)格。

4. 項(xiàng)目結(jié)構(gòu)工程化

為了避免項(xiàng)目雜亂,我將源碼和資源進(jìn)行了分離:

regeditClean/
├── src/                  # 源代碼 (main.py 等)
├── assets/               # 資源文件 (圖標(biāo)、版本信息、截圖)
├── build_config/         # PyInstaller 配置目錄
├── dist/                 # 最終 EXE 輸出
└── requirements.txt      # 依賴庫

PyInstaller 打包

最后一步是將 Python 腳本打包成獨(dú)立的 .exe,方便在沒有 Python 環(huán)境的電腦上使用。

為了讓 EXE 看起來更正規(guī),我做了以下幾點(diǎn):

  • 自定義圖標(biāo):生成了一個(gè) .ico 文件。
  • 版本信息:創(chuàng)建 file_version_info.txt,寫入版權(quán)和版本號(hào)。
  • 配置文件分離:將 .spec 文件生成到 build_config 目錄,保持根目錄整潔。

打包命令:

pyinstaller --noconsole --onefile ^
    --name="RegCleanTool" ^
    --icon="assets\app_icon.ico" ^
    --version-file="assets\file_version_info.txt" ^
    --specpath="build_config" ^
    --distpath="dist" ^
    --workpath="build" ^
    src\main.py

安全測試

為了驗(yàn)證工具的可靠性,絕對(duì)不能拿自己的系統(tǒng)注冊表開玩笑。

我編寫了一個(gè) create_test_entry.py 腳本,專門在 HKCU 下生成 5 個(gè)指向假路徑的注冊表項(xiàng)(例如指向 C:\Game\Ghost.exe)。通過“生成假數(shù)據(jù) -> 掃描 -> 清理 -> 驗(yàn)證”的閉環(huán)測試,確保了工具邏輯的嚴(yán)密性。

最終效果

(這里可以插入您的運(yùn)行截圖 assets/runtime.png)

工具完美運(yùn)行,成功識(shí)別并清理了測試生成的失效項(xiàng),且 UI 清晰易用。

到此這篇關(guān)于使用Python手搓一個(gè)Windows注冊表清理器的文章就介紹到這了,更多相關(guān)Python Windows注冊表清理器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何利用python實(shí)現(xiàn)kmeans聚類

    如何利用python實(shí)現(xiàn)kmeans聚類

    K-Means是聚類算法的一種,以距離來判斷數(shù)據(jù)點(diǎn)間的相似度并對(duì)數(shù)據(jù)進(jìn)行聚類,下面這篇文章主要給大家介紹了關(guān)于如何利用python實(shí)現(xiàn)kmeans聚類的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Python 通過URL打開圖片實(shí)例詳解

    Python 通過URL打開圖片實(shí)例詳解

    這篇文章主要介紹了Python 通過URL打開圖片實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 最新版Anaconda安裝教程

    最新版Anaconda安裝教程

    本文主要介紹了最新版Anaconda安裝教程,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • Python圖片批量自動(dòng)摳圖去背景的代碼詳解

    Python圖片批量自動(dòng)摳圖去背景的代碼詳解

    這篇文章主要介紹了Python圖片批量自動(dòng)摳圖去背景,只要上傳圖片,就可以自動(dòng)把背景去掉把目標(biāo)對(duì)象摳出來,非常方便,對(duì)Python圖片批量自動(dòng)摳圖去背景的代碼感興趣的朋友一起看看吧
    2022-03-03
  • Python多線程批量采集圖片的代碼實(shí)現(xiàn)

    Python多線程批量采集圖片的代碼實(shí)現(xiàn)

    這篇文章主要給大家介紹了Python多線程批量采集圖片的代碼實(shí)現(xiàn),文中通過代碼示例講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-05-05
  • python爬蟲之基金信息存儲(chǔ)

    python爬蟲之基金信息存儲(chǔ)

    這篇文章主要介紹了python爬蟲之基金信息存儲(chǔ),前面已經(jīng)講了很多次要進(jìn)行數(shù)據(jù)存儲(chǔ),終于在上一篇中完成了數(shù)據(jù)庫的設(shè),在這篇文章我們就來完成數(shù)據(jù)存儲(chǔ)操作部分的介紹,需要的朋友可以參考一下
    2022-05-05
  • Python繪制柱狀圖堆疊圖完整代碼

    Python繪制柱狀圖堆疊圖完整代碼

    有個(gè)朋友要求幫忙繪制堆疊柱狀圖,查閱了一些文檔之后也算是完成了,只是一個(gè)小demo,下面我就記錄一下,這篇文章主要給大家介紹了關(guān)于Python繪制柱狀圖堆疊圖的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • Python常用的爬蟲技巧總結(jié)

    Python常用的爬蟲技巧總結(jié)

    本文給大家匯總介紹了Python編寫爬蟲的時(shí)候經(jīng)常需要用到的一些技巧,非常的實(shí)用,有需要的小伙伴可以參考下
    2016-03-03
  • keras 自定義loss損失函數(shù),sample在loss上的加權(quán)和metric詳解

    keras 自定義loss損失函數(shù),sample在loss上的加權(quán)和metric詳解

    這篇文章主要介紹了keras 自定義loss損失函數(shù),sample在loss上的加權(quán)和metric詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python 的 vars() 函數(shù)功能

    Python 的 vars() 函數(shù)功能

    本文將深入探討如何利用 vars() 函數(shù)的靈活性和功能,以提高代碼調(diào)試的效率和準(zhǔn)確性,感興趣的朋友跟隨小編一起看看吧
    2024-06-06

最新評(píng)論

蓬安县| 天镇县| 濮阳市| 兰西县| 通城县| 和龙市| 浪卡子县| 鹤峰县| 漳平市| 仙桃市| 阿拉善左旗| 桂阳县| 华池县| 大宁县| 会昌县| 中江县| 正定县| 惠来县| 甘孜| 集贤县| 梓潼县| 剑川县| 百色市| 都匀市| 英吉沙县| 南康市| 琼海市| 科尔| 内丘县| 都安| 双柏县| 高青县| 忻州市| 陕西省| 奉贤区| 宁城县| 定日县| 金乡县| 昔阳县| 莲花县| 会理县|