侧边栏壁纸
  • 累计撰写 1 篇文章
  • 累计创建 3 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

剪贴板流式输出~简单的python项目~ClipboardStream-typing

Administrator
2025-11-16 / 0 评论 / 0 点赞 / 16 阅读 / 0 字

前言

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

使用指南

  1. 下载

ClipboardStream-typing releases中下载最新的ClipboardStreamingOutput.exe 文件和config.json(可选)

  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 重新加载剪贴板内容

以下为示例:

  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)
  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))
  1. 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  # 默认启动延迟
  1. 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编程的重大转变(雾)

0

评论区