[python] 我用脚本实现了一个F1 F2代替ctrl+c复制 ctrl+v粘贴的软件 【Clipboard Tool】
·
Clipboard Tool 的奇思妙想
1. 概述
发现自己在工作时,经常会用到Ctrl +C Ctrl + V,还有企业微信的Alt+Shift+Al来截图,我想使用python 热键脚本实现代替
所以我想能用到F1代替复制 F2代替粘贴 F3代替企业微信的截图
那就完美了。
手指只需要放在这三个键上就不用老是移动了!!!
天才的想法。
其次就要研究Windows 托盘驻留工具,通过全局热键替代 Ctrl+C / Ctrl+V 及企业微信截图快捷键 Alt+Shift+A。纯 Python 实现,可打包为单文件 exe 免环境分发。
不吊胃口直接软件的截图
双击即可直接运行

- 再windows右下角托盘区点击,可以看到下图图标,即可开始使用了
软件会直接同步给你们免费使用!!!
2. 构思的架构设计
2.1 整体架构图

2.2 模块职责
| 模块 | 职责 |
|---|---|
| Hotkey Module | 注册/注销全局热键,绑定回调函数 |
| Tray Icon | 托盘图标绘制、菜单交互、悬浮提示 |
| Keyboard Simulator | 模拟按键发送,驱动 Windows 输入 |
2.3 数据流
用户按下 F1
→ keyboard 库底层 Hook (WH_KEYBOARD_LL) 捕获
→ suppress=True 拦截按键,不传递到活动窗口
→ 回调 on_f1() 执行
→ keyboard.send("ctrl+c") 通过 SendInput API 发送
→ 活动窗口收到 Ctrl+C,执行复制
3. 代码设计
3.1 文件结构
clipboard_tool.py # 主程序入口,所有功能单文件
├── create_tray_image() # 用 Pillow 绘制 64×64 剪贴板图标
├── start_tray() # 初始化 pystray 托盘图标和菜单
├── on_tray_exit() # 退出清理:卸载钩子、停止托盘、退出进程
├── on_f1() # F1 回调:发送 Ctrl+C
├── on_f2() # F2 回调:发送 Ctrl+V
├── on_f3() # F3 回调:发送 Alt+Shift+A
└── main() # 注册热键 → 启动托盘(阻塞)
3.2 核心代码说明
热键注册
keyboard.add_hotkey("f1", on_f1, suppress=True)
keyboard库在底层注册WH_KEYBOARD_LL钩子suppress=True使回调返回非零值,阻止按键继续传递- 回调在钩子线程中执行,不阻塞主线程
按键模拟
def on_f1():
keyboard.send("ctrl+c")
keyboard.send()调用 WindowsSendInputAPI- 模拟完整的按键按下和释放事件
- 目标窗口无差别接收,与应用真实按键效果一致
托盘
tray_icon = pystray.Icon("clipboard_tool", img, "Clipboard Tool", menu)
tray_icon.run()
pystray基于ctypes调用 Win32 Shell API (Shell_NotifyIcon)icon.run()阻塞主线程,内部运行消息循环- 热键回调在独立钩子线程运行,与消息循环不冲突
退出逻辑
def on_tray_exit():
keyboard.unhook_all()
if tray_icon:
tray_icon.stop()
os._exit(0)
unhook_all()— 移除所有键盘钩子tray_icon.stop()— 删除托盘图标,退出消息循环os._exit(0)— 强制终止进程,避免 tkinter 或其他线程阻止退出
3.3 依赖设计
| 依赖 | 版本 | 选型理由 |
|---|---|---|
keyboard |
≥0.13.5 | 跨平台全局热键,支持 suppress 拦截,API 简洁 |
pystray |
≥0.19.5 | 纯 Python 托盘实现,无额外 UI 框架依赖 |
Pillow |
≥10.0.0 | 绘制托盘图标,pystray 要求的图片格式 |
不依赖 tkinter / PyQt / wxPython,保持打包体积最小。
4. 打包方案
4.1 PyInstaller 配置
pyinstaller --onefile --noconsole --name ClipboardTool clipboard_tool.py
| 参数 | 作用 |
|---|---|
--onefile |
输出单文件 exe |
--noconsole |
不显示控制台窗口(后台运行) |
--name ClipboardTool |
指定输出文件名 |
4.2 打包产物
dist/ClipboardTool.exe
├── Python 解释器 (python314.dll)
├── 标准库 (base_library.zip)
├── 第三方依赖 (keyboard, pystray, Pillow...)
├── 字节码 (clipboard_tool.py → .pyc)
└── 引导程序 (runw.exe → 解压 + 执行)
4.3 分发说明
- 单文件,直接双击运行
- 无需安装 Python 或任何依赖
- 历史记录文件
clipboard_history.json(如有)生成在 exe 同目录
5. 使用说明
5.1 快捷键一览
| 按键 | 发送的键 | 效果 |
|---|---|---|
F1 |
Ctrl+C |
复制选中内容 |
F2 |
Ctrl+V |
粘贴 |
F3 |
Alt+Shift+A |
触发企业微信截图 |
5.2 托盘操作
- 左键/右键 点击托盘图标弹出菜单
- 菜单显示快捷键说明(灰色不可点击)
- 点击 Exit 完全退出
6. 注意事项
keyboard库需要管理员权限才能注册全局钩子,打包后的 exe 可尝试以管理员身份运行- 企业微信必须正在运行,F3 发送的
Alt+Shift+A才能被其捕获 - 如果热键与其他程序冲突,修改
keyboard.add_hotkey()的第一个参数即可
更多推荐
所有评论(0)