求推荐一个选中自动复制的软件

这样就不用在按电脑的快捷键了.搜索了下网上的 有的网站说popclick可以(buneng).

mac 目前还没找到,windows挺多的,详细请看https://dragking.en.softonic.com/

1 Like

要实现的话很简单,只要监控一下鼠标挂钩消息,在抬起的时候模拟个ctrl+c就行。

不过这个操作在很多情况下这种操作会带来额外的负面影响。
比如你要使用剪贴板里的内容替换一段文字,当你选中这段要替换的文字以后,这段文字就被复制到剪贴板,把要替换成的内容冲掉了。

我的办法是简化操作过程。在选中内容的时候,松开鼠标之前按C/或者右键就复制。可以参考Quicker的左键辅助功能:左键辅助 - Quicker

1 Like

dragking

应该没有必要吧?如果还用剪贴板历史,那不是会有很多冗余

如果是单纯的浏览器的话, 有类似的扩展或者脚本. 选中即可复制.

如果所有软件都选中就复制,可能不是好选择.

如果是不想按下 ^c, 有些软件可以设置为中键复制. 比如鼠标软件、剪贴板软件等等。

Cent Browser 浏览器就有个 [自动复制选中文本] 功能,挺好用的~

能打败复制粘贴的,只有拖拽。

浏览器的,很好用的脚本:选中复制

1 Like

在从粘贴板粘贴文本之前,就先删除掉要替换的内容,你觉得呢

nice, 朋友 chrome ok, 但是火狐不知道为啥不行

好的,已帮忙@脚本的作者说明情况了

作者的回复:

检查下是不是没开剪切板权限?

或者手动尝试更改代码17行为
.writeText(clipboard)
.then(() => {
console.log(‘文本已经成功复制到剪切板’)
})
.catch((err) => {
console.error(‘无法复制文本:’, err)
})

感谢您,我还要继续找找有没有全局的 没有的话 只能自己学代码了

Mouseinc可以,不过我现在也不太敢用它。

我曾经有类似的需求,需要复制一些文本,然后贴粘到网页的某个地方,后来我把我要复制的内容做成HTML文件,点击文字就会复制到剪贴板。
--------代码开始--------

点击文字复制

这是 p 标签内容

这是 div 标签内容
这是 span 标签内容 --------代码结束-------- 与之间的三行用其中一种就行,可以用excel生成代码再贴到这个地方

贴代码显示不出来,要用的话用OCR转成文字吧

mouselnc 手势软件可以实现这个功能

浏览器的话我就发现这个拓展好用AutoCopy – 下载 🦊 Firefox 扩展(zh-CN)

记得去设置里吧把复制后置时间调一下

我也有这种需求,但浏览器扩展或脚本无法在打开的 pdf 上运行,所以用 ahk 实现的,源代码忘了哪找的,这个是在源代码基础上改了一部分,可以自定义开关以及程序窗口黑白名单,支持双击、Shift 选中、拖拽复制

ahk v1


#NoEnv
SetBatchLines -1
ListLines Off

; 设置 F1 作为启动和关闭热键
F1::
    suspend

    ; 判断变量 toggle 是否定义,若未定义则初始化为 false
    if (toggle = "")
        toggle := false

    ; 切换变量 toggle 的值
    toggle := !toggle

    ; 显示提示信息
    if toggle
        ToolTip, 复制已关闭, 900, 500, , 30
    else
        ToolTip, 复制已开启, 900, 500, , 30

    ; 等待 1 秒后清除提示信息
    Sleep, 1000
    ToolTip
return


#IfWinActive, ahk_exe firefox.exe

    ; Auto copy clipboard
~Lshift::
    TimeButtonDown = %A_TickCount%
    ; Wait for it to be released
    Loop
    {
        Sleep 10
        GetKeyState, LshiftState, Lshift, P
        if LshiftState = U ; Button has been released.
            break
        elapsed = %A_TickCount%
        elapsed -= %TimeButtonDown%
        if elapsed > 200 ; Button was held down long enough
        {
            x0 = A_CaretX
            y0 = A_CaretY
            Loop
            {
                Sleep 20 ; yield time to others
                GetKeyState keystate, Lshift
                IfEqual keystate, U, {
                    x = A_CaretX
                    y = A_CaretY
                    break
                }
            }
            if (x-x0 > 5 or x-x0 < -5 or y-y0 > 5 or y-y0 < -5)
            { ; Caret has moved
                clip0 := ClipBoardAll ; save old clipboard
                ;ClipBoard =
                Send ^c ; selection -> clipboard
                Send ^c ; 发送 Ctrl+C 组合键(使此处自动恢复为复制功能)
                ClipWait ; 等待剪贴板不为空

                ; 字符串修正
                clipboard := StrReplace(clipboard, " `r`n", " ")
                clipboard := StrReplace(clipboard, "-`r`n", "")

                FoundPos := RegExMatch(clipboard, "^[a-z|A-Z].*", match)
                ; MsgBox % FoundPos
                If (FoundPos = 0)
                    ; Chinese content
                clipboard := StrReplace(clipboard, "`r`n", "")
                else
                    ; English content
                clipboard := StrReplace(clipboard, "`r`n", " ")
                return

            }
            return
        }
    }

    ; 全选复制
    ; ~^a::Send, ^c ;Ctl+A = Select All, then Copy

^c::
    ; 进行常规复制命令
    clipboard := "" ; 清空剪贴板(配合 ClipWait 提高脚本健壮性)
    Send ^c ; 发送 Ctrl+C 组合键( 使此处自动恢复为复制功能)
    ClipWait ; 等待剪贴板不为空

    ; 字符串修正
    clipboard := StrReplace(clipboard, " `r`n", " ")
    clipboard := StrReplace(clipboard, "-`r`n", "")

    FoundPos := RegExMatch(clipboard, "^[a-z|A-Z].*", match)
    ; MsgBox % FoundPos
    If (FoundPos = 0)
        ; Chinese content
    clipboard := StrReplace(clipboard, "`r`n", "")
    else
        ; English content
    clipboard := StrReplace(clipboard, "`r`n", " ")
return

; 左键拖选文字: 复制
WatchTheMouse:
    MouseGetPos, nx, ny
    dy := ny-oy
    dx := nx-ox
    If (dx**2 > 0 and dx**2>dy**2) ;edit 4 for sensitivity (changes sensitivity to movement)
    {
        times := Abs(dy)/1 ;edit 1 for sensitivity (changes frequency of scroll signal)
        Loop, %times%
        {
            If (dx > 0)
                Click WheelRight
            Else
                Click WheelLeft
        }
    }
    If (dy**2 > 0 and dy**2>dx**2) ;edit 0 for sensitivity (changes sensitivity to movement)
    {
        times := Abs(dy)/1 ;edit 1 for sensitivity (changes frequency of scroll signal)
        Loop, %times% 
        {
            If (dy > 0)
                Click WheelDown
            Else
                Click WheelUp
        } 
    }
    MouseMove ox, oy
return

SystemCursor(OnOff=1) ; INIT = "I","Init"; OFF = 0,"Off"; TOGGLE = -1,"T","Toggle"; ON = others
{
    static AndMask, XorMask, $, h_cursor
    ,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13 ; system cursors
    , b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13 ; blank cursors
    , h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12,h13 ; handles of default cursors
    if (OnOff = "Init" or OnOff = "I" or $ = "") ; init when requested or at first call
    {
        $ = h ; active default cursors
        VarSetCapacity( h_cursor,4444, 1 )
        VarSetCapacity( AndMask, 32*4, 0xFF )
        VarSetCapacity( XorMask, 32*4, 0 )
        system_cursors = 32512,32513,32514,32515,32516,32642,32643,32644,32645,32646,32648,32649,32650
        StringSplit c, system_cursors, `,
        Loop %c0%
        {
            h_cursor := DllCall( "LoadCursor", "uint",0, "uint",c%A_Index% )
            h%A_Index% := DllCall( "CopyImage", "uint",h_cursor, "uint",2, "int",0, "int",0, "uint",0 )
            b%A_Index% := DllCall("CreateCursor","uint",0, "int",0, "int",0
            , "int",32, "int",32, "uint",&AndMask, "uint",&XorMask )
        }
    }
    if (OnOff = 0 or OnOff = "Off" or $ = "h" and (OnOff < 0 or OnOff = "Toggle" or OnOff = "T"))
        $ = b ; use blank cursors
    else
        $ = h ; use the saved cursors

    Loop %c0%
    {
        h_cursor := DllCall( "CopyImage", "uint",%$%%A_Index%, "uint",2, "int",0, "int",0, "uint",0 )
        DllCall( "SetSystemCursor", "uint",h_cursor, "uint",c%A_Index% )
    }
}
return

gnPressCount := 0

~LButton::

    cos_mousedrag_treshold := 20 ; pixels
    MouseGetPos, cos_mousedrag_x, cos_mousedrag_y
    win1 := WinActive("A")
    KeyWait LButton
    MouseGetPos, cos_mousedrag_x2, cos_mousedrag_y2
    win2 := WinActive("A")
    WinGetClass cos_class, A
    if(((abs(cos_mousedrag_x2 - cos_mousedrag_x) > cos_mousedrag_treshold
        or abs(cos_mousedrag_y2 - cos_mousedrag_y) > cos_mousedrag_treshold)) and win1 = win2 
    and cos_class != "ConsoleWindowClass")
    {
        ; SendInput ^c  ;不换行
        ; clipboard := "" ; 清空剪贴板(配合 ClipWait 提高脚本健壮性)
        Send ^c ; 发送 Ctrl+C 组合键(使此处自动恢复为复制功能)
        ClipWait ; 等待剪贴板不为空

        ; 字符串修正
        clipboard := StrReplace(clipboard, " `r`n", " ")
        clipboard := StrReplace(clipboard, "-`r`n", "")

        FoundPos := RegExMatch(clipboard, "^[a-z|A-Z].*", match)
        ; MsgBox % FoundPos
        If (FoundPos = 0)
            ; Chinese content
        clipboard := StrReplace(clipboard, "`r`n", "")
        else
            ; English content
        clipboard := StrReplace(clipboard, "`r`n", " ")
        return
    }

    {
        gnPressCount += 1
        SetTimer, ProcSubroutine, Off
        SetTimer, ProcSubroutine, 300
        Return
    }
ProcSubroutine:
    {
        ; 在计时器事件触发时,需要将其关掉
        SetTimer, ProcSubroutine, Off
        If gnPressCount = 1
        {
            ; 第一类行为
            ; MsgBox, 触发单击鼠标右键事件
        }Else If gnPressCount = 2
        {
            ; 第二类行为
            Send, ^c
        }Else
        {
            ; MsgBox, 触发三击鼠标右键事件
        }
        ; 在结束后,还需要将鼠标右键的按键次数置为0,以方便下次使用
        gnPressCount := 0
        Return
    }

return

If (A_TimeSincePriorHotkey < 300)
{
    Send, ^c
}
Return

   ;RButton::MButton
   ;MButton::RButton


#IfWinActive




这个怎么用?下载个autohotkey软件?