You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python文件锁脚本:如何在打开锁定文件时自动执行且不修改原文件?

解决文件锁工具的自动触发问题

方案1:自定义文件后缀关联(最易实现)

  • 给需要锁定的文件重命名添加自定义后缀(比如把report.pdf改成report.pdf.lock),仅修改文件名,不碰原文件内容。
  • 在Windows系统中设置该自定义后缀(.lock)的默认打开程序为你的Python脚本。
  • 脚本核心逻辑:
    1. 接收系统传入的被双击文件路径。
    2. 弹出密码输入框验证密码。
    3. 验证通过后,去掉自定义后缀还原原文件名,调用系统默认程序打开真实文件;验证失败则提示错误,终止操作。
  • 优点:实现简单,依赖Windows原生关联机制,无需复杂代码。
  • 缺点:用户需接受文件后缀变更;若有人手动删除自定义后缀,仍能直接打开原文件——可以配合把原文件移到隐藏文件夹,脚本内部处理路径映射来规避。

方案2:开机自启的文件访问监听器(匹配你的思路)

  • 核心逻辑:做一个后台常驻的监控程序,开机自动启动,实时检测目标文件的访问请求,拦截后验证密码。
  • 具体步骤:
    1. 用psutil库监控进程的文件打开操作,或通过win32api结合WMI监听文件访问事件。
    2. 检测到进程试图打开锁定文件时,调用Windows API暂停该进程。
    3. 弹出密码验证窗口,验证通过则恢复进程允许访问;失败则强制关闭进程并提示错误。
    4. 将监听器注册为Windows开机自启项(通过写入注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run实现)。
  • 关键代码片段示例:
    import psutil
    import ctypes
    from ctypes import wintypes
    
    # 绑定Windows API函数
    OpenProcess = ctypes.windll.kernel32.OpenProcess
    OpenProcess.argtypes = [wintypes.DWORD, wintypes.BOOL, wintypes.DWORD]
    OpenProcess.restype = wintypes.HANDLE
    
    SuspendThread = ctypes.windll.kernel32.SuspendThread
    SuspendThread.argtypes = [wintypes.HANDLE]
    SuspendThread.restype = wintypes.DWORD
    
    ResumeThread = ctypes.windll.kernel32.ResumeThread
    ResumeThread.argtypes = [wintypes.HANDLE]
    ResumeThread.restype = wintypes.DWORD
    
    def monitor_target_files(target_paths):
        while True:
            for proc in psutil.process_iter(['pid', 'open_files']):
                try:
                    for file in proc.open_files():
                        if file.path in target_paths:
                            # 暂停目标进程
                            h_proc = OpenProcess(0x00000020, False, proc.pid)
                            if h_proc:
                                SuspendThread(h_proc)
                                # 密码验证逻辑(可替换为GUI弹窗)
                                input_pwd = input("请输入解锁密码:")
                                if input_pwd == "your_secure_password":
                                    ResumeThread(h_proc)
                                else:
                                    proc.kill()
                                ctypes.windll.kernel32.CloseHandle(h_proc)
                except (psutil.NoSuchProcess, psutil.AccessDenied):
                    continue
    
    if __name__ == "__main__":
        # 替换为你要保护的文件路径列表
        protected_files = ["C:/Users/xxx/Documents/secret.docx"]
        monitor_target_files(protected_files)
    
  • 优点:无需修改原文件和后缀,用户操作完全透明。
  • 缺点:实现复杂度高,需要处理Windows权限问题(可能需管理员权限),监控逻辑会有轻微性能损耗,还容易被杀毒软件误报。

方案3:Windows快捷方式代理

  • 创建指向Python脚本的快捷方式,修改快捷方式目标为:pythonw.exe "C:/path/to/your/lock_script.py" "C:/path/to/target/file.pdf"(用pythonw.exe避免弹出控制台窗口)。
  • 把原文件设置为隐藏状态,只让用户看到这个快捷方式。用户双击快捷方式时直接启动脚本验证密码,通过后打开原文件。
  • 优点:完全不修改原文件,实现成本极低。
  • 缺点:用户若找到隐藏的原文件,仍能直接打开,适合信任环境下使用。

内容的提问来源于stack exchange,提问作者Seintian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 13:54:25