调用win32clipboard.OpenClipboard()出现“Access denied”错误求助
剪贴板监控程序权限错误解决
程序需求:监控剪贴板内容,将变化的内容写入文件,按下Ctrl+Shift+P停止运行(停止功能正常),但获取剪贴板内容时失效,报错权限拒绝。
原代码
import win32clipboard import keyboard filename = input("Filename: ") file = open(filename, "a") data = "" while True: previousdata = data win32clipboard.OpenClipboard() data = win32clipboard.GetClipboardData() win32clipboard.CloseClipboard() print(data) if data != previousdata: file.write(data+"\n") else: print("No change") if keyboard.is_pressed("ctrl+shift+p"): break print("Stopped") import os os.system("pause")
错误信息
Traceback (most recent call last): File "C:\Users\Juli\Desktop\python\clipboardcopy.py", line 8, in <module> win32clipboard.OpenClipboard() pywintypes.error: (5, 'OpenClipboard', 'Access denied.')
问题原因
Windows剪贴板同一时间仅允许一个进程打开访问,原代码存在两个核心问题:
- 循环无延时,高频访问剪贴板,容易和其他正在使用剪贴板的进程冲突
- 未处理异常,若某次
OpenClipboard后出现错误,剪贴板未被关闭,会导致后续访问全部失败
修复后的代码
import win32clipboard import keyboard import time import pywintypes filename = input("Filename: ") # 指定utf-8编码避免非ASCII字符乱码 file = open(filename, "a", encoding="utf-8") data = "" while True: previousdata = data try: win32clipboard.OpenClipboard() # 优先读取Unicode文本,兼容更多场景 if win32clipboard.IsClipboardFormatAvailable(win32clipboard.CF_UNICODETEXT): data = win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT) else: data = win32clipboard.GetClipboardData() win32clipboard.CloseClipboard() print(data) if data != previousdata: file.write(data + "\n") file.flush() # 立即写入文件,避免缓存丢失 else: print("No change") except pywintypes.error as e: print(f"剪贴板访问失败: {e}") # 确保剪贴板被关闭,避免占用 try: win32clipboard.CloseClipboard() except: pass data = previousdata # 保持上一次的内容状态 # 检测停止快捷键 if keyboard.is_pressed("ctrl+shift+p"): break # 增加延时,降低剪贴板访问频率,减少冲突 time.sleep(0.5) # 关闭文件,释放资源 file.close() print("Stopped") import os os.system("pause")
关键修改说明
- 加入异常捕获:用
try-except处理剪贴板操作的错误,确保即使访问失败也能尝试关闭剪贴板,避免资源占用 - 增加循环延时:
time.sleep(0.5)降低访问频率,减少和其他进程的剪贴板竞争 - 支持多格式文本:优先读取
CF_UNICODETEXT格式,兼容中文、特殊字符等场景 - 文件写入优化:指定编码避免乱码,调用
flush()确保内容立即写入文件 - 资源释放:循环结束后主动关闭文件,避免资源泄漏
内容的提问来源于stack exchange,提问作者Juli
相关产品推荐
相关产品推荐

