windwos实现覆盖图标

该代码创建了一个Python类IconOverlay1,用于处理图标的覆盖。它连接到SQLite数据库查询文件信息,并根据条件决定是否应用图标覆盖。程序还会检查用户权限,注册到系统注册表以更新文件图标,并在必要时刷新文件路径。
摘要由CSDN通过智能技术生成
import os
import time
import json
import settings as config
import sqlite3
import sys
import os
from win32comext.shell import shell, shellcon
import winerror

db_path = os.path.join(config.UTILS_PATH, "my_local.db")

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

class IconOverlay1:
    _reg_clsid_ = '{512AE200-F075-41E6-97DD-48ECA4311F2E}'
    _reg_progid_ = 'Python OverlayHandler1'
    _reg_desc_ = 'Icon Overlay Handler to indicate Python packages'
    _public_methods_ = ['GetOverlayInfo', 'GetPriority', 'IsMemberOf']
    _com_interfaces_ = [shell.IID_IShellIconOverlayIdentifier]

    def GetOverlayInfo(self):
        #图标路径
        return os.path.join(config.ICO_PATH, "a.ico"), 0, shellcon.ISIOI_ICONFILE

    def GetPriority(self):
      #优先级
        return 0

    def IsMemberOf(self, fname, attributes):
        #覆盖图标的路径
        conn = sqlite3.connect(db_path, check_same_thread=False)
        cursor = conn.cursor()
        cursor.execute(f'select path,id from loacl_path where is_delete=0')
        res = cursor.fetchall()
        for file_lists in res:
            if file_lists[0] == fname:
            #满足以上条件,覆盖
                return winerror.S_OK
        cursor.close()
        conn.close()
        return winerror.S_FALSE



if __name__ == '__main__':
    import win32api
    import win32con
    import win32com.server.register

    if is_admin():
    #注册表注册
        win32com.server.register.UseCommandLine(IconOverlay1)
        keyname1 = r'Software\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\          PyPackageOy2'
        key1 = win32api.RegCreateKey(win32con.HKEY_LOCAL_MACHINE, keyname1)
        win32api.RegSetValue(key1, None, win32con.REG_SZ, IconOverlay1._reg_clsid_)
    else:
        ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, "")
        os.system('taskkill /f /im explorer.exe & start explorer.exe ')

满足条件,下面的可以刷新文件路径【更新图标】
# 刷新该路径
shell.SHChangeNotify(shellcon.SHCNE_ATTRIBUTES,
shellcon.SHCNF_PATH | shellcon.SHCNF_FLUSHNOWAIT,
bytes(path, ‘gbk’), None)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 如果你在Windows 10上使用SVN,你可以通过以下步骤进行安装和配置。 首先,你可以从TortoiseSVN的官方网站下载安装程序。你可以在https://tortoisesvn.net/downloads.html找到下载地址。根据你的系统选择合适的版本进行下载,比如TortoiseSVN-1.14.0.28885-x64-svn-1.14.0.msi。\[1\] 安装完成后,你可以按照以下方法进行配置。 方法1: 使用注册表编辑器进行配置。 1. 按下Win+R,输入regedit,打开注册表编辑器。 2. 找到以下路径:HKEY_LOCAL_MACHINE->SOFTWARE->Microsoft->Windows->CurrentVersion->Explorer->ShellIconOverlayIdentifiers。 3. 将以"Tortoise"开头的标签名字修改一下,在前面加上几个空格。 4. 再次按下Win+R,输入regedit,打开注册表编辑器。 5. 找到以下路径:HKEY_LOCAL_MACHINE->SOFTWARE->Microsoft->Windows->CurrentVersion->Explorer->ShellIconOverlayIdentifiers。 6. 检查是否以"Tortoise"开头的标签已经在开头。 7. 重启电脑或者结束任务并重新启动任务来使配置生效。\[2\] 方法2: 配置svn.exe路径。 1. 如果在配置中找不到svn.exe的路径,可能是在默认安装SVN时忽略了安装svn.exe。 2. 双击运行之前的安装包,选择修改(modify),选中svn.exe进行安装。 3. 一路点击"Next",完成安装。 4. 然后就可以在配置中找到svn.exe的路径了。\[3\] 希望以上信息对你有帮助! #### 引用[.reference_title] - *1* *3* [Windows10下安装TortoiseSVN及Pycharm配置SVN教程](https://blog.csdn.net/qq_43515713/article/details/130679085)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [四种方法解决:Windows10下使用SVN文件夹不显示小绿勾](https://blog.csdn.net/qq_44778023/article/details/115859196)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值