吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9964|回复: 93
收起左侧

[Windows] 实时监控并消除微信只读--支持后台(开源求优化)

  [复制链接]
bean0283 发表于 2023-5-11 09:12
image.png image.png
现在支持后台到系统托盘,但是双击无法打开界面,只能通过右键显示,请大佬帮忙指点一下,怎么才能双击打开界面
[Python] 纯文本查看 复制代码
import os
import time
import json
import winreg
import configparser
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QTextEdit, QPushButton,QSystemTrayIcon,QMenu,QAction,qApp
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon
import sys

class FileEventHandler(FileSystemEventHandler):
    def __init__(self, text_edit):
        super().__init__()
        self.text_edit = text_edit
        
    def on_moved(self, event):
        if event.is_directory:
            return
        time.sleep(0.1)
        file_path = event.dest_path
        print(file_path)
        if file_path in processed_files and processed_files[file_path]:
            return
        os.chmod(file_path, 0o777)  # 解除新增文件的只读状态
        print('解除新增文件只读状态:', file_path)
        self.text_edit.append('解除新增文件只读状态:'+str(file_path))
        self.text_edit.setReadOnly(True) # 设置文本框不可手动编辑
         # 保存已处理过的文件列表
        try:
            with open(json_path, 'w') as f:
                json.dump(processed_files, f)
        except Exception as e:
            window.text_edit.append("写入失败:"+str(e))
    
        
class App(QWidget):
    APP_PATH = os.path.abspath(sys.argv[0])
    DIR_PATH = os.path.dirname(APP_PATH)
    
    def __init__(self):
        super().__init__()
        self.text_edit = QTextEdit()  # 创建 text_edit 属性
        self.text_edit.setReadOnly(True) # 设置文本框不可手动编辑
        self.initUI()
        self.tray = Tray(self)
        
    
    def initUI(self):
        self.setWindowTitle('微信监控并解除只读')
        self.setGeometry(100, 100, 700, 500)
        self.setWindowIcon(QIcon(DIR_PATH+'\ico.png'))

        # 创建垂直布局
        vbox = QVBoxLayout()

        # 创建文本框
        vbox.addWidget(self.text_edit)

        # 创建按钮
        self.button = QPushButton('设置开机自启')
        self.button.clicked.connect(self.toggle_startup)
        vbox.addWidget(self.button)

        # 创建清空按钮
        clear_button = QPushButton('清空文本框')
        clear_button.clicked.connect(self.clear_text_edit)
        vbox.addWidget(clear_button)

        # 设置布局
        self.setLayout(vbox)

        # 设置开机自启
        if config.getboolean('AUTO_STARTUP', 'enabled'):
            self.set_startup_enabled()
            self.button.setText('取消开机自启')
        else:
            self.set_startup_disabled()
            self.button.setText('设置开机自启')

    def toggle_startup(self):
        if config.getboolean('AUTO_STARTUP', 'enabled'):
            self.set_startup_disabled()
            config.set('AUTO_STARTUP', 'enabled', 'false')
            self.button.setText('设置开机自启')
            #self.text_edit.append('已取消开机自启')
        else:
            self.set_startup_enabled()
            config.set('AUTO_STARTUP', 'enabled', 'true')
            self.button.setText('取消开机自启')
            

        # 将修改后的配置写入配置文件
        with open(config_path, 'w') as f:
            config.write(f)

    def set_startup_enabled(self):
        
        key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", 0, winreg.KEY_ALL_ACCESS)
        winreg.SetValueEx(key, "ChatGPT", 0, winreg.REG_SZ, APP_PATH)
        winreg.CloseKey(key)
        self.text_edit.append('已设置开机自启')

    def set_startup_disabled(self):
        key_path = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
        with winreg.OpenKey(winreg.HKEY_CURRENT_USER, key_path, 0, winreg.KEY_ALL_ACCESS) as key:
            try:
                winreg.DeleteValue(key, "ChatGPT")
                self.text_edit.append('已取消开机自启')
            except FileNotFoundError:
                self.text_edit.append('未设置开机自启,不需取消')
   
    def clear_text_edit(self):
        self.text_edit.clear()
        
    def closeEvent(self, event):
        event.ignore()
        self.hide()
        self.tray.show()
    def showEvent(self, event):
        # 窗口显示时将焦点设置到文本框
        self.text_edit.setFocus()
        
    def mouseDoubleClickEvent(self, event):
        self.show()
        
    def show(self):
        super().show()

class Tray(QSystemTrayIcon):
    def __init__(self, app):
        super().__init__(app)
        self.app = app
        self.setIcon(QIcon('ico.png'))
        self.setVisible(True)
        menu = QMenu()
        show_action = QAction('显示', self)
        show_action.triggered.connect(self.show_app)
        menu.addAction(show_action)

        exit_action = QAction('退出', self)
        exit_action.triggered.connect(qApp.quit)
        menu.addAction(exit_action)
       
        self.setContextMenu(menu)
        
   
        
    #def show_app(self):
     #   self.app.show()
     #   self.app.setWindowState(Qt.WindowActive)
     #   self.hide()
        
    def mouseDoubleClickEvent(self, event):
        if self.app.isHidden():
            self.app.show()
        else:
            self.app.hide()
        
    def show_app(self):
        self.app.show()
        self.app.setWindowState(Qt.WindowActive)
        #self.setToolTip('微信监控并解除只读\n双击隐藏')
    
    def hide_app(self):
        self.app.hide()
        #self.setToolTip('微信监控并解除只读\n双击显示')
 

if __name__ == '__main__':
   
    # 获取程序绝对路径
    #APP_PATH = os.path.abspath(__file__)
    APP_PATH = os.path.abspath(sys.argv[0])
    DIR_PATH = os.path.dirname(APP_PATH)
    # 读取配置文件
    config = configparser.ConfigParser()
    config_path = DIR_PATH + '\config.ini'
    config.read(config_path)
    
    app = QApplication([])
    
    window = App()
    # 获取用户文档路径
    documents_folder_key_path = r"Software\Tencent\WeChat"
    with winreg.OpenKey(winreg.HKEY_CURRENT_USER, documents_folder_key_path) as key:
        user_documents_path, _ = winreg.QueryValueEx(key, "FileSavePath")

    if user_documents_path == "MyDocument:":
        documents_folder_key_path = r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
        with winreg.OpenKey(winreg.HKEY_CURRENT_USER, documents_folder_key_path) as key:
            user_documents_path, _ = winreg.QueryValueEx(key, "Personal")

    user_documents_path = user_documents_path + "\WeChat Files"
    window.text_edit.append("微信保存文件夹位置:"+user_documents_path)

    # 获取子文件夹下所有以 "wxid" 开头的文件夹中的 "FileStorage\File" 文件夹
    parent_folder = user_documents_path
    target_folders = []
    for dirpath, dirnames, filenames in os.walk(parent_folder):
        for dirname in dirnames:
            if dirname.startswith('wxid') or dirname.startswith('notsolo') or dirname.startswith('chu352150070'):
                target_folder = os.path.join(dirpath, dirname, 'FileStorage\File')
                if os.path.exists(target_folder):
                    target_folders.append(target_folder)
    window.text_edit.append("目标文件夹列表:"+str(target_folders))
    # 加载已处理过的文件列表
    processed_files = {}
    json_path = DIR_PATH + '\processed_files.json'
    if os.path.exists(json_path):
        with open(json_path, 'r') as f:
            processed_files = json.load(f)

    # 解除目标文件夹及其子文件夹下所有文件的只读状态
    for target_folder in target_folders:
        for dirpath, dirnames, filenames in os.walk(target_folder):
            for filename in filenames:
                file_path = os.path.join(dirpath, filename)
                if file_path in processed_files and processed_files[file_path]:
                    continue
                os.chmod(file_path, 0o777)  # 解除文件只读状态
                processed_files[file_path] = True  # 标记文件已处理
                window.text_edit.append("解除只读状态:"+str(file_path))

    # 保存已处理过的文件列表
    try:
        with open(json_path, 'w') as f:
            json.dump(processed_files, f)
    except Exception as e:
        window.text_edit.append("写入失败:"+str(e))

    # 监听目标文件夹及其子文件夹下新增文件,并解除只读状态
    window.text_edit.append("开始监听文件...")
    window.text_edit.setReadOnly(True) # 设置文本框不可手动编辑
    processed_files = {}
    event_handler = FileEventHandler(window.text_edit)
    observer = Observer()
    for target_folder in target_folders:
        observer.schedule(event_handler, path=target_folder, recursive=True)
    observer.start()
    window.show()
    app.exec_()

    observer.stop()
    observer.join()
    qApp.quit()


成品下载地址:https://wwyr.lanzoue.com/ibwVF0va4idc


免费评分

参与人数 11吾爱币 +10 热心值 +9 收起 理由
oshuanghao + 1 谢谢@Thanks!
kgd1981 + 1 + 1 谢谢@Thanks!
piziniude + 1 + 1 最新版pc微信的设置里已经有取消只读的选项了。
zhouyongh123 + 1 + 1 谢谢@Thanks!
txf52pojie + 1 + 1 我很赞同!
jingjing5320 + 1 + 1 我很赞同!
小龙飞 + 1 + 1 热心回复!
君子无声 + 1 谢谢@Thanks!
冬天冷了多穿点 + 1 谢谢@Thanks!
illusion-聋 + 1 + 1 用心讨论,共获提升!
czz404 + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

sin.l 发表于 2023-5-11 09:43

请问我这是啥情况
nexuswh 发表于 2023-5-11 09:23
sin.l 发表于 2023-5-11 09:46
schoolclub 发表于 2023-5-11 09:17
这个简直是新版wechat的神器啊~
 楼主| bean0283 发表于 2023-5-11 10:38
土鸡炖蘑菇 发表于 2023-5-11 10:14
我是直接复制源代码 运行的,没有下载成品

那你需要配置一个config.ini到源码的同一目录下
 楼主| bean0283 发表于 2023-5-11 09:24
lqbao 发表于 2023-5-11 09:23
能修改微信文件保存位置吗?

会源码的化可以修改这个地方的内容 image.png
lqbao 发表于 2023-5-11 09:23
能修改微信文件保存位置吗?
头像被屏蔽
SHpancyu88 发表于 2023-5-11 09:16
提示: 作者被禁止或删除 内容自动屏蔽
ts0729 发表于 2023-5-11 09:33
感谢分享
土鸡炖蘑菇 发表于 2023-5-11 09:37
Traceback (most recent call last):
  File "D:/python/测试/实时监测新版微信只读文件.py", line 185, in <module>
    window = App()
  File "D:/python/测试/实时监测新版微信只读文件.py", line 48, in __init__
    self.initUI()
  File "D:/python/测试/实时监测新版微信只读文件.py", line 76, in initUI
    if config.getboolean('AUTO_STARTUP', 'enabled'):
  File "C:\Python38\lib\configparser.py", line 828, in getboolean
    return self._get_conv(section, option, self._convert_to_boolean,
  File "C:\Python38\lib\configparser.py", line 808, in _get_conv
    return self._get(section, conv, option, raw=raw, vars=vars,
  File "C:\Python38\lib\configparser.py", line 803, in _get
    return conv(self.get(section, option, **kwargs))
  File "C:\Python38\lib\configparser.py", line 781, in get
    d = self._unify_values(section, vars)
  File "C:\Python38\lib\configparser.py", line 1149, in _unify_values
    raise NoSectionError(section) from None
configparser.NoSectionError: No section: 'AUTO_STARTUP'

进程已结束,退出代码为 1


这个是怎么回事呀?
 楼主| bean0283 发表于 2023-5-11 09:39
土鸡炖蘑菇 发表于 2023-5-11 09:37
Traceback (most recent call last):
  File "D:/python/测试/实时监测新版微信只读文件.py", line 185, i ...

你解压后有没有config.ini这个文件
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-4 16:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表