前言
因为最近遇到了好些网站和应用不支持粘贴剪贴板内容的情况,故用写了这个小项目,将剪贴板的内容模拟键盘输入进行流式输出。可以解决绝大部分网站和应用不能粘贴剪贴板的问题。 在这里访问此项目ClipboardStream-typing
使用指南
下载
在ClipboardStream-typing 的releases中下载最新的ClipboardStreamingOutput.exe 文件和config.json(可选)

运行ClipboardStreamingOutput.exe,得到以下运行结果
配置文件加载成功:.\config.json
脚本已启动。按 ctrl+s 开始输入(确保焦点在目标窗口)。
输入过程中,按 esc 退出。
按 ctrl+alt+r 重新读取剪贴板。
剪贴板内容已读取:'example_text'其中快捷键和输出延迟可以在config.json中定义
{
"hotkeys": {
"start": "ctrl+s", # 开始输入快捷键
"exit": "esc", # 输入过程中停止输出快捷键
"reload": "ctrl+alt+r" # 重新加载剪贴板快捷键
},
"delay": {
"min_s": 0.007, # 最小输入延迟(s)
"max_s": 0.02 # 最大输出延迟(s)
},
"start_delay_s": 0.5 # 从按下快捷键到开始输出文本的延迟
}此时按<ctrl>+s 开始输出,按<esc> 退出输出,<ctrl>+<alt>+r 重新加载剪贴板内容
以下为示例:

在程序运行时可以重复读取,粘贴剪贴板内容,退出程序请直接关闭运行窗口
项目解读
使用库
pyperclip 用于读取操作系统剪贴板内容
pyperclip是一个第三方库(需通过pip安装),用于操作系统的剪贴板(clipboard)。它可以从剪贴板读取文本,或将文本复制到剪贴板中。
import pyperclip
# 读取剪贴板内容并赋值给text
text = pyperclip.paste()time 用于引入时间延迟
time是Python标准库,用于处理时间相关的操作。它可以用于暂停程序执行(例如,使用time.sleep()来引入延迟),测量时间间隔,或获取当前时间戳。这常用于控制程序的执行速度、模拟实时输出、定时任务或避免过快循环导致的资源消耗。
import time
# 使用time.sleep()来引入延迟,默认单位为秒
time.sleep(0.1)random 用于生成随机数
random是Python标准库,用于生成随机数。它可以产生随机整数、浮点数、序列(如随机选择列表元素),或模拟随机事件。常用结合time库生成随机延迟。
import random
# 将延迟(delay_s)设定为最小0.5s到最大1s的随机数
delay_s = random.uniform(0.5, 1)pynput keyboard # 键盘监听、热键和输入模拟
pynput是一个第三方库(需通过pip安装),用于监控和控制输入设备(如键盘和鼠标)。从keyboard模块导入后,它允许监听键盘事件(例如,按键按下/释放)、设置热键(全局快捷键),或模拟键盘输入(如自动按键)。这常用于自动化工具、宏录制
from pynput import keyboard
# 创建键盘控制器(用于模拟输入,支持UET-8)
controller = keyboard.Controller()
# 将快捷键参数导入函数
hotkey_start = keyboard.HotKey(keyboard.HotKey.parse(parse_hotkey(hotkey_config['start'])), on_start)
hotkey_exit = keyboard.HotKey(keyboard.HotKey.parse(parse_hotkey(hotkey_config['exit'])), on_exit)
hotkey_reload = keyboard.HotKey(keyboard.HotKey.parse(parse_hotkey(hotkey_config['reload'])), on_reload)
# 键盘监听器(用于检测热键)
def on_press(key):
hotkey_start.press(listener.canonical(key))
hotkey_exit.press(listener.canonical(key))
hotkey_reload.press(listener.canonical(key))
def on_release(key):
hotkey_start.release(listener.canonical(key))
hotkey_exit.release(listener.canonical(key))
hotkey_reload.release(listener.canonical(key))json # 读取外部配置文件
json是Python标准库,用于处理JSON(JavaScript Object Notation)格式的数据。它允许将Python数据结构(如字典、列表)编码为JSON字符串,或从JSON字符串解码回Python对象。这常用于API交互、配置文件读写、数据交换或Web开发。
import json
# 定位json文件,选择读取方式,将config.json中的变量参数读取到python中。如果失败则使用默认配置
try:
config_path = resource_path('config.json')
with open(config_path, 'r', encoding='utf-8') as f:
config = json.load(f)
hotkey_config = config['hotkeys']
delay_config = config['delay']
start_delay_s = config.get('start_delay_s', 0.5)
print(f"配置文件加载成功:{config_path}")
except (FileNotFoundError, KeyError, json.JSONDecodeError) as e:
print(f"警告: 配置文件加载失败 ({e}),路径:{config_path}。将使用默认设置。")
# 如果配置文件有问题,使用默认值
hotkey_config = {
"start": "ctrl+s",
"exit": "esc",
"reload": "ctrl+alt+r"
}
delay_config = {
"min_s": 0.007,
"max_s": 0.02
}
start_delay_s = 0.5 # 默认启动延迟os 获取当前工作路径
os是Python标准库,用于与操作系统交互。它提供文件/目录操作(如创建、删除、重命名)、路径处理、环境变量访问、进程管理(如执行系统命令)等功能。这常用于脚本自动化、文件管理或跨平台兼容性。示例场景:检查文件是否存在、更改当前工作目录,或运行外部命令
import os
def resource_path(relative_path: str) -> str:
"""返回资源的绝对路径:冻结时使用 exe 同目录,未冻结时使用脚本目录。"""
if getattr(sys, 'frozen', False):
base_path = os.path.dirname(sys.executable)
else:
base_path = os.path.dirname(os.path.abspath(__file__))
return os.path.join(base_path, relative_path)sys 用于读取工作路径
sys是Python标准库,用于访问Python解释器相关的变量和函数。它允许处理命令行参数、标准输入/输出/错误流、退出程序、获取系统信息(如Python版本、平台)等。这常用于命令行工具、错误处理或动态调整程序行为。
eg:同上
主程序
# 主函数:启动监听并处理输入
print(f"脚本已启动。按 {hotkey_config['start']} 开始输入(确保焦点在目标窗口)。")
print(f"输入过程中,按 {hotkey_config['exit']} 退出。")
print(f"按 {hotkey_config['reload']} 重新读取剪贴板。")
print("剪贴板内容已读取:", text[:50] + "..." if len(text) > 50 else text) # 显示前50字符预览
with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
while True:
if is_running:
time.sleep(start_delay_s) # 在启动后延迟
# 开始输入循环
for char in text:
if should_exit:
break # 如果收到退出信号,立即停止
controller.type(char) # 使用 pynput 输出单个字符(支持中文等UFT-8字符)
# 使用配置文件中的随机延迟
delay_s = random.uniform(delay_config['min_s'], delay_config['max_s'])
time.sleep(delay_s)
# 输入完成后或退出时,重置标志
is_running = False
should_exit = False
print("输入完成或已停止!")
time.sleep(0.1) # 小延迟,减少CPU占用,等待下一次启动
# 注意:脚本会一直运行,直到手动停止结语
学了几个python库的调用方法,实现了从面向github编程到面向gemini编程的重大转变(雾)
评论区