效率提升-连续复制,连续粘贴

 

主要功能:

多次记录多次复制的文本内容/拆分一次复制的多行  按顺序粘贴

使用方法:

 * 主要为了解决一些a窗口连续复制,然后b窗口连续粘贴的情况,节省来回切换的麻烦
 * 按住Ctrl 点击右键 开启功能 脚本启动默认开启
 * Ctrl+v 输出复制的内容(按复制顺序挨个输出内容)
 * 按住Ctrl 点击鼠标滚轮键 切换是否自动切词的开关 就是直接复制一段内容的时候是否自动按换行拆分成多行 默认是开启的
 * 示例:
 *    启动脚本 选中 1 Ctrl+c 再选中 2 Ctrl+c
 *    在功能开启的过程中 第一次Ctrl+v 是先输出 1,第二次Ctrl+v是输出 2,再按无效果
 *    然后Ctrl+鼠标右键关闭功能  这个时候 Ctrl+v 输出 2 (Ctrl+v恢复正常功能,输出的是剪切板里最新的内容)

实现方式:

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

给TA捐赠
共{{data.count}}人
人已捐赠
案例

【ComObjActive操作PPT】之对齐选定对象及置于顶层及底层

2022-8-3 19:36:35

AHKV1案例

影子输入法的一点小感想

2022-8-7 9:14:42

2 条回复 A文章作者 M管理员
  1. 白檀

    坏了,我重复造轮子了

  2. 妙啊

    Send换成SendInput感觉效果更好 ^LButton:: 下面增加一行 MouseClick, Left 效果会更好

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索