[python] 我用脚本实现了一个F1 F2代替ctrl+c复制 ctrl+v粘贴的软件 【Clipboard Tool】

发布时间:2026/7/17 6:30:24
[python] 我用脚本实现了一个F1 F2代替ctrl+c复制 ctrl+v粘贴的软件 【Clipboard Tool】 Clipboard Tool 的奇思妙想1. 概述发现自己在工作时经常会用到Ctrl CCtrl V,还有企业微信的AltShiftAl来截图我想使用python 热键脚本实现代替所以我想能用到F1代替复制F2代替粘贴F3代替企业微信的截图那就完美了。手指只需要放在这三个键上就不用老是移动了天才的想法。其次就要研究Windows 托盘驻留工具通过全局热键替代CtrlC/CtrlV及企业微信截图快捷键AltShiftA。纯 Python 实现可打包为单文件 exe 免环境分发。不吊胃口直接软件的截图双击即可直接运行再windows右下角托盘区点击可以看到下图图标即可开始使用了软件会直接同步给你们免费使用2. 构思的架构设计2.1 整体架构图2.2 模块职责模块职责Hotkey Module注册/注销全局热键绑定回调函数Tray Icon托盘图标绘制、菜单交互、悬浮提示Keyboard Simulator模拟按键发送驱动 Windows 输入2.3 数据流用户按下 F1 → keyboard 库底层 Hook (WH_KEYBOARD_LL) 捕获 → suppressTrue 拦截按键不传递到活动窗口 → 回调 on_f1() 执行 → keyboard.send(ctrlc) 通过 SendInput API 发送 → 活动窗口收到 CtrlC执行复制3. 代码设计3.1 文件结构clipboard_tool.py # 主程序入口所有功能单文件 ├── create_tray_image() # 用 Pillow 绘制 64×64 剪贴板图标 ├── start_tray() # 初始化 pystray 托盘图标和菜单 ├── on_tray_exit() # 退出清理卸载钩子、停止托盘、退出进程 ├── on_f1() # F1 回调发送 CtrlC ├── on_f2() # F2 回调发送 CtrlV ├── on_f3() # F3 回调发送 AltShiftA └── main() # 注册热键 → 启动托盘阻塞3.2 核心代码说明热键注册keyboard.add_hotkey(f1,on_f1,suppressTrue)keyboard库在底层注册WH_KEYBOARD_LL钩子suppressTrue使回调返回非零值阻止按键继续传递回调在钩子线程中执行不阻塞主线程按键模拟defon_f1():keyboard.send(ctrlc)keyboard.send()调用 WindowsSendInputAPI模拟完整的按键按下和释放事件目标窗口无差别接收与应用真实按键效果一致托盘tray_iconpystray.Icon(clipboard_tool,img,Clipboard Tool,menu)tray_icon.run()pystray基于ctypes调用 Win32 Shell API (Shell_NotifyIcon)icon.run()阻塞主线程内部运行消息循环热键回调在独立钩子线程运行与消息循环不冲突退出逻辑defon_tray_exit():keyboard.unhook_all()iftray_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--nameClipboardTool 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 快捷键一览按键发送的键效果F1CtrlC复制选中内容F2CtrlV粘贴F3AltShiftA触发企业微信截图5.2 托盘操作左键/右键点击托盘图标弹出菜单菜单显示快捷键说明灰色不可点击点击Exit完全退出6. 注意事项keyboard库需要管理员权限才能注册全局钩子打包后的 exe 可尝试以管理员身份运行企业微信必须正在运行F3 发送的AltShiftA才能被其捕获如果热键与其他程序冲突修改keyboard.add_hotkey()的第一个参数即可想要获得源码exe运行搜索绿泡泡 “码来的小朋友”