主要功能:
多次记录多次复制的文本内容/拆分一次复制的多行 按顺序粘贴
使用方法:
实现方式:
OnClipboardChange(Func) 监听剪贴板
Loop,Parse, content, `n, `r 解析多行内容
Array.Push 记录内容
Array.Pop 获取内容
#If 标签控制是否代替Ctrl+v
#SingleInstance, Force
SendMode Input
SetWorkingDir, %A_ScriptDir%
OnClipboardChange("recordClipboardText")
/*
full_command_line := DllCall("GetCommandLine", "str")
if not (A_IsAdmin or RegExMatch(full_command_line, " /restart(?!\S)"))
{
try
{
if A_IsCompiled
Run *RunAs "%A_ScriptFullPath%" /restart
else
Run *RunAs "%A_AhkPath%" /restart "%A_ScriptFullPath%"
}
ExitApp
}
*/
/**
* 主要为了解决一些a窗口连续复制,然后b窗口连续粘贴的情况,节省来回切换的麻烦
* 按住Ctrl 点击右键 开启功能 脚本启动默认开启
* Ctrl+v 输出复制的内容(按复制顺序挨个输出内容)
* 按住Ctrl 点击鼠标滚轮键 切换是否自动切词的开关 就是直接复制一段内容的时候是否自动按换行拆分成多行 默认是开启的
* 示例:
* 启动脚本 选中 1 Ctrl+c 再选中 2 Ctrl+c
* 在功能开启的过程中 第一次Ctrl+v 是先输出 1,第二次Ctrl+v是输出 2,再按无效果
* 然后Ctrl+鼠标右键关闭功能 这个时候 Ctrl+v 输出 2 (Ctrl+v恢复正常功能,输出的是剪切板里最新的内容)
*/
/**
* bool 判断是否开启剪切板记录
*/
global clipboardMonitorFlag := true
/**
* bool 剪切板内容是否自动分词
*/
global autoParseClipboardContent := true
/**
* array 挨个记录的复制内容
*/
global recordClipboardTextArr := []
recordClipboardText(type) {
;在 OnClipboardChange 函数或标签正在运行时如果剪贴板内容改变, 这时的剪贴板通知事件会丢失. 如果不希望这样, 在标签的首行指定 Critical. 不过, 这样做也会缓冲/延迟在 OnClipboardChange 线程运行期间产生的其他线程的运行(例如热键的按击).
Critical
global clipboardMonitorFlag
if (!clipboardMonitorFlag) {
Return
}
if (1 != type) {
Return
}
global recordClipboardTextArr
if (autoParseClipboardContent) {
tempCount := 0
Loop, Parse, clipboard, `n, `r
{
if (!StrLen(A_LoopField)) {
continue
}
tempCount++
recordClipboardTextArr.push(A_LoopField)
}
tempAllCount := recordClipboardTextArr.Length()
ToolTip, 成功添加: %tempCount% 条`,当前共: %tempAllCount% 条
SetTimer, RemoveToolTip, -1000
} else {
recordClipboardTextArr.push(clipboard)
ToolTip, 添加成功
SetTimer, RemoveToolTip, -500
}
Return
}
RemoveToolTip:
ToolTip
Return
;开启关闭匹配复制功能
^RButton::
global clipboardMonitorFlag
clipboardMonitorFlag := !clipboardMonitorFlag
if (clipboardMonitorFlag) {
global recordClipboardTextArr
recordClipboardTextArr := []
ToolTip, 开启功能
SetTimer, RemoveToolTip, -1000
} else {
ToolTip, 关闭功能
SetTimer, RemoveToolTip, -1000
}
Return
;开启/关闭切词
^MButton::
global autoParseClipboardContent
autoParseClipboardContent := !autoParseClipboardContent
toolTipContent := autoParseClipboardContent ? "开启" : "关闭"
ToolTip, %toolTipContent%自动切词
SetTimer, RemoveToolTip, -500
Return
#If, clipboardMonitorFlag
^v::
;MouseClick, Left
;Sleep, 20
global recordClipboardTextArr
if (!IsObject(recordClipboardTextArr)) {
Return
}
length := recordClipboardTextArr.length()
if (length <= 0) {
Return
}
value := recordClipboardTextArr.RemoveAt(1)
SendInput, {Text}%value%
;ToolTip, %value%
;SetTimer, RemoveToolTip, -1000
Return
#If
Send换成SendInput感觉效果更好 ^LButton:: 下面增加一行 MouseClick, Left 效果会更好