剪贴板流式输出~简单的python项目~ClipboardStream-typing
2025-11-16
2026-08-29
4

前言

因为最近遇到了好些网站和应用不支持粘贴剪贴板内容的情况,故用写了这个小项目,将剪贴板的内容模拟键盘输入进行流式输出。可以解决绝大部分网站和应用不能粘贴剪贴板的问题。 在这里访问此项目[ClipboardStream-typing](https://github.com/Labiey/ClipboardStream-typing)

使用指南

  1. 下载

在[***ClipboardStream-typing***](https://github.com/Labiey/ClipboardStream-typing)的***releases***中下载最新的***ClipboardStreamingOutput.exe*** 文件和***config.json***(可选)

clipboardstream-download.png


  1. 运行**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 重新加载剪贴板内容以下为示例:

clipboardstream-demo.gif
  1. 在程序运行时可以重复读取,粘贴剪贴板内容,退出程序请直接关闭运行窗口

项目解读

使用库

  1. pyperclip用于读取操作系统剪贴板内容

  • pyperclip是一个第三方库(需通过pip安装),用于操作系统的剪贴板(clipboard)。它可以从剪贴板读取文本,或将文本复制到剪贴板中。

import pyperclip

# 读取剪贴板内容并赋值给text

text = pyperclip.paste()
  1. time 用于引入时间延迟

  • time是Python标准库,用于处理时间相关的操作。它可以用于暂停程序执行(例如,使用time.sleep()来引入延迟),测量时间间隔,或获取当前时间戳。这常用于控制程序的执行速度、模拟实时输出、定时任务或避免过快循环导致的资源消耗。

import time

# 使用time.sleep()来引入延迟,默认单位为秒

time.sleep(0.1)
  1. random用于生成随机数

  • random是Python标准库,用于生成随机数。它可以产生随机整数、浮点数、序列(如随机选择列表元素),或模拟随机事件。常用结合time库生成随机延迟。

import random

# 将延迟(delay_s)设定为最小0.5s到最大1s的随机数

delay_s = random.uniform(0.5, 1)

4. 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))

5. 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  # 默认启动延迟

6. 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)
  1. 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编程的重大转变(雾)

目录