Python文件锁脚本:如何在打开锁定文件时自动执行且不修改原文件?
解决文件锁工具的自动触发问题
方案1:自定义文件后缀关联(最易实现)
- 给需要锁定的文件重命名添加自定义后缀(比如把
report.pdf改成report.pdf.lock),仅修改文件名,不碰原文件内容。 - 在Windows系统中设置该自定义后缀(
.lock)的默认打开程序为你的Python脚本。 - 脚本核心逻辑:
- 接收系统传入的被双击文件路径。
- 弹出密码输入框验证密码。
- 验证通过后,去掉自定义后缀还原原文件名,调用系统默认程序打开真实文件;验证失败则提示错误,终止操作。
- 优点:实现简单,依赖Windows原生关联机制,无需复杂代码。
- 缺点:用户需接受文件后缀变更;若有人手动删除自定义后缀,仍能直接打开原文件——可以配合把原文件移到隐藏文件夹,脚本内部处理路径映射来规避。
方案2:开机自启的文件访问监听器(匹配你的思路)
- 核心逻辑:做一个后台常驻的监控程序,开机自动启动,实时检测目标文件的访问请求,拦截后验证密码。
- 具体步骤:
- 用
psutil库监控进程的文件打开操作,或通过win32api结合WMI监听文件访问事件。 - 检测到进程试图打开锁定文件时,调用Windows API暂停该进程。
- 弹出密码验证窗口,验证通过则恢复进程允许访问;失败则强制关闭进程并提示错误。
- 将监听器注册为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
相关产品推荐
相关产品推荐

