本帖最后由 ysjd22 于 2025-7-15 17:29 编辑
一直找不到合适自己的剪贴板工具,没办法只能自己造了。
用的autohotkey写的,没有界面,按shift+v显示在鼠标处,可 以按前面的数字粘贴,也可以鼠标点击粘贴。
可以保存50条,超过50条会顶替最先的条目,关闭再打开不保存内容。
需要管理员运行,不然可能粘贴不了。
没有界面,只能看看弹出窗口的截图:
7.15 修复打不开的问题。修改历史记录为30条。
https://wwvo.lanzouo.com/iex1f313rdtc
源码也放上,有能力的可以修改:
如何在剪贴板每一项前面增加一个锁的图标,实现点击锁定和解锁呢?水平太菜,一直写不完美!!有大佬帮忙吗?
[Asm] 纯文本查看 复制代码 #Warn All, Off
#SingleInstance Force
; 检查并请求管理员权限
if not A_IsAdmin {
try
{
Run '*RunAs "' A_ScriptFullPath '"'
ExitApp
}
catch as e {
MsgBox("无法以管理员权限运行脚本: " e.Message, "错误", "Iconx")
}
}
; 配置参数
MaxHistory := 50
PollInterval := 300
; 初始化变量
global LastClipboard := ""
global ClipboardHistory := []
; 定时器和热键
SetTimer(CheckClipboard, PollInterval)
Hotkey("+v", ShowClipboardHistory) ; Shift+V 打开菜单
CheckClipboard() {
global LastClipboard, ClipboardHistory
if !ClipWait(0.1)
return
CurrentClipboard := A_Clipboard
if (CurrentClipboard != LastClipboard && CurrentClipboard != "") {
ClipboardHistory.InsertAt(1, CurrentClipboard)
if (ClipboardHistory.Length > MaxHistory)
ClipboardHistory.Pop()
LastClipboard := CurrentClipboard
}
}
ShowClipboardHistory(*) {
global ClipboardHistory
if (ClipboardHistory.Length = 0) {
MsgBox("剪贴板历史记录为空", "提示", "Iconi")
return
}
cbMenu := Menu()
; 紧凑型菜单项格式
loop ClipboardHistory.Length {
index := A_Index
item := ClipboardHistory[index]
try {
; 紧凑型显示文本
displayText := StrReplace(item, "`r`n", "|")
displayText := StrReplace(displayText, "`n", "|")
displayText := SubStr(displayText, 1, 50)
if (StrLen(item) > 50)
displayText .= "..."
; 紧凑格式:[序号] 内容
cbMenu.Add(index ". " displayText, ((idx) => (*) => PasteFromHistory(idx))(index))
; 在每个项目后添加一个小的分隔线(可选)
if (index < ClipboardHistory.Length) {
cbMenu.Add() ; 添加分隔线
}
}
}
MouseGetPos(&MouseX, &MouseY)
cbMenu.Show(MouseX, MouseY)
}
PasteFromHistory(index) {
global ClipboardHistory
try {
; 检查索引有效性
if (index < 1 || index > ClipboardHistory.Length) {
throw Error("无效的索引: " index)
}
; 保存当前剪贴板
savedClip := A_Clipboard
A_Clipboard := ""
Sleep(50)
; 设置剪贴板内容
A_Clipboard := ClipboardHistory[index]
if !ClipWait(0.5)
throw Error("剪贴板内容设置超时")
; 确保窗口激活
activeWin := WinGetID("A")
WinActivate(activeWin)
Sleep(200) ; 确保窗口已激活
; 使用 SendInput 提高可靠性
SendInput("^v")
; 恢复剪贴板
Sleep(200)
A_Clipboard := savedClip
} catch as e {
MsgBox("粘贴失败: " e.Message, "错误", "Iconx")
}
}
n/a
添加到词汇Audio
|